コード例 #1
0
ファイル: class.htmlpage.php プロジェクト: brendo/symphony-3
 public function addElementToHead($obj, $position = NULL)
 {
     if ($position && isset($this->_head[$position])) {
         $position = General::array_find_available_index($this->_head, $position);
     } elseif (!$position) {
         $position = max(0, count($this->_head));
     }
     $this->_head[$position] = $obj;
     return $position;
 }
コード例 #2
0
 /**
  * This function populates the `$_navigation` array with an associative array
  * of all the navigation groups and their links. Symphony only supports one
  * level of navigation, so children links cannot have children links. The default
  * Symphony navigation is found in the `ASSETS/navigation.xml` folder. This is
  * loaded first, and then the Section navigation is built, followed by the Extension
  * navigation. Additionally, this function will set the active group of the navigation
  * by checking the current page against the array of links.
  *
  * @link http://github.com/symphonycms/symphony-2/blob/master/symphony/assets/navigation.xml
  */
 public function __buildNavigation()
 {
     $nav = array();
     $xml = simplexml_load_file(ASSETS . '/navigation.xml');
     // Loop over the default Symphony navigation file, converting
     // it into an associative array representation
     foreach ($xml->xpath('/navigation/group') as $n) {
         $index = (string) $n->attributes()->index;
         $children = $n->xpath('children/item');
         $content = $n->attributes();
         // If the index is already set, increment the index and check again.
         // Rinse and repeat until the index is not set.
         if (isset($nav[$index])) {
             do {
                 $index++;
             } while (isset($nav[$index]));
         }
         $nav[$index] = array('name' => __(strval($content->name)), 'index' => $index, 'children' => array());
         if (strlen(trim((string) $content->limit)) > 0) {
             $nav[$index]['limit'] = (string) $content->limit;
         }
         if (count($children) > 0) {
             foreach ($children as $child) {
                 $item = array('link' => (string) $child->attributes()->link, 'name' => __(strval($child->attributes()->name)), 'visible' => (string) $child->attributes()->visible == 'no' ? 'no' : 'yes');
                 $limit = (string) $child->attributes()->limit;
                 if (strlen(trim($limit)) > 0) {
                     $item['limit'] = $limit;
                 }
                 $nav[$index]['children'][] = $item;
             }
         }
     }
     // Build the section navigation, grouped by their navigation groups
     $sections = Symphony::Database()->fetch("SELECT * FROM `tbl_sections` ORDER BY `sortorder` ASC");
     if (is_array($sections) && !empty($sections)) {
         foreach ($sections as $s) {
             $group_index = self::__navigationFindGroupIndex($nav, $s['navigation_group']);
             if ($group_index === false) {
                 $group_index = General::array_find_available_index($nav, 0);
                 $nav[$group_index] = array('name' => $s['navigation_group'], 'index' => $group_index, 'children' => array());
             }
             $nav[$group_index]['children'][] = array('link' => '/publish/' . $s['handle'] . '/', 'name' => $s['name'], 'type' => 'section', 'section' => array('id' => $s['id'], 'handle' => $s['handle']), 'visible' => $s['hidden'] == 'no' ? 'yes' : 'no');
         }
     }
     // Loop over all the installed extensions to add in other navigation items
     $extensions = Symphony::ExtensionManager()->listInstalledHandles();
     foreach ($extensions as $e) {
         $info = Symphony::ExtensionManager()->about($e);
         if (isset($info['navigation']) && is_array($info['navigation']) && !empty($info['navigation'])) {
             foreach ($info['navigation'] as $item) {
                 $type = isset($item['children']) ? Extension::NAV_GROUP : Extension::NAV_CHILD;
                 switch ($type) {
                     case Extension::NAV_GROUP:
                         $index = General::array_find_available_index($nav, $item['location']);
                         $nav[$index] = array('name' => $item['name'], 'index' => $index, 'children' => array(), 'limit' => !is_null($item['limit']) ? $item['limit'] : null);
                         foreach ($item['children'] as $child) {
                             if (!isset($child['relative']) || $child['relative'] == true) {
                                 $link = '/extension/' . $e . '/' . ltrim($child['link'], '/');
                             } else {
                                 $link = '/' . ltrim($child['link'], '/');
                             }
                             $nav[$index]['children'][] = array('link' => $link, 'name' => $child['name'], 'visible' => $child['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($child['limit']) ? $child['limit'] : null);
                         }
                         break;
                     case Extension::NAV_CHILD:
                         if (!isset($item['relative']) || $item['relative'] == true) {
                             $link = '/extension/' . $e . '/' . ltrim($item['link'], '/');
                         } else {
                             $link = '/' . ltrim($item['link'], '/');
                         }
                         if (!is_numeric($item['location'])) {
                             // is a navigation group
                             $group_name = $item['location'];
                             $group_index = self::__navigationFindGroupIndex($nav, $item['location']);
                         } else {
                             // is a legacy numeric index
                             $group_index = $item['location'];
                         }
                         $child = array('link' => $link, 'name' => $item['name'], 'visible' => $item['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($item['limit']) ? $item['limit'] : null);
                         if ($group_index === false) {
                             $group_index = General::array_find_available_index($nav, 0);
                             // add new navigation group
                             $nav[$group_index] = array('name' => $group_name, 'index' => $group_index, 'children' => array($child), 'limit' => !is_null($item['limit']) ? $item['limit'] : null);
                         } else {
                             // add new location by index
                             $nav[$group_index]['children'][] = $child;
                         }
                         break;
                 }
             }
         }
     }
     /**
      * After building the Navigation properties array. This is specifically
      * for extensions to add their groups to the navigation or items to groups,
      * already in the navigation. Note: THIS IS FOR ADDING ONLY! If you need
      * to edit existing navigation elements, use the `NavigationPreRender` delegate.
      *
      * @deprecated This delegate is deprecated and will be removed in the next
      *  major release of Symphony. Extensions are encouraged to use provide the
      *  `fetchNavigation` method instead.
      * @delegate ExtensionsAddToNavigation
      * @param string $context
      * '/backend/'
      * @param array $navigation
      */
     Symphony::ExtensionManager()->notifyMembers('ExtensionsAddToNavigation', '/backend/', array('navigation' => &$nav));
     $pageCallback = Administration::instance()->getPageCallback();
     $pageRoot = $pageCallback['pageroot'] . (isset($pageCallback['context'][0]) ? $pageCallback['context'][0] . '/' : '');
     $found = self::__findActiveNavigationGroup($nav, $pageRoot);
     // Normal searches failed. Use a regular expression using the page root. This is less
     // efficient and should never really get invoked unless something weird is going on
     if (!$found) {
         self::__findActiveNavigationGroup($nav, '/^' . str_replace('/', '\\/', $pageCallback['pageroot']) . '/i', true);
     }
     ksort($nav);
     $this->_navigation = $nav;
 }
コード例 #3
0
 /**
  * Adds an XMLElement to the `$this->_head` array at a desired position.
  * If no position is given, the object will be added to the end
  * of the `$this->_head` array. If that position is already taken, it will
  * add the object at the next available position.
  *
  * @see toolkit.General#array_find_available_index()
  * @param XMLElement $object
  * @param integer $position
  *  Defaults to null which will put the `$object` at the end of the
  *  `$this->_head`.
  * @param boolean $allowDuplicate
  *  If set to false, make this function check if there is already an XMLElement that as the same name in the head.
  *  Defaults to true. @since Symphony 2.3.2
  * @return integer
  *  Returns the position that the `$object` has been set in the `$this->_head`
  */
 public function addElementToHead(XMLElement $object, $position = null, $allowDuplicate = true)
 {
     // find the right position
     if ($position && isset($this->_head[$position])) {
         $position = General::array_find_available_index($this->_head, $position);
     } elseif (is_null($position)) {
         if (count($this->_head) > 0) {
             $position = max(array_keys($this->_head)) + 1;
         } else {
             $position = 0;
         }
     }
     // check if we allow duplicate
     if (!$allowDuplicate && !empty($this->_head)) {
         $this->removeFromHead($object->getName());
     }
     // append new element
     $this->_head[$position] = $object;
     return $position;
 }
コード例 #4
0
 function __buildNavigation()
 {
     $nav = array();
     $xml = simplexml_load_file(ASSETS . '/navigation.xml');
     foreach ($xml->xpath('/navigation/group') as $n) {
         $index = (string) $n->attributes()->index;
         $children = $n->xpath('children/item');
         $content = $n->attributes();
         if (isset($nav[$index])) {
             do {
                 $index++;
             } while (isset($nav[$index]));
         }
         $nav[$index] = array('name' => __(strval($content->name)), 'index' => $index, 'children' => array());
         if (strlen(trim((string) $content->limit)) > 0) {
             $nav[$index]['limit'] = (string) $content->limit;
         }
         if (count($children) > 0) {
             foreach ($children as $child) {
                 $limit = (string) $child->attributes()->limit;
                 $item = array('link' => (string) $child->attributes()->link, 'name' => __(strval($child->attributes()->name)), 'visible' => (string) $child->attributes()->visible == 'no' ? 'no' : 'yes');
                 if (strlen(trim($limit)) > 0) {
                     $item['limit'] = $limit;
                 }
                 $nav[$index]['children'][] = $item;
             }
         }
     }
     $sections = Symphony::Database()->fetch("SELECT * FROM `tbl_sections` ORDER BY `sortorder` ASC");
     if (is_array($sections) && !empty($sections)) {
         foreach ($sections as $s) {
             $group_index = self::__navigationFindGroupIndex($nav, $s['navigation_group']);
             if ($group_index === false) {
                 $group_index = General::array_find_available_index($nav, 0);
                 $nav[$group_index] = array('name' => $s['navigation_group'], 'index' => $group_index, 'children' => array(), 'limit' => NULL);
             }
             $nav[$group_index]['children'][] = array('link' => '/publish/' . $s['handle'] . '/', 'name' => $s['name'], 'type' => 'section', 'section' => array('id' => $s['id'], 'handle' => $s['handle']), 'visible' => $s['hidden'] == 'no' ? 'yes' : 'no');
         }
     }
     $extensions = Administration::instance()->ExtensionManager->listInstalledHandles();
     foreach ($extensions as $e) {
         $info = Administration::instance()->ExtensionManager->about($e);
         if (isset($info['navigation']) && is_array($info['navigation']) && !empty($info['navigation'])) {
             foreach ($info['navigation'] as $item) {
                 $type = isset($item['children']) ? Extension::NAV_GROUP : Extension::NAV_CHILD;
                 switch ($type) {
                     case Extension::NAV_GROUP:
                         $index = General::array_find_available_index($nav, $item['location']);
                         $nav[$index] = array('name' => $item['name'], 'index' => $index, 'children' => array(), 'limit' => !is_null($item['limit']) ? $item['limit'] : NULL);
                         foreach ($item['children'] as $child) {
                             if (!isset($child['relative']) || $child['relative'] == true) {
                                 $link = '/extension/' . $e . '/' . ltrim($child['link'], '/');
                             } else {
                                 $link = '/' . ltrim($child['link'], '/');
                             }
                             $nav[$index]['children'][] = array('link' => $link, 'name' => $child['name'], 'visible' => $child['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($child['limit']) ? $child['limit'] : NULL);
                         }
                         break;
                     case Extension::NAV_CHILD:
                         if (!isset($item['relative']) || $item['relative'] == true) {
                             $link = '/extension/' . $e . '/' . ltrim($item['link'], '/');
                         } else {
                             $link = '/' . ltrim($item['link'], '/');
                         }
                         if (!is_numeric($item['location'])) {
                             // is a navigation group
                             $group_name = $item['location'];
                             $group_index = $this->__findLocationIndexFromName($nav, $item['location']);
                         } else {
                             // is a legacy numeric index
                             $group_index = $item['location'];
                         }
                         $child = array('link' => $link, 'name' => $item['name'], 'visible' => $item['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($item['limit']) ? $item['limit'] : NULL);
                         if ($group_index === false) {
                             // add new navigation group
                             $nav[] = array('name' => $group_name, 'index' => $group_index, 'children' => array($child), 'limit' => !is_null($item['limit']) ? $item['limit'] : NULL);
                         } else {
                             // add new location by index
                             $nav[$group_index]['children'][] = $child;
                         }
                         break;
                 }
             }
         }
     }
     ####
     # Delegate: ExtensionsAddToNavigation
     # Description: After building the Navigation properties array. This is specifically
     # 			for extentions to add their groups to the navigation or items to groups,
     # 			already in the navigation. Note: THIS IS FOR ADDING ONLY! If you need
     #			to edit existing navigation elements, use the 'NavigationPreRender' delegate.
     # Global: Yes
     Administration::instance()->ExtensionManager->notifyMembers('ExtensionsAddToNavigation', '/backend/', array('navigation' => &$nav));
     $pageCallback = Administration::instance()->getPageCallback();
     $pageRoot = $pageCallback['pageroot'] . (isset($pageCallback['context'][0]) ? $pageCallback['context'][0] . '/' : '');
     $found = $this->__findActiveNavigationGroup($nav, $pageRoot);
     ## Normal searches failed. Use a regular expression using the page root. This is less
     ## efficent and should never really get invoked unless something weird is going on
     if (!$found) {
         $this->__findActiveNavigationGroup($nav, '/^' . str_replace('/', '\\/', $pageCallback['pageroot']) . '/i', true);
     }
     ksort($nav);
     $this->_navigation = $nav;
 }
コード例 #5
0
 /**
  * Adds an XMLElement to the `$this->_head` array at a desired position.
  * If no position is given, the object will be added to the end
  * of the `$this->_head` array. If that position is already taken, it will
  * add the object at the next available position.
  *
  * @see toolkit.General#array_find_available_index()
  * @param XMLElement $object
  * @param integer $position
  *  Defaults to null which will put the `$object` at the end of the
  *  `$this->_head`.
  * @return integer
  *  Returns the position that the `$object` has been set in the `$this->_head`
  */
 public function addElementToHead(XMLElement $object, $position = null)
 {
     if ($position && isset($this->_head[$position])) {
         $position = General::array_find_available_index($this->_head, $position);
     } else {
         if (is_null($position)) {
             if (count($this->_head) > 0) {
                 $position = max(array_keys($this->_head)) + 1;
             } else {
                 $position = 0;
             }
         }
     }
     $this->_head[$position] = $object;
     return $position;
 }
コード例 #6
0
 function __buildNavigation()
 {
     $nav = array();
     $xml = new XmlDoc();
     if (!$xml->parseFile(ASSETS . '/navigation.xml')) {
         $this->_Parent->customError(E_USER_ERROR, __('Failed to load Navigation'), __('There was a problem loading the Symphony navigation XML document.'));
     }
     $nodes = $xml->getArray();
     $sections_index = 0;
     $extension_index = 0;
     foreach ($nodes['navigation'] as $n) {
         $content = $n['group']['attributes'];
         $children = $n['group'][0]['children'];
         $index = $n['group']['attributes']['index'];
         if ($n['group']['attributes']['sections'] == 'true') {
             $sections_index = $index;
         }
         if (isset($nav[$index])) {
             do {
                 $index++;
             } while (isset($nav[$index]));
         }
         if (!empty($content)) {
             $nav[$index] = $content;
         }
         if (@is_array($children)) {
             foreach ($children as $n) {
                 if (!empty($n['item']['attributes'])) {
                     $nav[$index]['children'][] = $n['item']['attributes'];
                 }
             }
         }
     }
     $sections = $this->_Parent->Database->fetch("SELECT * FROM `tbl_sections` ORDER BY `sortorder` ASC");
     if (is_array($sections) && !empty($sections)) {
         foreach ($sections as $s) {
             //$visible = ($this->_Parent->Author->isDeveloper() || (!$this->_Parent->Author->isDeveloper() && in_array($s['id'], $this->_Parent->Author->getAuthorAllowableSections())));
             $nav[$sections_index]['children'][] = array('link' => '/publish/' . $s['handle'] . '/', 'name' => $s['name'], 'type' => 'section', 'section' => array('id' => $s['id'], 'handle' => $s['handle']), 'visible' => $s['hidden'] == 'no' ? 'yes' : 'no');
         }
     }
     $extensions = $this->_Parent->ExtensionManager->listInstalledHandles();
     foreach ($extensions as $e) {
         $info = $this->_Parent->ExtensionManager->about($e);
         if (isset($info['navigation']) && is_array($info['navigation']) && !empty($info['navigation'])) {
             foreach ($info['navigation'] as $item) {
                 $type = isset($item['children']) ? Extension::NAV_GROUP : Extension::NAV_CHILD;
                 switch ($type) {
                     case Extension::NAV_GROUP:
                         $index = General::array_find_available_index($nav, $item['location']);
                         $nav[$index] = array('name' => $item['name'], 'index' => $index, 'children' => array(), 'limit' => !is_null($item['limit']) ? $item['limit'] : NULL);
                         foreach ($item['children'] as $child) {
                             if (!isset($child['relative']) || $child['relative'] == true) {
                                 $link = '/extension/' . $e . '/' . ltrim($child['link'], '/');
                             } else {
                                 $link = '/' . ltrim($child['link'], '/');
                             }
                             $nav[$index]['children'][] = array('link' => $link, 'name' => $child['name'], 'visible' => $child['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($child['limit']) ? $child['limit'] : NULL);
                         }
                         break;
                     case Extension::NAV_CHILD:
                         if (!isset($item['relative']) || $item['relative'] == true) {
                             $link = '/extension/' . $e . '/' . ltrim($item['link'], '/');
                         } else {
                             $link = '/' . ltrim($item['link'], '/');
                         }
                         $nav[$item['location']]['children'][] = array('link' => $link, 'name' => $item['name'], 'visible' => $item['visible'] == 'no' ? 'no' : 'yes', 'limit' => !is_null($item['limit']) ? $item['limit'] : NULL);
                         break;
                 }
             }
         }
     }
     ####
     # Delegate: ExtensionsAddToNavigation
     # Description: After building the Navigation properties array. This is specifically for extentions to add their groups to the navigation or items to groups,
     #			   already in the navigation. Note: THIS IS FOR ADDING ONLY! If you need to edit existing navigation elements, use the 'NavigationPreRender' delegate.
     # Global: Yes
     $this->_Parent->ExtensionManager->notifyMembers('ExtensionsAddToNavigation', '/administration/', array('navigation' => &$nav));
     $pageCallback = $this->_Parent->getPageCallback();
     $pageRoot = $pageCallback['pageroot'] . (isset($pageCallback['context'][0]) ? $pageCallback['context'][0] . '/' : '');
     $found = $this->__findActiveNavigationGroup($nav, $pageRoot);
     ## Normal searches failed. Use a regular expression using the page root. This is less efficent and should never really get invoked
     ## unless something weird is going on
     if (!$found) {
         $this->__findActiveNavigationGroup($nav, '/^' . str_replace('/', '\\/', $pageCallback['pageroot']) . '/i', true);
     }
     ksort($nav);
     $this->_navigation = $nav;
 }
コード例 #7
0
 /**
  * This method fills the `$nav` array with value
  * from each Extension's `fetchNavigation` method
  *
  * @since Symphony 2.3.2
  *
  * @param array $nav
  *  The navigation array that will receive nav nodes
  * @throws Exception
  * @throws SymphonyErrorPage
  */
 private function buildExtensionsNavigation(&$nav)
 {
     // Loop over all the installed extensions to add in other navigation items
     $extensions = Symphony::ExtensionManager()->listInstalledHandles();
     foreach ($extensions as $e) {
         $extension = Symphony::ExtensionManager()->getInstance($e);
         $extension_navigation = $extension->fetchNavigation();
         if (is_array($extension_navigation) && !empty($extension_navigation)) {
             foreach ($extension_navigation as $item) {
                 $type = isset($item['children']) ? Extension::NAV_GROUP : Extension::NAV_CHILD;
                 switch ($type) {
                     case Extension::NAV_GROUP:
                         $index = General::array_find_available_index($nav, $item['location']);
                         // Actual group
                         $nav[$index] = self::createParentNavItem($index, $item);
                         // Render its children
                         foreach ($item['children'] as $child) {
                             $nav[$index]['children'][] = self::createChildNavItem($child, $e);
                         }
                         break;
                     case Extension::NAV_CHILD:
                         if (!is_numeric($item['location'])) {
                             // is a navigation group
                             $group_name = $item['location'];
                             $group_index = self::__navigationFindGroupIndex($nav, $item['location']);
                         } else {
                             // is a legacy numeric index
                             $group_index = $item['location'];
                         }
                         $child = self::createChildNavItem($item, $e);
                         if ($group_index === false) {
                             $group_index = General::array_find_available_index($nav, 0);
                             $nav_parent = self::createParentNavItem($group_index, $item);
                             $nav_parent['name'] = $group_name;
                             $nav_parent['children'] = array($child);
                             // add new navigation group
                             $nav[$group_index] = $nav_parent;
                         } else {
                             // add new location by index
                             $nav[$group_index]['children'][] = $child;
                         }
                         break;
                 }
             }
         }
     }
 }
コード例 #8
0
 /**
  * This method fills the `$nav` array with value
  * from each Extension's `fetchNavigation` method
  *
  * @since Symphony 2.3.2
  *
  * @param array $nav
  *  The navigation array that will receive nav nodes
  */
 private function buildExtensionsNavigation(&$nav)
 {
     // Loop over all the installed extensions to add in other navigation items
     $extensions = Symphony::ExtensionManager()->listInstalledHandles();
     foreach ($extensions as $e) {
         $extension = Symphony::ExtensionManager()->getInstance($e);
         $extension_navigation = $extension->fetchNavigation();
         if (is_array($extension_navigation) && !empty($extension_navigation)) {
             foreach ($extension_navigation as $item) {
                 $type = isset($item['children']) ? Extension::NAV_GROUP : Extension::NAV_CHILD;
                 switch ($type) {
                     case Extension::NAV_GROUP:
                         $index = General::array_find_available_index($nav, $item['location']);
                         // Actual group
                         $nav[$index] = array('name' => $item['name'], 'type' => isset($item['type']) ? $item['type'] : 'structure', 'index' => $index, 'children' => array(), 'limit' => isset($item['limit']) ? $item['limit'] : null);
                         // Render its children
                         foreach ($item['children'] as $child) {
                             if (!isset($child['relative']) || $child['relative'] == true) {
                                 $link = '/extension/' . $e . '/' . ltrim($child['link'], '/');
                             } else {
                                 $link = '/' . ltrim($child['link'], '/');
                             }
                             $nav[$index]['children'][] = array('link' => $link, 'name' => $child['name'], 'visible' => isset($child['visible']) && $child['visible'] == 'no' ? 'no' : 'yes', 'limit' => isset($child['limit']) ? $child['limit'] : null, 'target' => isset($child['target']) ? $child['target'] : null);
                         }
                         break;
                     case Extension::NAV_CHILD:
                         if (!isset($item['relative']) || $item['relative'] == true) {
                             $link = '/extension/' . $e . '/' . ltrim($item['link'], '/');
                         } else {
                             $link = '/' . ltrim($item['link'], '/');
                         }
                         if (!is_numeric($item['location'])) {
                             // is a navigation group
                             $group_name = $item['location'];
                             $group_index = self::__navigationFindGroupIndex($nav, $item['location']);
                         } else {
                             // is a legacy numeric index
                             $group_index = $item['location'];
                         }
                         $child = array('link' => $link, 'name' => $item['name'], 'visible' => isset($item['visible']) && $item['visible'] == 'no' ? 'no' : 'yes', 'limit' => isset($item['limit']) ? $item['limit'] : null, 'target' => isset($item['target']) ? $item['target'] : null);
                         if ($group_index === false) {
                             $group_index = General::array_find_available_index($nav, 0);
                             // add new navigation group
                             $nav[$group_index] = array('name' => $group_name, 'index' => $group_index, 'children' => array($child), 'limit' => isset($item['limit']) ? $item['limit'] : null);
                         } else {
                             // add new location by index
                             $nav[$group_index]['children'][] = $child;
                         }
                         break;
                 }
             }
         }
     }
 }