Extension:Knowledgebase/SpecialKB.php
From MediaWiki.org
<?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 ); }
