示例#1
0
 public static function getPages()
 {
     if (self::$pages) {
         return self::$pages;
     }
     $cachefile = GSDATAOTHERPATH . I18N_CACHE_FILE;
     if (!I18N_USE_CACHE || !file_exists($cachefile)) {
         // read pages into associative array
         self::$pages = array();
         $dir_handle = @opendir(GSDATAPAGESPATH) or die("Unable to open pages directory");
         while ($filename = readdir($dir_handle)) {
             if (strrpos($filename, '.xml') === strlen($filename) - 4 && !is_dir(GSDATAPAGESPATH . $filename)) {
                 $data = getXML(GSDATAPAGESPATH . $filename);
                 if (strpos($filename, '_') !== false) {
                     $pos = strpos($data->url, '_');
                     $url = substr($data->url, 0, $pos);
                     $lang = substr($data->url, $pos + 1);
                     if (!isset(self::$pages[$url])) {
                         self::$pages[$url] = array('url' => $url);
                     }
                     $menu = (string) $data->menu ? (string) $data->menu : (string) $data->title;
                     $title = (string) $data->title ? (string) $data->title : (string) $data->menu;
                     if ($menu) {
                         self::$pages[$url]['menu_' . $lang] = stripslashes($menu);
                     }
                     if ($title) {
                         self::$pages[$url]['title_' . $lang] = stripslashes($title);
                     }
                     if (isset($data->link) && (string) $data->link) {
                         self::$pages[$url]['link_' . $lang] = (string) $data->link;
                     }
                 } else {
                     $url = (string) $data->url;
                     if (!isset(self::$pages[$url])) {
                         self::$pages[$url] = array('url' => $url);
                     }
                     self::$pages[$url]['menuStatus'] = (string) $data->menuStatus;
                     self::$pages[$url]['menuOrder'] = (int) $data->menuOrder;
                     self::$pages[$url]['menu'] = stripslashes($data->menu);
                     self::$pages[$url]['title'] = stripslashes($data->title);
                     self::$pages[$url]['parent'] = (string) $data->parent;
                     self::$pages[$url]['private'] = (string) $data->private;
                     self::$pages[$url]['tags'] = (string) stripslashes($data->meta);
                     if (isset($data->link) && (string) $data->link) {
                         self::$pages[$url]['link'] = (string) $data->link;
                     }
                 }
             }
         }
         // sort pages
         $urlsToDelete = array();
         $sortedpages = array();
         foreach (self::$pages as $url => $page) {
             if (isset($page['parent']) && $page['private'] != 'Y') {
                 $sortedpages[] = array('url' => $url, 'parent' => $page['parent'], 'sort' => sprintf("%s%03s%s", $page['parent'], $page['menuOrder'], $url));
             } else {
                 $urlsToDelete[] = $url;
             }
         }
         $sortedpages = subval_sort($sortedpages, 'sort');
         if (count($urlsToDelete) > 0) {
             foreach ($urlsToDelete as $url) {
                 unset(self::$pages[$url]);
             }
         }
         // save cache file
         if (I18N_USE_CACHE) {
             $data = @new SimpleXMLExtended('<?xml version="1.0" encoding="UTF-8"?><pages></pages>');
             foreach ($sortedpages as $sortedpage) {
                 $url = $sortedpage['url'];
                 $page = self::$pages[$url];
                 $pagedata = $data->addChild('page');
                 foreach ($page as $key => $value) {
                     $propdata = $pagedata->addChild($key);
                     $propdata->addCData($value);
                 }
             }
             XMLsave($data, $cachefile);
         }
     } else {
         $sortedpages = array();
         $data = getXML($cachefile);
         foreach ($data->page as $pagedata) {
             $url = '' . $pagedata->url;
             self::$pages[$url] = array();
             foreach ($pagedata as $propdata) {
                 self::$pages[$url][$propdata->getName()] = (string) $propdata;
             }
             $sortedpages[] = array('url' => $url, 'parent' => self::$pages[$url]['parent']);
         }
     }
     // fill children
     self::$pages[null] = array();
     foreach ($sortedpages as $sortedpage) {
         $parent = $sortedpage['parent'];
         if (isset(self::$pages[$parent])) {
             if (!isset(self::$pages[$parent]['children'])) {
                 self::$pages[$parent]['children'] = array();
             }
             self::$pages[$parent]['children'][] = $sortedpage['url'];
         }
     }
     return self::$pages;
 }