[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/api/ -> ApiQueryPageProps.php (source)

   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  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1