[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * 5 * Created on Aug 7, 2010 6 * 7 * Copyright © 2010 soxred93, Bryan Tong Minh 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22 * http://www.gnu.org/copyleft/gpl.html 23 * 24 * @file 25 */ 26 27 /** 28 * A query module to show basic page information. 29 * 30 * @ingroup API 31 */ 32 class ApiQueryPageProps extends ApiQueryBase { 33 34 private $params; 35 36 public function __construct( ApiQuery $query, $moduleName ) { 37 parent::__construct( $query, $moduleName, 'pp' ); 38 } 39 40 public function execute() { 41 # Only operate on existing pages 42 $pages = $this->getPageSet()->getGoodTitles(); 43 if ( !count( $pages ) ) { 44 # Nothing to do 45 return; 46 } 47 48 $this->params = $this->extractRequestParams(); 49 50 $this->addTables( 'page_props' ); 51 $this->addFields( array( 'pp_page', 'pp_propname', 'pp_value' ) ); 52 $this->addWhereFld( 'pp_page', array_keys( $pages ) ); 53 54 if ( $this->params['continue'] ) { 55 $this->addWhere( 'pp_page >=' . intval( $this->params['continue'] ) ); 56 } 57 58 if ( $this->params['prop'] ) { 59 $this->addWhereFld( 'pp_propname', $this->params['prop'] ); 60 } 61 62 # Force a sort order to ensure that properties are grouped by page 63 # But only if pp_page is not constant in the WHERE clause. 64 if ( count( $pages ) > 1 ) { 65 $this->addOption( 'ORDER BY', 'pp_page' ); 66 } 67 68 $res = $this->select( __METHOD__ ); 69 $currentPage = 0; # Id of the page currently processed 70 $props = array(); 71 $result = $this->getResult(); 72 73 foreach ( $res as $row ) { 74 if ( $currentPage != $row->pp_page ) { 75 # Different page than previous row, so add the properties to 76 # the result and save the new page id 77 78 if ( $currentPage ) { 79 if ( !$this->addPageProps( $result, $currentPage, $props ) ) { 80 # addPageProps() indicated that the result did not fit 81 # so stop adding data. Reset props so that it doesn't 82 # get added again after loop exit 83 84 $props = array(); 85 break; 86 } 87 88 $props = array(); 89 } 90 91 $currentPage = $row->pp_page; 92 } 93 94 $props[$row->pp_propname] = $row->pp_value; 95 } 96 97 if ( count( $props ) ) { 98 # Add any remaining properties to the results 99 $this->addPageProps( $result, $currentPage, $props ); 100 } 101 } 102 103 /** 104 * Add page properties to an ApiResult, adding a continue 105 * parameter if it doesn't fit. 106 * 107 * @param ApiResult $result 108 * @param int $page 109 * @param array $props 110 * @return bool True if it fits in the result 111 */ 112 private function addPageProps( $result, $page, $props ) { 113 $fit = $result->addValue( array( 'query', 'pages', $page ), 'pageprops', $props ); 114 115 if ( !$fit ) { 116 $this->setContinueEnumParameter( 'continue', $page ); 117 } 118 119 return $fit; 120 } 121 122 public function getCacheMode( $params ) { 123 return 'public'; 124 } 125 126 public function getAllowedParams() { 127 return array( 128 'continue' => null, 129 'prop' => array( 130 ApiBase::PARAM_ISMULTI => true, 131 ), 132 ); 133 } 134 135 public function getParamDescription() { 136 return array( 137 'continue' => 'When more results are available, use this to continue', 138 'prop' => 'Only list these props. Useful for checking whether a ' . 139 'certain page uses a certain page prop', 140 ); 141 } 142 143 public function getDescription() { 144 return 'Get various properties defined in the page content.'; 145 } 146 147 public function getExamples() { 148 return array( 149 'api.php?action=query&prop=pageprops&titles=Category:Foo', 150 ); 151 } 152 153 public function getHelpUrls() { 154 return 'https://www.mediawiki.org/wiki/API:Properties#pageprops_.2F_pp'; 155 } 156 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |