10use InvalidArgumentException;
58 parent::__construct( $context,
$page,
$ids, $this->lbFactory );
59 $this->hookRunner =
new HookRunner( $hookContainer );
74 return 'deleterevision';
79 return RevisionRecord::DELETED_TEXT;
86 ->getRevisionById(
$ids[0] );
88 if ( $revisionRecord ) {
89 return Title::newFromPageIdentity( $revisionRecord->getPage() );
99 $ids = array_map(
'intval', $this->ids );
100 $queryBuilder = $this->revisionStore->newSelectQueryBuilder( $db )
104 ->where( [
'rev_page' => $this->page->getId(),
'rev_id' =>
$ids ] )
105 ->orderBy(
'rev_id', \
Wikimedia\Rdbms\SelectQueryBuilder::SORT_DESC )
107 ->useIndex( [
'revision' =>
'PRIMARY' ] );
111 $live = $queryBuilder->caller( __METHOD__ )->fetchResultSet();
112 if ( $live->numRows() >= count(
$ids ) ) {
117 $queryBuilder = $this->revisionStore->newArchiveSelectQueryBuilder( $db )
119 ->where( [
'ar_rev_id' =>
$ids ] )
120 ->orderBy(
'ar_rev_id', \
Wikimedia\Rdbms\SelectQueryBuilder::SORT_DESC );
125 $archived = $queryBuilder->caller( __METHOD__ )->fetchResultSet();
127 if ( $archived->numRows() == 0 ) {
129 } elseif ( $live->numRows() == 0 ) {
134 foreach ( $live as $row ) {
135 $rows[$row->rev_id] = $row;
137 foreach ( $archived as $row ) {
138 $rows[$row->ar_rev_id] = $row;
147 if ( isset( $row->rev_id ) ) {
149 } elseif ( isset( $row->ar_rev_id ) ) {
153 throw new InvalidArgumentException(
'Invalid row type in RevDelRevisionList' );
159 if ( $this->currentRevId ===
null ) {
160 $dbw = $this->lbFactory->getPrimaryDatabase();
161 $this->currentRevId = $dbw->newSelectQueryBuilder()
162 ->select(
'page_latest' )
164 ->where( [
'page_namespace' => $this->page->getNamespace(),
'page_title' => $this->page->getDBkey() ] )
165 ->caller( __METHOD__ )->fetchField();
179 array $visibilityChangeMap,
186 $bitsUnset = RevisionRecord::SUPPRESSED_ALL &
187 ( ~ RevisionDeleter::extractBitfield( $bitPars, RevisionRecord::SUPPRESSED_ALL ) );
205 $this->eventDispatcher->dispatch(
212 $visibilityChangeMap,
224 Title::newFromPageIdentity( $this->page )->invalidateCache();
225 return Status::newGood();
230 $this->htmlCacheUpdater->purgeTitleUrls(
232 HTMLCacheUpdater::PURGE_INTENT_TXROUND_REFLECTED
235 $this->hookRunner->onArticleRevisionVisibilitySet(
236 Title::newFromPageIdentity( $this->page ),
241 return Status::newGood();
246class_alias( RevDelRevisionList::class,
'RevDelRevisionList' );
Domain event representing a change to the visibility attributes of one of the page's revisions.
Interface for objects which can provide a MediaWiki context on request.
Service for sending domain events to registered listeners.
getTimestamp()
Get the timestamp when the action was executed.
getComment()
Get the user provided comment.
Interface for objects (potentially) representing an editable wiki page.
Interface for a page that is (or could be, or used to be) an editable wiki page.