function _gathercontent_fetcher in GatherContent 7.3
Helper function for fetching data from GatherContent.
Parameters
int $gathercontent_id: ID of GatherContent piece of content.
string $uuid: UUID of \Drupal\gathercontent\Entity\Operation.
bool $drupal_status: Drupal status - published/unpublished.
null $status:
null|object $entity: Object of entity, if we are updating exiting content.
string|null $parent_menu_item: Parent menu item ID if we want to create menu item.
string $node_update_method: Name of the node update method.
Return value
int|FALSE Return nid if operation was successful.
2 calls to _gathercontent_fetcher()
- gathercontent_import_process in ./
gathercontent.import.inc - Batch operation callback.
- gathercontent_update_process in ./
gathercontent.module - Batch operation callback.
File
- ./
gathercontent.module, line 438
Code
function _gathercontent_fetcher($gathercontent_id, $uuid, $drupal_status, $status = NULL, $entity = NULL, $parent_menu_item = NULL, $node_update_method) {
global $user;
$content_obj = new Content();
$content = $content_obj
->getContent($gathercontent_id);
if (!empty($status)) {
$status_obj = new Project();
$status = $status_obj
->getStatus($content->project_id, $status);
}
$temp_obj = new Template();
$template = $temp_obj
->getTemplate($content->template_id);
$operation_item = entity_create('gathercontent_operation_item', array(
'operation_uuid' => $uuid,
'item_status' => !empty($status) ? $status->name : $content->status->data->name,
'item_status_color' => !empty($status) ? $status->color : $content->status->data->color,
'template_name' => $template->name,
'item_name' => $content->name,
'gathercontent_id' => $gathercontent_id,
));
// Check if mapping exists.
$query = new EntityFieldQuery();
if (is_null($entity)) {
$result = $query
->entityCondition('entity_type', 'gathercontent_mapping')
->propertyCondition('gathercontent_project_id', $content->project_id)
->propertyCondition('gathercontent_template_id', $content->template_id)
->execute();
}
else {
$result = $query
->entityCondition('entity_type', 'gathercontent_mapping')
->propertyCondition('id', $entity->gathercontent_mapping_id)
->execute();
}
if (isset($result['gathercontent_mapping'])) {
// If mapping exists, start mapping remote fields to local ones.
$mapping_ids = array_keys($result['gathercontent_mapping']);
$entities = entity_load('gathercontent_mapping', $mapping_ids);
$mapping = reset($entities);
$mapping_data = unserialize($mapping->data);
if (empty($mapping_data)) {
return FALSE;
}
$mapping_data_copy = $mapping_data;
$first = array_shift($mapping_data_copy);
$langcode = isset($first['language']) ? $first['language'] : LANGUAGE_NONE;
$node = gathercontent_get_destination_node($gathercontent_id, $node_update_method, $mapping->content_type);
$node->gathercontent_mapping_id
->set($mapping->id);
$node->gathercontent_id
->set($content->id);
if ($node->is_new
->value()) {
$node->author
->set($user->uid);
$node->status
->set($drupal_status);
}
$node->language
->set($langcode);
if ($node !== FALSE) {
$metatags = array();
$_title_is_mapped = FALSE;
try {
$content_obj = new Content();
$files = $content_obj
->getFiles($gathercontent_id);
foreach ($content->config as $pane) {
$is_translatable = module_exists('entity_translation') && entity_translation_node_supported_type($mapping->content_type) && isset($mapping_data[$pane->name]['language']) && $mapping_data[$pane->name]['language'] != LANGUAGE_NONE;
if ($is_translatable) {
$language = $mapping_data[$pane->name]['language'];
}
else {
$language = LANGUAGE_NONE;
}
foreach ($pane->elements as $field) {
if (isset($mapping_data[$pane->name]['elements'][$field->name]) && !empty($mapping_data[$pane->name]['elements'][$field->name])) {
$local_field_name = $mapping_data[$pane->name]['elements'][$field->name];
if (isset($mapping_data[$pane->name]['type']) && $mapping_data[$pane->name]['type'] === 'content' || !isset($mapping_data[$pane->name]['type'])) {
gathercontent_gathercontent_process_content_pane($node, $local_field_name, $field, $mapping->content_type, $is_translatable, $language, $files, $_title_is_mapped);
}
elseif (isset($mapping_data[$pane->name]['type']) && $mapping_data[$pane->name]['type'] === 'metatag') {
gathercontent_gathercontent_process_metatag_pane($node, $metatags, $gathercontent_id, $local_field_name, $field, $mapping->content_type, $is_translatable, $language);
}
}
else {
$operation_item->status = "Operation failed: Template fields mismatch.";
entity_save('gathercontent_operation_item', $operation_item);
}
}
// We need to create new translation if is translatable.
if ($is_translatable && (!isset($node->language) || empty($node->language))) {
$node->language
->set($language);
$node
->save();
}
elseif ($is_translatable && (isset($node->language) || !empty($node->language))) {
$handler = entity_translation_get_handler('node', $node
->value());
$translation = array(
'translate' => 0,
'status' => 1,
'language' => $language,
'source' => $language === $node->language
->value() ? '' : $node->language
->value(),
);
$handler
->setTranslation($translation, $node
->value());
}
}
if (!$is_translatable && !$_title_is_mapped) {
$node->title
->set($content->name);
}
drupal_alter('gathercontent_pre_node_save', $node, $content, $files);
$node
->save();
// Create menu link item.
if (module_exists('menu')) {
menu_node_prepare($node
->raw());
if (!(bool) $node
->raw()->menu['mlid']) {
if ($is_translatable) {
if (module_exists('locale')) {
$languages = locale_language_list();
$tsid = NULL;
foreach ($languages as $langcode => $language) {
if (module_exists('title') && title_field_replacement_enabled('node', $node
->get('type')
->value(), 'title')) {
if (language_default('language') === $langcode) {
gathercontent_create_menu_link($node->nid
->value(), $node->title
->value(), $parent_menu_item, $langcode, $tsid);
}
else {
$title_field = title_field_replacement_info('node', 'title')['field']['field_name'];
gathercontent_create_menu_link($node->nid
->value(), $node
->language($langcode)->{$title_field}
->value(), $parent_menu_item, $langcode, $tsid);
}
}
else {
gathercontent_create_menu_link($node->nid
->value(), $node
->language($langcode)->title
->value(), $parent_menu_item, $langcode, $tsid);
}
}
}
}
else {
gathercontent_create_menu_link($node->nid
->value(), $node->title
->value(), $parent_menu_item);
}
}
}
// Save metatags.
if (module_exists('metatag') && metatag_entity_supports_metatags('node', $mapping->content_type)) {
module_load_include('module', 'metatag');
metatag_metatags_save('node', $node->nid
->value(), $node->vid
->value(), $metatags);
}
module_invoke_all('gathercontent_post_node_save', $node, $content, $files);
$operation_item->status = "Success";
$operation_item->nid = $node->nid
->value();
entity_save('gathercontent_operation_item', $operation_item);
return $node->nid
->value();
} catch (\Exception $e) {
watchdog('gathercontent_import', print_r($e, TRUE), array(), WATCHDOG_ERROR);
$operation_item->status = "Operation failed:" . $e
->getMessage();
entity_save('gathercontent_operation_item', $operation_item);
return FALSE;
}
}
else {
$operation_item->status = "System error, please contact you administrator.";
entity_save('gathercontent_operation_item', $operation_item);
return FALSE;
}
}
else {
$operation_item->status = "Operation failed: Template not mapped.";
entity_save('gathercontent_operation_item', $operation_item);
return FALSE;
}
}