<?php
/**
* mwApiXmlParse class
**
* Class to hold parsing methods re: Mediawiki API
*
* This class has several dependencies/assumptions
* * PHP xml module is enabled (which, in turn, relies on expat
* by James Clark.
* * mwApiXmlItem (class in mwApiXmlParse.php)
**
* This program 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 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
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
**
* @author Amgine <amgine.saewyc@gmail.com>
* @copyright 2010 by Amgine <amgine.saewyc@gmail.com>
*/
class mwApiXmlParse{
/**
* @var $tag string xml tag name
**/
public $tag = '';
/**
* @var $query bool Within a query xml tag
**/
public $query = false;
/**
* @var $pages bool Within a pages xml tag
**/
public $pages = false;
/**
* @var $revisions bool Within a revisions xml tag
**/
public $revisions = false;
/**
* @var $depth int xml element nested depth
**/
public $depth = array();
/**
* @var $allElements string text map
**/
public $allElements = '';
/**
* @var $item object mwApiXmlItem
**/
public $item;
/**
* @var $values
**/
/**
* __construct method
**/
function __construct(){
$this->item = new mwApiXmlItem;
}
/**
* startElement method
**
* Process new xml tags, as called by xml_parse in an event-driven
* xml parser.
**
* @param $parser string resource handler
* @param $tag string name of xml element
* @param $attrib array associative array of element attributes
**/
function startElement( $parser, $tag, $attrib ){
for ($i = 0; $i < $this->depth[$parser]; $i++) {
$this->allElements .= ' ';
}
$this->allElements .= "$tag\n";
$this->depth[$parser]++;
//debug lines
// echo "Processing $tag\n";
// print_r( $attrib );
switch( $tag ){
case 'login':
if( 'Success' == $attrib['result'] ){
$this->item->userid = $attrib['lguserid'];
$this->item->username = $attrib['lgusername'];
$this->item->loginToken = $attrib['lgtoken'];
$this->item->cookiePrefix = $attrib['cookieprefix'];
$this->item->sessionId = $attrib['sessionid'];
}
break;
case 'query':
// Beginning of query tag
$this->tag = $tag;
$this->query = true;
break;
case 'pages':
//beginning of pages tag
$this->tag = $tag;
$this->pages = true;
break;
case 'page':
$this->item->pageid = $attrib['pageid'];
$this->item->ns = $attrib['ns'];
$this->item->title = $attrib['title'];
$this->item->touched = $attrib['touched'];
$this->item->lastrevid = $attrib['lastrevid'];
$this->item->counter = $attrib['counter'];
$this->item->length = $attrib['length'];
$this->item->edittoken = $attrib['edittoken'];
break;
case 'revisions':
// beginning of revisions tag
$this->tag = $tag;
$this->revisions = true;
break;
case 'rev':
$this->item->revid = $attrib['revid'];
$this->item->user = $attrib['user'];
$this->item->timestamp = $attrib['timestamp'];
$this->item->comment = $attrib['comment'];
break;
case 'edit':
if( 'Success' == $attrib['result'] ){
$this->setItems( $attrib );
if( false != isset( $attrib['new'] ) ){
$this->item->new = true;
}
}else{
$this->item->result = $attrib['result'];
}
break;
case 'error':
$this->item->error = true;
setItems( $attrib );
break;
case 'api':
// default L1 tag
}
}
/**
* endElement method
**
* Process at the end of xml tags, as called by xml_parse in an
* event-driven xml parser.
**
* @param $pasers string Resource handler
* @param $tag string xml element name
**/
function endElement( $parser, $tag ) {
$this->depth[$parser]--;
switch( $tag ){
case 'query':
$this->query = false;
break;
case 'pages':
$this->pages = false;
break;
case 'revisions':
$this->revisions = false;
break;
}
}
/**
* setItems method
**
* Set multiple item values via array
**
* @param $attrib array Attribution values from an xml tag.
**/
public function setItems( $attrib ){
foreach( $attrib AS $key => $val ){
$this->item->$key = $val;
}
}
}
/**
* mwApiXmlItem class
**
* Class to hold returned values and tokens re: Mediawiki API
**
* This program 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 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
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
**
* @author Amgine <amgine.saewyc@gmail.com>
* @copyright 2010 by Amgine <amgine.saewyc@gmail.com>
*/
class mwApiXmlItem{
/**
* @var $comment string revision summary
**/
public $comment = '';
/**
* @var $cookiePrefix string prefix for cookie names
**/
public $cookiePrefix = '';
/**
* @var $counter string representation of integer (page hits counter?)
**/
public $counter = '';
/**
* @var $edittoken string random session edit token
**/
public $edittoken = '';
/**
* @var $lastrevid string representation of integer revid
**/
public $lastrevid = '';
/**
* @var $length string representation of integer, length of text (in bytes?)
**/
public $length = '';
/**
* @var $loginToken string Login token
**/
public $loginToken = '';
/**
* @var $new string/bool Empty string, if set true the page edited was a new creation.
*/
public $new = '';
/**
* @var $newrevid string representation of integer revision id
**/
public $newrevid = '';
/**
* @var $newtimestamp string newest revision timestamp
**/
public $newtimestamp = '';
/**
* @var $ns string represenation of integer namespace
**/
public $ns = '';
/**
* @var $oldrevid string representation of integer revision value, 0 = new page creation
**/
public $oldrevid = '';
/**
* @var $pageid string representation of integer page id (unique)
**/
public $pageid = '';
/**
* @var $result string 'Success' = last api query was successful.
**/
public $result = '';
/**
* @var $revid string representation of integer.
**/
public $revid = '';
/**
* @var $sessionId string session id hash
**/
public $sessionId = '';
/**
* @var $title string unique page title
**/
public $title = '';
/**
* @var $touched string timestamp of last revision
**/
public $touched = '';
/**
* @var $timestamp string revision timestamp.
**/
public $timestamp = '';
/**
* @var $user string revision submitted by this user.
**/
public $user = '';
/**
* @var $userid string User id
**/
public $userid = '';
/**
* @var $username string User name
**/
public $username = '';
}