includes/paths.php
changeset 953 323c4cd1aa37
parent 935 9e124177c9a4
child 960 e74741b8360b
--- a/includes/paths.php	Mon May 04 23:07:00 2009 -0400
+++ b/includes/paths.php	Tue May 05 00:10:26 2009 -0400
@@ -163,30 +163,6 @@
       eval($cmd);
     }
     
-    if ( $page_cache = $cache->fetch('page_meta') )
-    {
-      $this->pages = array_merge($this->pages, $page_cache);
-    }
-    else
-    {
-      $e = $db->sql_query('SELECT name,urlname,namespace,special,visible,comments_on,protected,delvotes,' . "\n"
-                          . '  delvote_ips,wiki_mode,password,page_format FROM '.table_prefix.'pages ORDER BY name;');
-      
-      if( !$e )
-      {
-        $db->_die('The error seems to have occured while selecting the page information. File: includes/paths.php; line: '.__LINE__);
-      }
-      while($r = $db->fetchrow())
-      {
-        $r = $this->calculate_metadata_from_row($r);
-        
-        $this->pages[$r['urlname']] = $r;
-        $this->pages[] =& $this->pages[$r['urlname']];
-      }
-      
-      $this->update_metadata_cache();
-    }
-    $db->free_result();
     if ( defined('ENANO_INTERFACE_INDEX') || defined('ENANO_INTERFACE_AJAX') || defined('IN_ENANO_UPGRADE') )
     {
       $title = $this->parse_url(false);
@@ -391,6 +367,39 @@
     $session->init_permissions();
   }
   
+  /**
+   * Fetch cdata (metadata) for a page.
+   * @param string Page ID
+   * @param string Namespace
+   * @return array
+   */
+  
+  function get_cdata($page_id, $namespace)
+  {
+    global $db, $session, $paths, $template, $plugins; // Common objects
+    
+    $pathskey = $this->get_pathskey($page_id, $namespace);
+    if ( isset($this->pages[$pathskey]) )
+      return $this->pages[$pathskey];
+    
+    $page = namespace_factory($page_id, $namespace);
+    $cdata = $page->get_cdata();
+    
+    $this->pages[$pathskey] = $cdata;
+    return $cdata;
+  }
+  
+  /**
+   * For a given page ID and namespace, generate a flat string that can be used to access $paths->pages.
+   * @param string Page ID
+   * @param string Namespace
+   */
+  
+  function get_pathskey($page_id, $namespace)
+  {
+    return ( isset($this->nslist[$namespace]) ) ? "{$this->nslist[$namespace]}{$page_id}" : "{$namespace}:{$page_id}";
+  }
+  
   function add_page($flags)
   {
     global $lang;
@@ -404,10 +413,9 @@
     }
     
     $flags['require_admin'] = ( $flags['namespace'] === 'Admin' );
+    $flags['page_exists'] = true;
     
-    $pages_len = sizeof($this->pages) / 2;
-    $this->pages[$pages_len] = $flags;
-    $this->pages[$flags['urlname']] =& $this->pages[$pages_len];
+    $this->pages[$flags['urlname']] = $flags;
   }
   
   function main_page()
@@ -564,7 +572,7 @@
     $title = $this->parse_url(false);
     list(, $ns) = RenderMan::strToPageID($title);
     $title = substr($title, strlen($this->nslist[$ns]));
-    $regex = '/^' . str_replace('/', '\\/', preg_quote($this->nslist[$this->namespace])) . '\\/?/';
+    $regex = '/^' . str_replace('/', '\\/', preg_quote($this->nslist[$ns])) . '\\/?/';
     $title = preg_replace($regex, '', $title);
     $title = explode('/', $title);
     $id = $id + 1;
