Ejemplo n.º 1
0
 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');
 }