From a58285fd06c8113c45377c655dd43cef6337e815 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 11 Jan 2007 19:06:07 +0000 Subject: Aktualisierung auf MediaWiki 1.9.0 --- includes/api/ApiQueryBase.php | 273 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 267 insertions(+), 6 deletions(-) (limited to 'includes/api/ApiQueryBase.php') diff --git a/includes/api/ApiQueryBase.php b/includes/api/ApiQueryBase.php index 574f742e..ae4edf98 100644 --- a/includes/api/ApiQueryBase.php +++ b/includes/api/ApiQueryBase.php @@ -31,11 +31,260 @@ if (!defined('MEDIAWIKI')) { abstract class ApiQueryBase extends ApiBase { - private $mQueryModule; - + private $mQueryModule, $tables, $where, $fields, $options; + public function __construct($query, $moduleName, $paramPrefix = '') { parent :: __construct($query->getMain(), $moduleName, $paramPrefix); $this->mQueryModule = $query; + $this->resetQueryParams(); + } + + protected function resetQueryParams() { + $this->tables = array (); + $this->where = array (); + $this->fields = array (); + $this->options = array (); + } + + protected function addTables($value) { + if (is_array($value)) + $this->tables = array_merge($this->tables, $value); + else + $this->tables[] = $value; + } + + protected function addFields($value) { + if (is_array($value)) + $this->fields = array_merge($this->fields, $value); + else + $this->fields[] = $value; + } + + protected function addFieldsIf($value, $condition) { + if ($condition) { + $this->addFields($value); + return true; + } + return false; + } + + protected function addWhere($value) { + if (is_array($value)) + $this->where = array_merge($this->where, $value); + else + $this->where[] = $value; + } + + protected function addWhereIf($value, $condition) { + if ($condition) { + $this->addWhere($value); + return true; + } + return false; + } + + protected function addWhereFld($field, $value) { + if (!is_null($value)) + $this->where[$field] = $value; + } + + protected function addWhereRange($field, $dir, $start, $end) { + $isDirNewer = ($dir === 'newer'); + $after = ($isDirNewer ? '>=' : '<='); + $before = ($isDirNewer ? '<=' : '>='); + $db = $this->getDB(); + + if (!is_null($start)) + $this->addWhere($field . $after . $db->addQuotes($start)); + + if (!is_null($end)) + $this->addWhere($field . $before . $db->addQuotes($end)); + + $this->addOption('ORDER BY', $field . ($isDirNewer ? '' : ' DESC')); + } + + protected function addOption($name, $value = null) { + if (is_null($value)) + $this->options[] = $name; + else + $this->options[$name] = $value; + } + + protected function select($method) { + + // getDB has its own profileDBIn/Out calls + $db = $this->getDB(); + + $this->profileDBIn(); + $res = $db->select($this->tables, $this->fields, $this->where, $method, $this->options); + $this->profileDBOut(); + + return $res; + } + + protected function addRowInfo($prefix, $row) { + + $vals = array (); + + // ID + if ( isset( $row-> { $prefix . '_id' } ) ) + $vals[$prefix . 'id'] = intval( $row-> { $prefix . '_id' } ); + + // Title + $title = ApiQueryBase :: addRowInfo_title($row, $prefix . '_namespace', $prefix . '_title'); + if ($title) { + if (!$title->userCanRead()) + return false; + $vals['ns'] = $title->getNamespace(); + $vals['title'] = $title->getPrefixedText(); + } + + switch ($prefix) { + + case 'page' : + // page_is_redirect + @ $tmp = $row->page_is_redirect; + if ($tmp) + $vals['redirect'] = ''; + + break; + + case 'rc' : + // PageId + @ $tmp = $row->rc_cur_id; + if (!is_null($tmp)) + $vals['pageid'] = intval($tmp); + + @ $tmp = $row->rc_this_oldid; + if (!is_null($tmp)) + $vals['revid'] = intval($tmp); + + if ( isset( $row->rc_last_oldid ) ) + $vals['old_revid'] = intval( $row->rc_last_oldid ); + + $title = ApiQueryBase :: addRowInfo_title($row, 'rc_moved_to_ns', 'rc_moved_to_title'); + if ($title) { + if (!$title->userCanRead()) + return false; + $vals['new_ns'] = $title->getNamespace(); + $vals['new_title'] = $title->getPrefixedText(); + } + + if ( isset( $row->rc_patrolled ) ) + $vals['patrolled'] = ''; + + break; + + case 'log' : + // PageId + @ $tmp = $row->page_id; + if (!is_null($tmp)) + $vals['pageid'] = intval($tmp); + + if ($row->log_params !== '') { + $params = explode("\n", $row->log_params); + if ($row->log_type == 'move' && isset ($params[0])) { + $newTitle = Title :: newFromText($params[0]); + if ($newTitle) { + $vals['new_ns'] = $newTitle->getNamespace(); + $vals['new_title'] = $newTitle->getPrefixedText(); + $params = null; + } + } + + if (!empty ($params)) { + $this->getResult()->setIndexedTagName($params, 'param'); + $vals = array_merge($vals, $params); + } + } + + break; + + case 'rev' : + // PageID + @ $tmp = $row->rev_page; + if (!is_null($tmp)) + $vals['pageid'] = intval($tmp); + } + + // Type + @ $tmp = $row-> { + $prefix . '_type' }; + if (!is_null($tmp)) + $vals['type'] = $tmp; + + // Action + @ $tmp = $row-> { + $prefix . '_action' }; + if (!is_null($tmp)) + $vals['action'] = $tmp; + + // Old ID + @ $tmp = $row-> { + $prefix . '_text_id' }; + if (!is_null($tmp)) + $vals['oldid'] = intval($tmp); + + // User Name / Anon IP + @ $tmp = $row-> { + $prefix . '_user_text' }; + if (is_null($tmp)) + @ $tmp = $row->user_name; + if (!is_null($tmp)) { + $vals['user'] = $tmp; + @ $tmp = !$row-> { + $prefix . '_user' }; + if (!is_null($tmp) && $tmp) + $vals['anon'] = ''; + } + + // Bot Edit + @ $tmp = $row-> { + $prefix . '_bot' }; + if (!is_null($tmp) && $tmp) + $vals['bot'] = ''; + + // New Edit + @ $tmp = $row-> { + $prefix . '_new' }; + if (is_null($tmp)) + @ $tmp = $row-> { + $prefix . '_is_new' }; + if (!is_null($tmp) && $tmp) + $vals['new'] = ''; + + // Minor Edit + @ $tmp = $row-> { + $prefix . '_minor_edit' }; + if (is_null($tmp)) + @ $tmp = $row-> { + $prefix . '_minor' }; + if (!is_null($tmp) && $tmp) + $vals['minor'] = ''; + + // Timestamp + @ $tmp = $row-> { + $prefix . '_timestamp' }; + if (!is_null($tmp)) + $vals['timestamp'] = wfTimestamp(TS_ISO_8601, $tmp); + + // Comment + @ $tmp = $row-> { + $prefix . '_comment' }; + if (!empty ($tmp)) // optimize bandwidth + $vals['comment'] = $tmp; + + return $vals; + } + + private static function addRowInfo_title($row, $nsfld, $titlefld) { + if ( isset( $row-> $nsfld ) ) { + $ns = $row-> $nsfld; + @ $title = $row-> $titlefld; + if (!empty ($title)) + return Title :: makeTitle($ns, $title); + } + return false; } /** @@ -46,12 +295,19 @@ abstract class ApiQueryBase extends ApiBase { } /** - * Get the main Query module + * Get the main Query module */ public function getQuery() { return $this->mQueryModule; } + protected function setContinueEnumParameter($paramName, $paramValue) { + $msg = array ( + $this->encodeParamName($paramName + ) => $paramValue); + $this->getResult()->addValue('query-continue', $this->getModuleName(), $msg); + } + /** * Get the Query database connection (readonly) */ @@ -67,6 +323,11 @@ abstract class ApiQueryBase extends ApiBase { return $this->mQueryModule->getPageSet(); } + /** + * This is a very simplistic utility function + * to convert a non-namespaced title string to a db key. + * It will replace all ' ' with '_' + */ public static function titleToKey($title) { return str_replace(' ', '_', $title); } @@ -76,7 +337,7 @@ abstract class ApiQueryBase extends ApiBase { } public static function getBaseVersion() { - return __CLASS__ . ': $Id: ApiQueryBase.php 16757 2006-10-03 05:41:55Z yurik $'; + return __CLASS__ . ': $Id: ApiQueryBase.php 17987 2006-11-29 05:45:03Z nickj $'; } } @@ -86,7 +347,7 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase { public function __construct($query, $moduleName, $paramPrefix = '') { parent :: __construct($query, $moduleName, $paramPrefix); - $mIsGenerator = false; + $this->mIsGenerator = false; } public function setGeneratorMode() { @@ -109,4 +370,4 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase { */ public abstract function executeGenerator($resultPageSet); } -?> \ No newline at end of file +?> -- cgit v1.2.3-54-g00ecf