MediaWiki
REL1_24
|
00001 <?php 00031 class DeleteLogFormatter extends LogFormatter { 00032 protected function getMessageKey() { 00033 $key = parent::getMessageKey(); 00034 if ( in_array( $this->entry->getSubtype(), array( 'event', 'revision' ) ) ) { 00035 if ( count( $this->getMessageParameters() ) < 5 ) { 00036 return "$key-legacy"; 00037 } 00038 } 00039 00040 return $key; 00041 } 00042 00043 protected function getMessageParameters() { 00044 if ( isset( $this->parsedParametersDeleteLog ) ) { 00045 return $this->parsedParametersDeleteLog; 00046 } 00047 00048 $params = parent::getMessageParameters(); 00049 $subtype = $this->entry->getSubtype(); 00050 if ( in_array( $subtype, array( 'event', 'revision' ) ) ) { 00051 // $params[3] here is 'revision' or 'archive' for page revisions, 'oldimage' or 00052 // 'filearchive' for file versions, or a comma-separated list of log_ids for log 00053 // entries. $subtype here is 'revision' for page revisions and file 00054 // versions, or 'event' for log entries. 00055 if ( ( $subtype === 'event' && count( $params ) === 6 ) 00056 || ( $subtype === 'revision' && isset( $params[3] ) 00057 && ( $params[3] === 'revision' || $params[3] === 'oldimage' 00058 || $params[3] === 'archive' || $params[3] === 'filearchive' ) 00059 ) 00060 ) { 00061 $paramStart = $subtype === 'revision' ? 4 : 3; 00062 00063 $old = $this->parseBitField( $params[$paramStart + 1] ); 00064 $new = $this->parseBitField( $params[$paramStart + 2] ); 00065 list( $hid, $unhid, $extra ) = RevisionDeleter::getChanges( $new, $old ); 00066 $changes = array(); 00067 // messages used: revdelete-content-hid, revdelete-summary-hid, revdelete-uname-hid 00068 foreach ( $hid as $v ) { 00069 $changes[] = $this->msg( "$v-hid" )->plain(); 00070 } 00071 // messages used: revdelete-content-unhid, revdelete-summary-unhid, revdelete-uname-unhid 00072 foreach ( $unhid as $v ) { 00073 $changes[] = $this->msg( "$v-unhid" )->plain(); 00074 } 00075 foreach ( $extra as $v ) { 00076 $changes[] = $this->msg( $v )->plain(); 00077 } 00078 $changeText = $this->context->getLanguage()->listToText( $changes ); 00079 00080 $newParams = array_slice( $params, 0, 3 ); 00081 $newParams[3] = $changeText; 00082 $count = count( explode( ',', $params[$paramStart] ) ); 00083 $newParams[4] = $this->context->getLanguage()->formatNum( $count ); 00084 00085 $this->parsedParametersDeleteLog = $newParams; 00086 return $this->parsedParametersDeleteLog; 00087 } else { 00088 $this->parsedParametersDeleteLog = array_slice( $params, 0, 3 ); 00089 return $this->parsedParametersDeleteLog; 00090 } 00091 } 00092 00093 $this->parsedParametersDeleteLog = $params; 00094 return $this->parsedParametersDeleteLog; 00095 } 00096 00097 protected function parseBitField( $string ) { 00098 // Input is like ofield=2134 or just the number 00099 if ( strpos( $string, 'field=' ) === 1 ) { 00100 list( , $field ) = explode( '=', $string ); 00101 00102 return (int)$field; 00103 } else { 00104 return (int)$string; 00105 } 00106 } 00107 00108 public function getActionLinks() { 00109 $user = $this->context->getUser(); 00110 if ( !$user->isAllowed( 'deletedhistory' ) 00111 || $this->entry->isDeleted( LogPage::DELETED_ACTION ) 00112 ) { 00113 return ''; 00114 } 00115 00116 switch ( $this->entry->getSubtype() ) { 00117 case 'delete': // Show undelete link 00118 if ( $user->isAllowed( 'undelete' ) ) { 00119 $message = 'undeletelink'; 00120 } else { 00121 $message = 'undeleteviewlink'; 00122 } 00123 $revert = Linker::linkKnown( 00124 SpecialPage::getTitleFor( 'Undelete' ), 00125 $this->msg( $message )->escaped(), 00126 array(), 00127 array( 'target' => $this->entry->getTarget()->getPrefixedDBkey() ) 00128 ); 00129 00130 return $this->msg( 'parentheses' )->rawParams( $revert )->escaped(); 00131 00132 case 'revision': // If an edit was hidden from a page give a review link to the history 00133 $params = $this->extractParameters(); 00134 if ( !isset( $params[3] ) || !isset( $params[4] ) ) { 00135 return ''; 00136 } 00137 00138 // Different revision types use different URL params... 00139 $key = $params[3]; 00140 // This is a CSV of the IDs 00141 $ids = explode( ',', $params[4] ); 00142 00143 $links = array(); 00144 00145 // If there's only one item, we can show a diff link 00146 if ( count( $ids ) == 1 ) { 00147 // Live revision diffs... 00148 if ( $key == 'oldid' || $key == 'revision' ) { 00149 $links[] = Linker::linkKnown( 00150 $this->entry->getTarget(), 00151 $this->msg( 'diff' )->escaped(), 00152 array(), 00153 array( 00154 'diff' => intval( $ids[0] ), 00155 'unhide' => 1 00156 ) 00157 ); 00158 // Deleted revision diffs... 00159 } elseif ( $key == 'artimestamp' || $key == 'archive' ) { 00160 $links[] = Linker::linkKnown( 00161 SpecialPage::getTitleFor( 'Undelete' ), 00162 $this->msg( 'diff' )->escaped(), 00163 array(), 00164 array( 00165 'target' => $this->entry->getTarget()->getPrefixedDBkey(), 00166 'diff' => 'prev', 00167 'timestamp' => $ids[0] 00168 ) 00169 ); 00170 } 00171 } 00172 00173 // View/modify link... 00174 $links[] = Linker::linkKnown( 00175 SpecialPage::getTitleFor( 'Revisiondelete' ), 00176 $this->msg( 'revdel-restore' )->escaped(), 00177 array(), 00178 array( 00179 'target' => $this->entry->getTarget()->getPrefixedText(), 00180 'type' => $key, 00181 'ids' => implode( ',', $ids ), 00182 ) 00183 ); 00184 00185 return $this->msg( 'parentheses' )->rawParams( 00186 $this->context->getLanguage()->pipeList( $links ) )->escaped(); 00187 00188 case 'event': // Hidden log items, give review link 00189 $params = $this->extractParameters(); 00190 if ( !isset( $params[3] ) ) { 00191 return ''; 00192 } 00193 // This is a CSV of the IDs 00194 $query = $params[3]; 00195 // Link to each hidden object ID, $params[1] is the url param 00196 $revert = Linker::linkKnown( 00197 SpecialPage::getTitleFor( 'Revisiondelete' ), 00198 $this->msg( 'revdel-restore' )->escaped(), 00199 array(), 00200 array( 00201 'target' => $this->entry->getTarget()->getPrefixedText(), 00202 'type' => 'logging', 00203 'ids' => $query 00204 ) 00205 ); 00206 00207 return $this->msg( 'parentheses' )->rawParams( $revert )->escaped(); 00208 default: 00209 return ''; 00210 } 00211 } 00212 }