public function insert_agents($row, $parameters) { self::debug_iterations("Inserting agent"); if ($this->archive_validator->has_error_by_line('http://eol.org/schema/agent/agent', $parameters['archive_table_definition']->location, $parameters['archive_line_number'])) { write_to_resource_harvesting_log("ERROR: insert_agents: has_error_by_line" . ",file_location:" . $parameters['archive_table_definition']->location . ",line_number:" . $parameters['archive_line_number']); return false; } $agent_id = @self::field_decode($row['http://purl.org/dc/terms/identifier']); // we really only need to insert the agents that relate to media if (!isset($this->media_agent_ids[$agent_id])) { return; } $params = array("full_name" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_name']), "given_name" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_firstName']), "family_name" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_familyName']), "email" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_mbox']), "homepage" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_homepage']), "logo_url" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_logo']), "project" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_currentProject']), "organization" => @self::field_decode($row['http://eol.org/schema/agent/organization']), "account_name" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_accountName']), "openid" => @self::field_decode($row['http://xmlns.com/foaf/spec/#term_openid'])); // find or create this agent $agent = Agent::find_or_create($params); if (!$agent) { return; } // download the logo if there is one, and it hasn't ever been downloaded before if ($agent->logo_url && !$agent->logo_cache_url) { if ($logo_cache_url = $this->content_manager->grab_file($agent->logo_url, "partner")) { $agent->logo_cache_url = $logo_cache_url; $agent->save(); } } $agent_role = AgentRole::find_or_create_by_translated_label(@self::field_decode($row['http://eol.org/schema/agent/agentRole'])); $agent_role_id = @$agent_role->id ?: 0; foreach ($this->media_agent_ids[$agent_id] as $data_object_id => $val) { # TODO: intelligently delete agents for objects ONLY ONCE during an import # TODO: figure out view order $this->mysqli->insert("INSERT IGNORE INTO agents_data_objects VALUES ({$data_object_id}, {$agent->id}, {$agent_role_id}, 0)"); } }
static function add_translated_data_object($options, $resource) { $d = $options[0]; $parameters = $options[1]; if ($d->EOLDataObjectID) { if ($existing_data_object = DataObject::find($d->EOLDataObjectID)) { $new_data_object = clone $existing_data_object; $new_data_object->id = NULL; $new_data_object->identifier = $d->identifier; $new_data_object->object_created_at = $d->object_created_at; $new_data_object->object_modified_at = $d->object_modified_at; $new_data_object->object_title = $d->object_title; $new_data_object->language = $d->language; $new_data_object->rights_statement = $d->rights_statement; $new_data_object->rights_holder = $d->rights_holder; $new_data_object->description = $d->description; $new_data_object->description_linked = null; $new_data_object->location = $d->location; // check to see if this translation exists by looking in data_object_translations // if its found, check to see if its different // otherwise add it, then add all associations (agents, references, hierarchy_entries) // then add new agents $content_manager = new ContentManager(); list($data_object, $status) = DataObject::find_and_compare($resource, $new_data_object, $content_manager); if (@(!$data_object->id)) { return false; } self::add_entries_for_translated_object($existing_data_object, $data_object, $resource); $resource->harvest_event->add_data_object($data_object, $status); if ($status != "Reused") { $i = 0; $data_object->delete_agents(); foreach ($parameters['agents'] as &$a) { $agent = Agent::find_or_create($a); if ($agent->logo_url && !$agent->logo_cache_url) { if ($logo_cache_url = $this->content_manager->grab_file($agent->logo_url, "partner")) { $agent->logo_cache_url = $logo_cache_url; $agent->save(); } } $data_object->add_agent($agent->id, @$a['agent_role']->id ?: 0, $i); unset($a); $i++; } $data_object->delete_translations(); $data_object->add_translation($existing_data_object->id, $data_object->language_id); $data_object->delete_info_items(); foreach ($existing_data_object->info_items as $ii) { $data_object->add_info_item($ii->id); } // audience // info items // table of contents // all related tables.... } } else { echo "DataObject {$d->EOLDataObjectID} doesn't exist\n"; } } else { return false; } }