The following is automatically generated by LoxyBot

opentasks.run.php (LoxyBot)

edit
#!/usr/bin/php 
<?php
/*********************************************************************\
* Opentasks script
*
* This file is part of LoxyBot, a bot created by User:Foxy Loxy
* at <http://en.wikipedia.org/wiki/User:LoxyBot>.
*
* LoxyBot is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* LoxyBot 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 more details.
*
* You should have received a copy of the GNU General Public License
* along with LoxyBot.  If not, see <http://www.gnu.org/licenses/>.
*
* This code is optimized to be run from the command line.
\*********************************************************************/
$OpenTasks_Version = '1.3.1';

/**
* = Files to include =
* pwiki.class.php; 	PHPediaWiki is the bot framework designed by Foxy Loxy (originally ported from SxWiki) for use with his bots.
**/
require_once 		"pwiki.class.php";

/**
* = Pwiki class stuff = 
* This varible opens the Pwiki class for use.
* Make sure to call it with every Pwiki based command, e.g. $pw->getPage instead of getPage.
**/
$configurationfile = 'config.include.php';
$extensions = array(
		    'categorymanipulation.extends.php',
		    'loxybot.extends.php',
		    );
$verbosity = 4;
$logverbosity = 4;
$logfile = 'bot.log';
$logerrors = true;
$pw			= new Pwiki($configurationfile,$extensions,$verbosity,$logverbosity,$logfile,$logerrors);
$username 		= $pw->username;
$owner                  = $pw->ownerusername;

/**
* = Configuration varibles =
* You can change these varibles to customise the program to suit your needs.
* $owner; 		Owner's en.Wikipedia username (if owner does not have en.wikipedia account, use interwiki, e.g. meta:Foxy Loxy).
* $stpage;		The source code template page.
* $sourcecode; 	User:$username/Source page contents to write.
* $sourcepage; 	Page that sourcecode should be written to.
* $sourcesum; 	The edit summary used when dumping the source code.
* $ottemplate; 	The location of the template used when writing to open tasks (this template is just like the one you wish to write to only with information locations defined as $varibles).
* $otpage; 		The location of the open tasks page.
* $otsum; 		The edit summary used when updating the open tasks page.
* $findarr;		This array contains the placeholder varibles used when using the open tasks template. Make sure not to replace the 'quotes' with "quotes".
* $amount;		The number of articles to put in each section.
* $ns;			The namespace number that the pages should be taken from. (0 = article space)
* $usecron;		true = You want to use cron instead of looping this script endlessly. false = you want to use the traditional loop method.
* $sleep;		The number of seconds to sleep for if $usecron is set to false.
* $executetimes;The number times the script should loop. Setting value to -1 means forever.
* NOTE: Other configuration varibles reside in pwiki.class.php and config.include.php.
**/
$stpage			= "User:$username/SourceTemplate";
$sourcecode		= str_replace(array("\$\$LoXyBoT\$\$","\$\$ExTeNsIoN\$\$"), array(file_get_contents(__FILE__),file_get_contents('loxybot.extends.php')), $pw->getPage($stpage));
$sourcepage		= "User:$username/Source";
$sourcesum		= "Writing source code. Script $OpenTasks_Version. Pwiki $Pwiki_Version.";
$ottemplate		= "User:$username/Opentaskstemplate";
$otpage			= 'Wikipedia:Community portal/Opentask';
$otsum			= "Updating open tasks list";
$findarr		= array('$wikify', 	// Needs to be wikified
				'$cleanup',	// Needs cleanup
				'$stub', 	// Stubs
				'$verify',	// Needs verification
				'$update',	// Needs updating
				'$npov',	// Needs NPOV editing
				'$copyedit',	// Needs copyediting
				'$merge',	// Needs to be merged
				'$style',	// Needs its style fixed
				'$expand',	// Needs expanding
				'$split',	// Needs to be split
				);
$amount			= '6';
$ns			= '0';
$usecron		= false;
$sleep			= '10800';
$executetimes	= -1;

