/**
  *		This function is a singleton method used to instantiate the EEM_Attendee object
  *
  *		@access public
  *		@return EEM_Extra_Meta instance
  */
 public static function instance()
 {
     // check if instance of EEM_Attendee already exists
     if (self::$_instance === NULL) {
         // instantiate Espresso_model
         self::$_instance = new self();
     }
     return self::$_instance;
 }
 /**
  * Deletes all the extra meta rows for this record as specified by key. If $meta_value
  * is specified, only deletes extra meta records with that value.
  * @param string $meta_key
  * @param string $meta_value
  * @return int number of extra meta rows deleted
  */
 public function delete_extra_meta($meta_key, $meta_value = NULL)
 {
     $query_params = array(array('EXM_key' => $meta_key, 'OBJ_ID' => $this->ID(), 'EXM_type' => $this->get_model()->get_this_model_name()));
     if ($meta_value !== NULL) {
         $query_params[0]['EXM_value'] = $meta_value;
     }
     $count_deleted = EEM_Extra_Meta::instance()->delete($query_params);
     return $count_deleted;
 }
 /**
  * This determines if there are any saved filters for the given Promotion ID and if needed will overload the
  * $_REQUEST global for those filter values for use elsewhere in the promotion ui.
  *
  * @since 1.0.0
  *
  * @param int $PRO_ID
  * @return bool true when there were saved filters, false when not.
  */
 protected function _maybe_overload_request_with_saved_filters($PRO_ID = 0)
 {
     //any saved filters (only on non-ajax requests)?
     if (!empty($PRO_ID) && !defined('DOING_AJAX')) {
         $set_filters = EEM_Extra_Meta::instance()->get_one(array(0 => array('OBJ_ID' => $PRO_ID, 'EXM_type' => 'Promotion', 'EXM_key' => 'promo_saved_filters')));
         $set_filters = $set_filters instanceof EE_Extra_Meta ? $set_filters->get('EXM_value') : array();
         //overload $_REQUEST global
         foreach ($set_filters as $filter_key => $filter_value) {
             if ($filter_value) {
                 $_REQUEST[$filter_key] = $filter_value;
             }
         }
         if (!empty($set_filters)) {
             return true;
         }
     }
     return false;
 }
 /**
  * @todo: if a foreign key can point to multiple models, only use mappings
  * that apply
  */
 public function test_save_data_array_to_db__from_other_site__fks_that_point_to_multiple_models()
 {
     //multiple types of fks that point ot multiple models: ones accompanied by a model name field and ones without
     //using model name field: extra metas
     //sans-model name field: term-relationships
     $extra_meta_id = 1;
     $extra_meta_id2 = 4;
     $imaginary_txn_or_reg_id = 2;
     $an_event_id = 3;
     $csv_data = array('Extra_Meta' => array(array('EXM_ID' => $extra_meta_id, 'OBJ_ID' => $imaginary_txn_or_reg_id, 'EXM_type' => 'Transaction', 'EXM_key' => 'foo', 'EXM_value' => 'bar'), array('EXM_ID' => $extra_meta_id2, 'OBJ_ID' => $imaginary_txn_or_reg_id, 'EXM_type' => 'Registration', 'EXM_key' => 'foo', 'EXM_value' => 'bar')), 'Term_Relationship' => array(array('object_id' => $an_event_id, 'term_taxonomy_id' => 0, 'term_order' => 1)));
     $mapped_txn_id = 4;
     $mapped_reg_id = 124;
     $mapped_event_id = 322;
     $mappings = array('Transaction' => array($imaginary_txn_or_reg_id => $mapped_txn_id), 'Registration' => array($imaginary_txn_or_reg_id => $mapped_reg_id), 'Event' => array($an_event_id => $mapped_event_id));
     //start test
     $new_mappings = EE_Import::instance()->save_data_rows_to_db($csv_data, true, $mappings);
     //ok, so we should have inserted 3 things,
     $this->assertEquals(2, count($new_mappings['Extra_Meta']));
     $this->assertEquals(1, count($new_mappings['Term_Relationship']));
     //check that they correctly used the mappings that previously existed
     $inserted_extra_meta_1_id = $new_mappings['Extra_Meta'][$extra_meta_id];
     $inserted_extra_meta_1 = EEM_Extra_Meta::instance()->get_one_by_ID($inserted_extra_meta_1_id);
     $this->assertEquals('Transaction', $inserted_extra_meta_1->get('EXM_type'));
     $this->assertEquals($mapped_txn_id, $inserted_extra_meta_1->get('OBJ_ID'));
     $inserted_extra_meta_2_id = $new_mappings['Extra_Meta'][$extra_meta_id2];
     $inserted_extra_meta_2 = EEM_Extra_Meta::instance()->get_one_by_ID($inserted_extra_meta_2_id);
     $this->assertEquals('Registration', $inserted_extra_meta_2->get('EXM_type'));
     $this->assertEquals($mapped_reg_id, $inserted_extra_meta_2->get('OBJ_ID'));
     $inserted_term_r_id = $new_mappings['Term_Relationship'][EEM_Term_Relationship::instance()->get_index_primary_key_string($csv_data['Term_Relationship'][0])];
     $term_r = EEM_Term_Relationship::instance()->get_one_by_ID($inserted_term_r_id);
     $this->assertInstanceOf('EE_Term_Relationship', $term_r);
     $this->assertEquals($mapped_event_id, $term_r->get('object_id'));
 }