[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/rcfeed/ -> MachineReadableRCFeedFormatter.php (source)

   1  <?php
   2  
   3  /**
   4   * This program is free software; you can redistribute it and/or modify
   5   * it under the terms of the GNU General Public License as published by
   6   * the Free Software Foundation; either version 2 of the License, or
   7   * (at your option) any later version.
   8   *
   9   * This program is distributed in the hope that it will be useful,
  10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12   * GNU General Public License for more details.
  13   *
  14   * You should have received a copy of the GNU General Public License along
  15   * with this program; if not, write to the Free Software Foundation, Inc.,
  16   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17   * http://www.gnu.org/copyleft/gpl.html
  18   *
  19   * @file
  20   */
  21  
  22  /**
  23   * Abstract class so there can be multiple formatters outputting the same data
  24   *
  25   * @since 1.23
  26   */
  27  abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
  28  
  29      /**
  30       * Take the packet and return the formatted string
  31       * @param array $packet
  32       * @return string
  33       */
  34      abstract protected function formatArray( array $packet );
  35  
  36      /**
  37       * Generates a notification that can be easily interpreted by a machine.
  38       * @see RCFeedFormatter::getLine
  39       */
  40  	public function getLine( array $feed, RecentChange $rc, $actionComment ) {
  41          global $wgCanonicalServer, $wgServerName, $wgScriptPath;
  42  
  43          $packet = array(
  44              // Usually, RC ID is exposed only for patrolling purposes,
  45              // but there is no real reason not to expose it in other cases,
  46              // and I can see how this may be potentially useful for clients.
  47              'id' => $rc->getAttribute( 'rc_id' ),
  48              'type' => RecentChange::parseFromRCType( $rc->getAttribute( 'rc_type' ) ),
  49              'namespace' => $rc->getTitle()->getNamespace(),
  50              'title' => $rc->getTitle()->getPrefixedText(),
  51              'comment' => $rc->getAttribute( 'rc_comment' ),
  52              'timestamp' => (int)wfTimestamp( TS_UNIX, $rc->getAttribute( 'rc_timestamp' ) ),
  53              'user' => $rc->getAttribute( 'rc_user_text' ),
  54              'bot' => (bool)$rc->getAttribute( 'rc_bot' ),
  55          );
  56  
  57          if ( isset( $feed['channel'] ) ) {
  58              $packet['channel'] = $feed['channel'];
  59          }
  60  
  61          $type = $rc->getAttribute( 'rc_type' );
  62          if ( $type == RC_EDIT || $type == RC_NEW ) {
  63              global $wgUseRCPatrol, $wgUseNPPatrol;
  64  
  65              $packet['minor'] = (bool)$rc->getAttribute( 'rc_minor' );
  66              if ( $wgUseRCPatrol || ( $type == RC_NEW && $wgUseNPPatrol ) ) {
  67                  $packet['patrolled'] = (bool)$rc->getAttribute( 'rc_patrolled' );
  68              }
  69          }
  70  
  71          switch ( $type ) {
  72              case RC_EDIT:
  73                  $packet['length'] = array(
  74                      'old' => $rc->getAttribute( 'rc_old_len' ),
  75                      'new' => $rc->getAttribute( 'rc_new_len' )
  76                  );
  77                  $packet['revision'] = array(
  78                      'old' => $rc->getAttribute( 'rc_last_oldid' ),
  79                      'new' => $rc->getAttribute( 'rc_this_oldid' )
  80                  );
  81                  break;
  82  
  83              case RC_NEW:
  84                  $packet['length'] = array( 'old' => null, 'new' => $rc->getAttribute( 'rc_new_len' ) );
  85                  $packet['revision'] = array( 'old' => null, 'new' => $rc->getAttribute( 'rc_this_oldid' ) );
  86                  break;
  87  
  88              case RC_LOG:
  89                  $packet['log_id'] = $rc->getAttribute( 'rc_logid' );
  90                  $packet['log_type'] = $rc->getAttribute( 'rc_log_type' );
  91                  $packet['log_action'] = $rc->getAttribute( 'rc_log_action' );
  92                  if ( $rc->getAttribute( 'rc_params' ) ) {
  93                      wfSuppressWarnings();
  94                      $params = unserialize( $rc->getAttribute( 'rc_params' ) );
  95                      wfRestoreWarnings();
  96                      if (
  97                          // If it's an actual serialised false...
  98                          $rc->getAttribute( 'rc_params' ) == serialize( false ) ||
  99                          // Or if we did not get false back when trying to unserialise
 100                          $params !== false
 101                      ) {
 102                          // From ApiQueryLogEvents::addLogParams
 103                          $logParams = array();
 104                          // Keys like "4::paramname" can't be used for output so we change them to "paramname"
 105                          foreach ( $params as $key => $value ) {
 106                              if ( strpos( $key, ':' ) === false ) {
 107                                  $logParams[$key] = $value;
 108                                  continue;
 109                              }
 110                              $logParam = explode( ':', $key, 3 );
 111                              $logParams[$logParam[2]] = $value;
 112                          }
 113                          $packet['log_params'] = $logParams;
 114                      } else {
 115                          $packet['log_params'] = explode( "\n", $rc->getAttribute( 'rc_params' ) );
 116                      }
 117                  }
 118                  $packet['log_action_comment'] = $actionComment;
 119                  break;
 120          }
 121  
 122          $packet['server_url'] = $wgCanonicalServer;
 123          $packet['server_name'] = $wgServerName;
 124  
 125          $packet['server_script_path'] = $wgScriptPath ?: '/';
 126          $packet['wiki'] = wfWikiID();
 127  
 128          return $this->formatArray( $packet );
 129      }
 130  }


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