/**
* = Dumping the source code =
* This if statement checks checkrun() and then writes the sourcecode for this file, SxWiki.php
* and a sample of login.include.php to the predefined page on Wikipedia.
**/
if ($pw->getPage($sourcepage) != $sourcecode) {
	$pw->_debug(0,"Source code different at User:$username/Source, writing.");
	$pw->putPage($sourcepage,$sourcesum,$sourcecode);
}
      
/**
* = Category Arrays, Array Compression and Replace array function =
* This is the array that replaces the placeholders defined above with the real thing.
* These varibles call the wikifyarray function and compress the arrays, they also contain the category content required by the script.
* These varibles access the arrays above and are also used as the default varibles on the open tasks template.
* The getCat function accesses categories and fetches the 5 oldest mainspace posts.
* This is all combined into the generated page function which takes the open tasks template
* and generates the new open tasks page.
**/
function generatePage() {

	/**
	* = Category varibles =
	* These varibles must point to the categories which contain ALL 
	* articles associated with that problem, not one with dated subcategories.
	* DO NOT add Category: to the front of these.
	**/
	$wikifycat		= 'All pages needing to be wikified';
	$cleanupcat		= 'All pages needing cleanup';
	$stubcat		= 'Stubs';
	$verifycat		= 'All pages needing factual verification';
	$updatecat		= 'Wikipedia articles in need of updating';
	$npovcat		= 'All NPOV disputes';
	$copyeditcat    	= 'All articles needing copy edit';
	$mergecat		= 'All articles to be merged';
	$stylecat		= 'All articles needing style editing';
	$expandcat		= 'All articles to be expanded';
	$splitcat		= 'Articles to be split';

	global $pw, $ns, $amount, $ottemplate, $findarr;
	$result = 
	str_replace(
		$findarr, 
		array(
		      $pw->lb->wikifyimplodeArray(
			        $pw->cm->randCatMembers($wikifycat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($cleanupcat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($stubcat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($verifycat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($updatecat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($npovcat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($copyeditcat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($mergecat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($stylecat,$ns,$amount)
			), 
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($expandcat,$ns,$amount)
			),
			$pw->lb->wikifyimplodeArray(
				$pw->cm->randCatMembers($splitcat,$ns,$amount)
			),
		), 
		$pw->getPage($ottemplate)
	);
	return $result;
}

if (!$usecron) {
	$i = 0;
	while ($i != $executetimes) {
 	      $pw->putPage($otpage,$otsum,generatePage());
	      $i++;
  	      $pw->_debug(2,"Sleeping for $sleep seconds. Loop run $i times.");
  	      sleep($sleep);
  	      $pw->_debug(2,"Awake now.");
	};     
} else {
	$pw->putPage($otpage,$otsum,generatePage());
}

$pw->_exit("End of script.");
?>

loxybot.extends.php (Pwiki extension)

edit
<?php
$name = 'LoxyBot';
$shortcut = 'lb';
$creator = 'en:User:Atyndall';
$licence = 'GNU GPL';

class LoxyBot extends Pwiki
{
  function LoxyBot($verbosity=NULL, $logverbosity=NULL) {
    if (isset($verbosity)) {
      $this->verbosty = $verbosity;
    }
    if (isset($logverbosity)) {
      $this->logverbosity = $logverbosity;
    }
    return NULL;
  }

  /*** TBU ***/
  // See http://pwiki.sf.net/docs/Func:wikifyimplodeArray
  public function wikifyimplodeArray($array, $after=', ') {
    $this->_debug(4,"Public Function wikifyimplodeArray called.");
    while (!isset($array)) {
      $this->_debug(4,'$array was not set, returning NULL.');
      return NULL;
    }
    foreach($array as $item){
        $output .= "[[$item]]$after";
    }
    return $output;
  }


}

?>

pwiki.class.php

edit

LoxyBot now runs off the PHPediaWiki framework that I have ported from SxWiki and now develop myself. Pwiki can be downloaded from subversion at http://pwiki.svn.sourceforge.net/viewvc/pwiki/trunk/

config.include.php

edit

See http://pwiki.sf.net/docs/Configuration_file

crontab

edit

NOTE: crontab is not used on LoxyBot, but can be implemented if wanted.

# Runs script every three hours.
*/3 * * * * $HOME/bot/opentasks.run.php