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; }