Extension:Knowledgebase/SpecialKB.php

From MediaWiki.org

Jump to: navigation, search
<?php
 
/**
 * Special page to assist creating numbered KB articles  - present page with next-higher number in namespace 'KB'
 * Make sure you add the namespace first! E.g. add this to LocalSettings.php:
 *      $wgExtraNamespaces[100] = "KB";
 *      $wgContentNamespaces[] = 100;
 * For more info see http://www.mediawiki.org/wiki/Manual:Using_custom_namespaces
 *
 * To install, place the file into your extensions directory and add this line to LocalSettings.php: 
 *   require_once("extensions/SpecialKB.php");
 *
 * Author: Barry Brannan 
 * Date: August 2007
 * Released into public domain.
 *
 */
 
define('KB_PAD_LENGTH', 5);  // pad numbers eg 00013 instead of 13 - set to 0 for no padding
define('KB_NAMESPACE', 'KB');  // change to different namespace if you like
 
if( defined( 'MEDIAWIKI' ) ) {
 
  require_once( 'SpecialPage.php' );
 
  $wgExtensionFunctions[] = 'efKBExtn';
  $wgExtensionCredits['specialpage'][] = array( 
    'name' => 'Knowledgebase', 
    'author' => 'Barrylb', 
    'url' => 'http://www.mediawiki.org/wiki/Extension:Knowledgebase',
    'description' => 'Create next-higher integer article number in namespace KB' );
 
  function efKBExtn() {
    global $wgMessageCache;
    SpecialPage::addPage( new KnowledgeBaseExtn() );
    $wgMessageCache->addMessage( 'knowledgebase', 'Add Knowledge Base Article' );
  }
 
  class KnowledgeBaseExtn extends IncludableSpecialPage {
 
    function KnowledgeBaseExtn() {
      SpecialPage::SpecialPage( 'Knowledgebase', '', true, false, 'default', true );
    }
 
    function execute( $par ) {
      global $wgOut, $wgContLang;
 
      $ns_id = $wgContLang->getNsIndex( constant('KB_NAMESPACE') );
      if ($ns_id == '')
        $ns_id = NS_MAIN;
 
      $dbr = wfGetDB( DB_SLAVE );
      $page = $dbr->tableName( 'page' );
      $sql = "SELECT max(cast(page_title as unsigned))+1 page_title
  			FROM $page 
  			WHERE page_namespace = $ns_id";
 
  		$res = $dbr->query( $sql );
  		$row = $dbr->fetchObject( $res );
 
      if ($row->page_title == '')  // nothing returned, create starting with number 1 
        $title_text = '1';
      else
        $title_text = $row->page_title;
 
      $title_text = str_pad($title_text, constant('KB_PAD_LENGTH'), '0', STR_PAD_LEFT);
 
      $title = Title::makeTitleSafe( $ns_id, $title_text );
      $wgOut->redirect( $title->getFullUrl() );
    }         
 
  }
 
} else {
  echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
  die( -1 );
}