/** * This verifies the can_checkin() method in EE_registration * * @since 4.5.0 * * @return void */ function test_can_checkin() { //setup a registration $r = $this->new_model_obj_with_dependencies('Registration'); $t = $this->new_ticket(); //let's assign the above ticket to our registration $r->_add_relation_to($t, 'Ticket'); $r->save(); $d = EEM_Datetime_Ticket::instance()->get_one(array(array('TKT_ID' => $r->get('TKT_ID')))); $this->assertInstanceOf('EE_Datetime_Ticket', $d); $valid_DTT_ID = $d->get('DTT_ID'); $invalid_DTT_ID = 99999; //k let's test the possible expected responses of can_checkin; //IGNORING status //test one: valid DTT and unapproved reg $r->set_status(EEM_Registration::status_id_not_approved); $this->assertTrue($r->can_checkin($valid_DTT_ID, false)); //test two: invalid DTT and approved reg $r->set_status(EEM_Registration::status_id_approved); $this->assertFalse($r->can_checkin($invalid_DTT_ID, false)); //including status //test one: valid DTT and approved reg $this->assertTrue($r->can_checkin($valid_DTT_ID)); //test two: invalid DTT and approved reg $this->assertFalse($r->can_checkin($invalid_DTT_ID)); //test three: valid DTT and not approved reg $r->set_status(EEM_Registration::status_id_not_approved); $this->assertFalse($r->can_checkin($valid_DTT_ID)); //test four: valid DTT and incomplete reg $r->set_status(EEM_Registration::status_id_incomplete); $this->assertFalse($r->can_checkin($valid_DTT_ID)); //test five: invalid DTT and incomplete reg $this->assertFalse($r->can_checkin($invalid_DTT_ID)); }
/** * The purpose of this method is simply to check whether this registration can checkin to the given datetime. * * @param int | EE_Datetime $DTT_OR_ID The datetime the registration is being checked against * @param bool $check_approved This is used to indicate whether the caller wants can_checkin to also consider registration status as well as datetime access. * * @return bool */ public function can_checkin($DTT_OR_ID, $check_approved = TRUE) { $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID); //first check registration status if ($check_approved && !$this->is_approved() || !$DTT_ID) { return false; } //is there a datetime ticket that matches this dtt_ID? if (!EEM_Datetime_Ticket::instance()->exists(array(array('TKT_ID' => $this->get('TKT_ID'), 'DTT_ID' => $DTT_ID)))) { return false; } //final check is against TKT_uses return $this->verify_can_checkin_against_TKT_uses($DTT_ID); }
/** * test verifies that if importing from site A to B, is the exported data from A * coincidentally has the same IDs as data in site B, that it DOES NOT overwrite it */ public function test_save_data_array_to_db__from_other_site__data_with_same_ids() { //add some stuff to the db, but just keep references to their clones (which won't be affected by the entity mapper) $original_event1 = clone $this->new_model_obj_with_dependencies('Event'); $original_datetime1 = clone $this->new_model_obj_with_dependencies('Datetime', array('EVT_ID' => $original_event1->ID())); $original_ticket1 = clone $this->new_model_obj_with_dependencies('Ticket'); $original_datetime_ticket = clone $this->new_model_obj_with_dependencies('Datetime_Ticket', array('DTT_ID' => $original_datetime1->ID(), 'TKT_ID' => $original_ticket1->ID())); //now let's make some model objects that AREN'T in this database //that could confuse the importer $other_db_event = $this->new_model_obj_with_dependencies('Event', array(), false); $other_db_event_props = $other_db_event->model_field_array(); $other_db_event_props['EVT_ID'] = $original_event1->ID(); $other_db_event2 = $this->new_model_obj_with_dependencies('Event', array(), false); $other_db_event2_props = $other_db_event2->model_field_array(); $other_db_event2_props['EVT_ID'] = 1000; $other_db_datetime = $this->new_model_obj_with_dependencies('Datetime', array('EVT_ID' => $original_event1->ID()), false); $other_db_datetime_props = $other_db_datetime->model_field_array(); $other_db_datetime_props['DTT_ID'] = $original_datetime1->ID(); $other_db_ticket = $this->new_model_obj_with_dependencies('Ticket', array('TKT_ID' => $original_ticket1->ID()), false); $other_db_ticket_props = $other_db_ticket->model_field_array(); $other_db_ticket_props['TKT_ID'] = $original_ticket1->ID(); $other_db_datetime_ticket = EE_Datetime_Ticket::new_instance(array('DTT_ID' => $original_datetime1->ID(), 'TKT_ID' => $original_ticket1->ID()), false); $other_db_datetime_ticket_props = $other_db_datetime_ticket->model_field_array(); $other_db_datetime_ticket_props['DTK_ID'] = $original_datetime_ticket->ID(); $event_count = EEM_Event::instance()->count(); $datetime_count = EEM_Datetime::instance()->count(); $ticket_count = EEM_Ticket::instance()->count(); $datetime_ticket_count = EEM_Datetime_Ticket::instance()->count(); $csv_data_rows = array('Event' => array($other_db_event_props, $other_db_event2_props), 'Datetime' => array($other_db_datetime_props), 'Ticket' => array($other_db_ticket_props), 'Datetime_Ticket' => array($other_db_datetime_ticket_props)); //ok give it a whirl... $new_mappings = EE_Import::instance()->save_data_rows_to_db($csv_data_rows, true, array()); //what should have happened: //we should have a mapping for each newly-inserted //events... $this->assertNotEmpty($new_mappings); $this->assertArrayHasKey('Event', $new_mappings); $event1_mapping = $new_mappings['Event'][$original_event1->ID()]; $this->assertNotEmpty($event1_mapping); $this->assertNotEquals($original_event1->ID(), $event1_mapping); $event2_mapping = $new_mappings['Event'][1000]; $this->assertNotEmpty($event2_mapping); $this->assertNotEquals(1000, $event1_mapping); //newly inerted datetime... $this->assertNotEmpty($new_mappings); $this->assertArrayHasKey('Datetime', $new_mappings); $datetime1_mapping = $new_mappings['Datetime'][$original_datetime1->ID()]; $this->assertNotEmpty($datetime1_mapping); $this->assertNotEquals($original_datetime1->ID(), $datetime1_mapping); //newly inserted ticket $this->assertNotEmpty($new_mappings); $this->assertArrayHasKey('Ticket', $new_mappings); $ticket1_mapping = $new_mappings['Ticket'][$original_ticket1->ID()]; $this->assertNotEmpty($ticket1_mapping); $this->assertNotEquals($original_ticket1->ID(), $ticket1_mapping); //and newly inserted datetime-ticke... $this->assertNotEmpty($new_mappings); $this->assertArrayHasKey('Datetime_Ticket', $new_mappings); $datetime_ticket_mapping = $new_mappings['Datetime_Ticket'][$original_datetime_ticket->ID()]; $this->assertNotEmpty($datetime_ticket_mapping); $this->assertNotEquals($original_datetime_ticket->ID(), $datetime_ticket_mapping); //we should have inserted 2 new events, 1 new datetime, 1 new ticket and 1 new relation $this->assertEquals($event_count + 2, EEM_Event::instance()->count()); $this->assertEquals($datetime_count + 1, EEM_Datetime::instance()->count()); $this->assertEquals($ticket_count + 1, EEM_Ticket::instance()->count()); $this->assertEquals($datetime_ticket_count + 1, EEM_Datetime_Ticket::instance()->count()); //the newly inserted datetime shoudl have bene associated to the new event for $other_db_event_props $inserted_datetime_from_other_db = EEM_Datetime::instance()->get_one_by_ID($datetime1_mapping); $this->assertEquals($event1_mapping, $inserted_datetime_from_other_db->get('EVT_ID')); //there shoudl be a newly inserted ticket $inserted_ticket_from_other_db = EEM_Ticket::instance()->get_one_by_ID($ticket1_mapping); $this->assertNotNull($inserted_ticket_from_other_db); //the newly inserted datetime-ticket should hae been associated with the newly inserted datetime and ticket $inserted_datetime_ticket_from_other_db = EEM_Datetime_Ticket::instance()->get_one_by_ID($datetime_ticket_mapping); $this->assertEquals($ticket1_mapping, $inserted_datetime_ticket_from_other_db->get('TKT_ID')); $this->assertEquals($datetime1_mapping, $inserted_datetime_ticket_from_other_db->get('DTT_ID')); //the original event shouldn't be affected, nor should it have more than the original datetime on it $updated_event1 = EEM_Event::instance()->refresh_entity_map_from_db($original_event1->ID()); $this->assertEEModelObjectsEquals($original_event1, $updated_event1); //the original datetime shoudln't be affected, nor shoudl it have more than the original ticket associagted with it $updated_datetime1 = EEM_Datetime::instance()->refresh_entity_map_from_db($original_datetime1->ID()); $this->assertEEModelObjectsEquals($original_datetime1, $updated_datetime1); }
/** * posts_join_for_orderby * usage: $SQL .= EEH_Event_Query::posts_join_for_orderby( $orderby_params ); * * @access public * @param array $orderby_params * @return string */ public static function posts_join_for_orderby($orderby_params = array()) { $SQL = ''; global $wpdb; foreach ((array) $orderby_params as $orderby) { switch ($orderby) { case 'ticket_start': case 'ticket_end': $SQL .= ' LEFT JOIN ' . EEM_Datetime_Ticket::instance()->table() . ' ON (' . EEM_Datetime::instance()->table() . '.DTT_ID = ' . EEM_Datetime_Ticket::instance()->table() . '.DTT_ID )'; $SQL .= ' LEFT JOIN ' . EEM_Ticket::instance()->table() . ' ON (' . EEM_Datetime_Ticket::instance()->table() . '.TKT_ID = ' . EEM_Ticket::instance()->table() . '.TKT_ID )'; break; case 'venue_title': case 'city': $SQL .= ' LEFT JOIN ' . EEM_Event_Venue::instance()->table() . ' ON (' . $wpdb->posts . '.ID = ' . EEM_Event_Venue::instance()->table() . '.EVT_ID )'; $SQL .= ' LEFT JOIN ' . EEM_Venue::instance()->table() . ' ON (' . EEM_Event_Venue::instance()->table() . '.VNU_ID = ' . EEM_Venue::instance()->table() . '.VNU_ID )'; break; case 'state': $SQL .= ' LEFT JOIN ' . EEM_Event_Venue::instance()->table() . ' ON (' . $wpdb->posts . '.ID = ' . EEM_Event_Venue::instance()->table() . '.EVT_ID )'; $SQL .= ' LEFT JOIN ' . EEM_Event_Venue::instance()->second_table() . ' ON (' . EEM_Event_Venue::instance()->table() . '.VNU_ID = ' . EEM_Event_Venue::instance()->second_table() . '.VNU_ID )'; break; break; } } return $SQL; }
/** * posts_join_for_orderby * usage: $SQL .= EEH_Event_Query::posts_join_for_orderby( $orderby_params ); * * @access public * @param string $SQL * @param array $orderby_params * @return string */ public static function posts_join_for_orderby($SQL = '', $orderby_params = array()) { foreach ((array) $orderby_params as $orderby) { switch ($orderby) { case 'ticket_start': case 'ticket_end': $SQL .= EEH_Event_Query::_posts_join_for_datetime($SQL, EEM_Datetime_Ticket::instance()->table() . '.' . EEM_Datetime::instance()->primary_key_name()); $SQL .= ' LEFT JOIN ' . EEM_Ticket::instance()->table() . ' ON (' . EEM_Datetime_Ticket::instance()->table() . '.' . EEM_Ticket::instance()->primary_key_name() . ' = ' . EEM_Ticket::instance()->table() . '.' . EEM_Ticket::instance()->primary_key_name() . ' )'; break; case 'venue_title': case 'city': $SQL .= EEH_Event_Query::_posts_join_for_event_venue($SQL); break; case 'state': $SQL .= EEH_Event_Query::_posts_join_for_event_venue($SQL); $SQL .= EEH_Event_Query::_posts_join_for_venue_state($SQL); break; case 'start_date': default: $SQL .= EEH_Event_Query::_posts_join_for_datetime($SQL, EEM_Event::instance()->table() . '.ID'); break; } } return $SQL; }