public function receive($endpoint, $payload = array()) { if (!array_key_exists('associations', $payload) || !is_array($payload['associations'])) { throw new MalformedRequestException('There were no associations sent with the request.'); } $errors = 0; $success = 0; $unchanged = 0; foreach ($payload['associations'] as $menu_item) { $router_url = $menu_item['link_path']['router_url']; $entities = $menu_item['link_path']['entities']; $errored = false; foreach ($entities as $index => $entity) { try { $loaded_entity = HandlerBase::entityFromReferenceDefinition($entity); if (!$loaded_entity) { $errored = true; break; } $entities[$index] = $loaded_entity; } catch (InvalidReferenceDefinitionException $ex) { drupal_set_message(t('Error importing link @title, because "@reason."', array('@title' => $menu_item['link_title'], '@reason' => $ex->getMessage())), 'error'); $errored = true; break; } } if ($errored) { $errors++; continue; } $link_path = EntityPathHelper::pathFromEntities($router_url, $entities); if ($this->syncMenuItem($menu_item['menu_name'], $link_path, $menu_item['link_title'], $menu_item['hidden'], $menu_item['depth'], $menu_item['router_path'], $menu_item['uuid'])) { $success++; } else { $unchanged++; } } return array('counts' => array('errors' => $errors, 'success' => $success, 'unchanged' => $unchanged)); }
protected function unhandleSingleValue($entity_type, $field_type, $field_name, &$value) { if (!is_array($value)) { return; } if (!array_key_exists('references', $value)) { return; } if (!array_key_exists('contents', $value)) { return; } $find = array(); $replace = array(); foreach ($value['references'] as $original_url => $reference) { if (is_array($reference)) { $entities = array(); foreach ($reference['entities'] as $entity) { $loaded_entity = self::entityFromReferenceDefinition($entity); if ($loaded_entity) { $entities[] = $loaded_entity; } } $resulting_url = EntityPathHelper::pathFromEntities($reference['router_url'], $entities); // If we have an alias, try and go back. if ($reference['alias'] === true) { $attempt_at_alias = drupal_get_path_alias($resulting_url); if ($attempt_at_alias) { $resulting_url = $attempt_at_alias; } } $find[] = trim($original_url, '/'); $replace[] = trim($resulting_url, '/'); } } $this->postUnhandleResults($value, $find, $replace, 'references'); }