[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/specials/ -> SpecialTrackingCategories.php (source)

   1  <?php
   2  /**
   3   * Implements Special:TrackingCategories
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @ingroup SpecialPage
  22   */
  23  
  24  /**
  25   * A special page that displays list of tracking categories
  26   * Tracking categories allow pages with certain characteristics to be tracked.
  27   * It works by adding any such page to a category automatically.
  28   * Category is specified by the tracking category's system message.
  29   *
  30   * @ingroup SpecialPage
  31   * @since 1.23
  32   */
  33  
  34  class SpecialTrackingCategories extends SpecialPage {
  35  	function __construct() {
  36          parent::__construct( 'TrackingCategories' );
  37      }
  38  
  39  	function execute( $par ) {
  40          $this->setHeaders();
  41          $this->outputHeader();
  42          $this->getOutput()->allowClickjacking();
  43          $this->getOutput()->addHTML(
  44              Html::openElement( 'table', array( 'class' => 'mw-datatable',
  45                  'id' => 'mw-trackingcategories-table' ) ) . "\n" .
  46              "<thead><tr>
  47              <th>" .
  48                  $this->msg( 'trackingcategories-msg' )->escaped() . "
  49              </th>
  50              <th>" .
  51                  $this->msg( 'trackingcategories-name' )->escaped() .
  52              "</th>
  53              <th>" .
  54                  $this->msg( 'trackingcategories-desc' )->escaped() . "
  55              </th>
  56              </tr></thead>"
  57          );
  58  
  59          foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) {
  60              /*
  61               * Check if the tracking category varies by namespace
  62               * Otherwise only pages in the current namespace will be displayed
  63               * If it does vary, show pages considering all namespaces
  64               */
  65              $msgObj = $this->msg( $catMsg )->inContentLanguage();
  66              $allMsgs = array();
  67              $catDesc = $catMsg . '-desc';
  68              $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
  69              if ( !$catMsgTitle ) {
  70                  continue;
  71              }
  72              $catMsgTitleText = Linker::link(
  73                  $catMsgTitle,
  74                  htmlspecialchars( $catMsg )
  75              );
  76  
  77              // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
  78              // False positives are ok, this is just an efficiency shortcut
  79              if ( strpos( $msgObj->plain(), '{{' ) !== false ) {
  80                  $ns = MWNamespace::getValidNamespaces();
  81                  foreach ( $ns as $namesp ) {
  82                      $tempTitle = Title::makeTitleSafe( $namesp, $catMsg );
  83                      if ( !$tempTitle ) {
  84                          continue;
  85                      }
  86                      $catName = $msgObj->title( $tempTitle )->text();
  87                      # Allow tracking categories to be disabled by setting them to "-"
  88                      if ( $catName !== '-' ) {
  89                          $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
  90                          if ( $catTitle ) {
  91                              $catTitleText = Linker::link(
  92                                  $catTitle,
  93                                  htmlspecialchars( $catName )
  94                              );
  95                              $allMsgs[] = $catTitleText;
  96                          }
  97                      }
  98                  }
  99              } else {
 100                  $catName = $msgObj->text();
 101                  # Allow tracking categories to be disabled by setting them to "-"
 102                  if ( $catName !== '-' ) {
 103                      $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
 104                      if ( $catTitle ) {
 105                          $catTitleText = Linker::link(
 106                              $catTitle,
 107                              htmlspecialchars( $catName )
 108                          );
 109                          $allMsgs[] = $catTitleText;
 110                      }
 111                  }
 112              }
 113  
 114              # Extra message, when no category was found
 115              if ( !count( $allMsgs ) ) {
 116                  $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
 117              }
 118  
 119              /*
 120               * Show category description if it exists as a system message
 121               * as category-name-desc
 122               */
 123              $descMsg = $this->msg( $catDesc );
 124              if ( $descMsg->isBlank() ) {
 125                  $descMsg = $this->msg( 'trackingcategories-nodesc' );
 126              }
 127  
 128              $this->getOutput()->addHTML(
 129                  Html::openElement( 'tr' ) .
 130                  Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) .
 131                      $this->getLanguage()->commaList( array_unique( $allMsgs ) ) .
 132                  Html::closeElement( 'td' ) .
 133                  Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) .
 134                      $catMsgTitleText .
 135                  Html::closeElement( 'td' ) .
 136                  Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) .
 137                      $descMsg->parse() .
 138                  Html::closeElement( 'td' ) .
 139                  Html::closeElement( 'tr' )
 140              );
 141          }
 142          $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
 143      }
 144  
 145  	protected function getGroupName() {
 146          return 'pages';
 147      }
 148  }


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