includes/namespaces/special.php
author Dan
Tue, 05 May 2009 00:10:26 -0400
changeset 953 323c4cd1aa37
parent 805 b2dc28b9f367
child 1072 604213a07ce0
permissions -rw-r--r--
Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.

<?php

/*
 * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
 * Version 1.1.6 (Caoineag beta 1)
 * Copyright (C) 2006-2008 Dan Fuhry
 *
 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
 */

class Namespace_Special extends Namespace_Default
{
  public function __construct($page_id, $namespace, $revision_id = 0)
  {
    global $db, $session, $paths, $template, $plugins; // Common objects
    
    $this->page_id = sanitize_page_id($page_id);
    $this->namespace = $namespace;
    $this->build_cdata();
    $this->revision_id = intval($revision_id);
    
    $this->page_protected = true;
    $this->wiki_mode = 0;
  }
  
  public function build_cdata()
  {
    global $db, $session, $paths, $template, $plugins; // Common objects
    global $lang;
    
    $this->exists = function_exists("page_{$this->namespace}_{$this->page_id}");
    
    if ( isset($paths->pages[ $paths->get_pathskey($this->page_id, $this->namespace) ]) )
    {
      $page_name = $paths->pages[ $paths->get_pathskey($this->page_id, $this->namespace) ]['name'];
    }
    else
    {
      $page_name = "{$paths->nslist[ $this->namespace ]}{$this->page_id}";
      if ( ($_ = $lang->get('specialpage_' . strtolower($this->page_id))) !== 'specialpage_' . strtolower($this->page_id) )
      {
        $page_name = $_;
      }
    }
    
    $this->cdata = array(
        'name' => $page_name,
        'urlname' => $this->page_id,
        'namespace' => $this->namespace,
        'special' => 0,
        'visible' => 0,
        'comments_on' => 0,
        'protected' => 0,
        'delvotes' => 0,
        'delvote_ips' => '',
        'wiki_mode' => 2,
        'page_exists' => false,
        'page_format' => getConfig('default_page_format', 'wikitext')
      );
    $this->cdata = Namespace_Default::bake_cdata($this->cdata);
    
    $this->title =& $this->cdata['name'];
  }
  
  function send()
  {
    global $output;
    
    if ( $this->exists )
    {
      call_user_func("page_{$this->namespace}_{$this->page_id}");
    }
    else
    {
      $output->header();
      $this->error_404();
      $output->footer();
    }
  }
  
  function error_404()
  {
    global $lang, $output;
    $func_name = "page_{$this->namespace}_{$this->page_id}";
    
    if ( $this->namespace == 'Admin' )
      die_semicritical($lang->get('page_msg_admin_404_title'), $lang->get('page_msg_admin_404_body', array('func_name' => $func_name)), true);
    
    $title = $lang->get('page_err_custompage_function_missing_title');
    $message = $lang->get('page_err_custompage_function_missing_body', array( 'function_name' => $func_name ));
    
    $output->set_title($title);
    $output->header();
    echo "<p>$message</p>";
    $output->footer();
  }
  
  function set_conds()
  {
    parent::set_conds();
    
    $this->conds['printable'] = false;
    $this->conds['adminpage'] = false;
  }
}