@@ -604,42 +612,14 @@
   }
   
   /**
-   * Updates the cache containing all page metadata.
+   * Deprecated.
    */
   
   function update_metadata_cache()
   {
     global $db, $session, $paths, $template, $plugins; // Common objects
     
-    if ( getConfig('cache_thumbs') != '1' )
-      return false;
-    
-    $e = $db->sql_unbuffered_query('SELECT name,urlname,namespace,special,visible,comments_on,protected,delvotes,' . "\n"
-                          . '  delvote_ips,wiki_mode,password,page_format FROM '.table_prefix.'pages ORDER BY name;');
-    if ( !$e )
-      $db->_die();
-    
-    $md_array = array();
-    
-    while ( $row = $db->fetchrow() )
-    {
-      $row = $this->calculate_metadata_from_row($row);
-      $md_array[$row['urlname']] = $row;
-    }
-    
-    // import cache functions
-    global $cache;
-    
-    // store data (TTL 20 minutes)
-    try
-    {
-      $cache->store('page_meta', $md_array, 20);
-    }
-    catch ( Exception $e )
-    {
-    }
-    
-    return true;
+    return false;
   }
   
   /**
@@ -650,34 +630,7 @@
   
   function calculate_metadata_from_row($r)
   {
-    $r['urlname_nons'] = $r['urlname'];
-    if ( isset($this->nslist[$r['namespace']]) )
-    {
-      $r['urlname'] = $this->nslist[$r['namespace']] . $r['urlname']; // Applies the User:/File:/etc prefixes to the URL names
-    }
-    else
-    {
-      $ns_char = substr($this->nslist['Special'], -1);
-      $r['urlname'] = $r['namespace'] . $ns_char . $r['urlname'];
-    }
-    
-    if ( $r['delvotes'] == null)
-    {
-      $r['delvotes'] = 0;
-    }
-    if ( $r['protected'] == 0 || $r['protected'] == 1 )
-    {
-      $r['really_protected'] = (int)$r['protected'];
-    }
-    else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '1')
-    {
-      $r['really_protected'] = 1;
-    }
-    else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '0' )
-    {
-      $r['really_protected'] = 0;
-    }
-    return $r;
+    return Namespace_Default::bake_cdata($r);
   }
   
   /**
@@ -838,7 +791,6 @@
       $db->_die();
     
     $sha1_blank = sha1('');
-    $query_func = ( ENANO_DBLAYER == 'MYSQL' ) ? 'mysql_query' : 'pg_query';
     
     //
     // Index $pages_in_batch pages at a time
@@ -1082,65 +1034,6 @@
   }
   
   /**
-   * Creates an instance of the Searcher class, including index info
-   * @return object
-   */
-   
-  function makeSearcher($match_case = false)
-  {
-    global $db, $session, $paths, $template, $plugins; // Common objects
-    $search = new Searcher();
-    $q = $db->sql_query('SELECT word,page_names FROM '.table_prefix.'search_index;');
-    if(!$q)
-    {
-      echo $db->get_error();
-      return false;
-    }
-    $idx = Array();
-    while($row = $db->fetchrow($q))
-    {
-      $row['word'] = rtrim($row['word'], "\0");
-      $idx[$row['word']] = $row['page_names'];
-    }
-    $db->free_result();
-    $search->index = $idx;
-    if($match_case)
-      $search->match_case = true;
-    return $search;
-  }
-  
-  /**
-   * Creates an associative array filled with the values of all the page titles
-   * @return array
-   */
-   
-  function get_page_titles()
-  {
-    $texts = Array();
-    for ( $i = 0; $i < sizeof($this->pages) / 2; $i++ )
-    {
-      $texts[$this->pages[$i]['urlname']] = $this->pages[$i]['name'];
-    }
-    return $texts;
-  }
-  
-  /**
-   * Creates an instance of the Searcher class, including index info for page titles
-   * @return object
-   */
-   
-  function makeTitleSearcher($match_case = false)
-  {
-    global $db, $session, $paths, $template, $plugins; // Common objects
-    $search = new Searcher();
-    $texts = $this->get_page_titles();
-    $search->buildIndex($texts);
-    if($match_case)
-      $search->match_case = true;
-    return $search;
-  }
-  
-  /**
    * Returns a list of groups that a given page is a member of.
    * @param string Page ID
    * @param string Namespace