Example #1
0
 /**
  * Caches menu items for a given entity and returns an array of the menu items
  *
  * @param \StaticPage $root_entity Root entity to fetch the menu items for
  *
  * @return array|false
  */
 public static function generateMenuItemsCache(\StaticPage $root_entity)
 {
     if (!$root_entity instanceof \StaticPage) {
         return false;
     }
     $static_items = [];
     $priority = (int) $root_entity->order;
     if (empty($priority)) {
         $priority = (int) $root_entity->time_created;
     }
     $root_menu_options = ['name' => $root_entity->getGUID(), 'rel' => $root_entity->getGUID(), 'href' => $root_entity->getURL(), 'text' => elgg_format_element('span', [], $root_entity->title), 'priority' => $priority, 'section' => 'static'];
     if ($root_entity->canEdit()) {
         $root_menu_options['itemClass'] = ['static-sortable'];
     }
     // add main menu items
     $static_items[$root_entity->getGUID()] = \ElggMenuItem::factory($root_menu_options);
     // add all sub menu items so they are cacheable
     $ia = elgg_set_ignore_access(true);
     $submenu_entities = elgg_get_entities_from_relationship(['type' => 'object', 'subtype' => \StaticPage::SUBTYPE, 'relationship_guid' => $root_entity->getGUID(), 'relationship' => 'subpage_of', 'limit' => false, 'inverse_relationship' => true]);
     if ($submenu_entities) {
         foreach ($submenu_entities as $submenu_item) {
             if (!has_access_to_entity($submenu_item) && !$submenu_item->canEdit()) {
                 continue;
             }
             $priority = (int) $submenu_item->order;
             if (empty($priority)) {
                 $priority = (int) $submenu_item->time_created;
             }
             $static_items[$submenu_item->getGUID()] = \ElggMenuItem::factory(['name' => $submenu_item->getGUID(), 'rel' => $submenu_item->getGUID(), 'href' => $submenu_item->getURL(), 'text' => elgg_format_element('span', [], $submenu_item->title), 'priority' => $priority, 'parent_name' => $submenu_item->getContainerGUID(), 'section' => 'static']);
         }
     }
     elgg_set_ignore_access($ia);
     $file = new \ElggFile();
     $file->owner_guid = $root_entity->getGUID();
     $file->setFilename('static_menu_item_cache');
     $file->open('write');
     $file->write(serialize($static_items));
     $file->close();
     return $static_items;
 }