Example #1
0
 private static function load_page_files()
 {
     if (count(self::$content_pages)) {
         return self::$content_pages;
     }
     $has_apc = extension_loaded('apc') && ini_get('apc.enabled');
     $slugs_cache = $has_apc && !self::is_fw4() ? apc_fetch($_SERVER['HTTP_HOST'] . '_slugs_' . language()) : false;
     $slugs_reverse_cache = $has_apc && !self::is_fw4() ? apc_fetch($_SERVER['HTTP_HOST'] . '_slugs_reverse_' . language()) : false;
     $titles_cache = $has_apc && !self::is_fw4() ? apc_fetch($_SERVER['HTTP_HOST'] . '_titles') : false;
     if ($handle = opendir(CONTENTPATH . self::$content_prefix)) {
         while (false !== ($file = readdir($handle))) {
             $path_info = pathinfo($file);
             if (isset($path_info['extension']) && $path_info['extension'] == "php") {
                 include CONTENTPATH . self::$content_prefix . $path_info['filename'] . '.php';
             } else {
                 if (is_dir(CONTENTPATH . self::$content_prefix . $file) && file_exists(CONTENTPATH . self::$content_prefix . $file . '/' . $file . '.php')) {
                     include CONTENTPATH . self::$content_prefix . $file . '/' . $file . '.php';
                 }
             }
             $classname = str_replace('-', '_', ucfirst(strtolower($file)));
             if (class_exists($classname)) {
                 $page = new $classname();
                 if ($slugs_cache === false) {
                     $class = new ReflectionClass($page);
                     foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
                         if ($method->class != $classname || $method->name == '__construct') {
                             continue;
                         }
                         if (strstr($method->name, '_')) {
                             $route = new Route(strtolower($file) . '/' . str_replace('_', '-', strtolower($method->name)), $method->name, ROUTE_DEFAULT, ucfirst($method->name));
                             $route->set_classname($classname);
                             $route->set_contentname($file);
                             self::setup_route($route);
                         }
                         $route = new Route(strtolower($file) . '/' . strtolower($method->name), $method->name, ROUTE_DEFAULT, ucfirst($method->name));
                         $route->set_classname($classname);
                         $route->set_contentname($file);
                         self::setup_route($route);
                     }
                     foreach ($page->get_routes() as $route) {
                         self::setup_route($route);
                     }
                 }
                 self::$content_pages[str_replace('-', '_', strtolower($file))] = $page;
             }
         }
         closedir($handle);
         if ($slugs_cache !== false) {
             self::$slugs = $slugs_cache;
             self::$slugs_reverse = $slugs_reverse_cache;
             self::$titles = $titles_cache;
         } else {
             if ($has_apc) {
                 apc_store($_SERVER['HTTP_HOST'] . '_slugs_' . language(), self::$slugs, 60 * 60 * 3);
                 apc_store($_SERVER['HTTP_HOST'] . '_slugs_reverse_' . language(), self::$slugs_reverse, 60 * 60 * 3);
                 apc_store($_SERVER['HTTP_HOST'] . '_titles', self::$titles, 60 * 60 * 3);
             }
         }
     }
 }