This introduces PageUpdater to replace WikiPage::doEditContent, and DerivedPageDataUpdater, to replace WikiPage::doEditUpdates and WikiPage::prepareContentForEdit. See docs/pageupdater.txt for a description of their functionality. MCR migration notes: * The interface of PageUpdater is expected to remain mostly stable after this patch. Code that has been using WikiPage::doEditContent can be confidently migrated to using the new mechanism for revision creation. * This patch keeps the code inside PageUpdater largely aligned with the old code in WikiPage, to make review easier to to avoid mistakes. It is intended to be refactored further, moving application logic into stateless services. * DerivedPageDataUpdate is intended as a stepping stone for further refactoring. Its behavior is designed to be compatible with callback code that currently relies on WikiPage::prepareContentForEdit. Much of the code that currently lives in DerivedPageDataUpdate should be factored out into services, all behavior relevant to calling code should be exposed via narrow interfaces. Bug: T174038 Bug: T196653 Change-Id: If610c68f4912e89af616cdcac1d35a1be3946afa
109 lines
2.8 KiB
PHP
109 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Mutable version of RevisionSlots, for constructing a new revision.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
namespace MediaWiki\Storage;
|
|
|
|
use Content;
|
|
|
|
/**
|
|
* Mutable version of RevisionSlots, for constructing a new revision.
|
|
*
|
|
* @since 1.31
|
|
*/
|
|
class MutableRevisionSlots extends RevisionSlots {
|
|
|
|
/**
|
|
* Constructs a MutableRevisionSlots that inherits from the given
|
|
* list of slots.
|
|
*
|
|
* @param SlotRecord[] $slots
|
|
*
|
|
* @return MutableRevisionSlots
|
|
*/
|
|
public static function newFromParentRevisionSlots( array $slots ) {
|
|
$inherited = [];
|
|
foreach ( $slots as $slot ) {
|
|
$role = $slot->getRole();
|
|
$inherited[$role] = SlotRecord::newInherited( $slot );
|
|
}
|
|
|
|
return new MutableRevisionSlots( $inherited );
|
|
}
|
|
|
|
/**
|
|
* @param SlotRecord[] $slots An array of SlotRecords.
|
|
*/
|
|
public function __construct( array $slots = [] ) {
|
|
parent::__construct( $slots );
|
|
}
|
|
|
|
/**
|
|
* Sets the given slot.
|
|
* If a slot with the same role is already present, it is replaced.
|
|
*
|
|
* @param SlotRecord $slot
|
|
*/
|
|
public function setSlot( SlotRecord $slot ) {
|
|
if ( !is_array( $this->slots ) ) {
|
|
$this->getSlots(); // initialize $this->slots
|
|
}
|
|
|
|
$role = $slot->getRole();
|
|
$this->slots[$role] = $slot;
|
|
}
|
|
|
|
/**
|
|
* Sets the given slot to an inherited version of $slot.
|
|
* If a slot with the same role is already present, it is replaced.
|
|
*
|
|
* @param SlotRecord $slot
|
|
*/
|
|
public function inheritSlot( SlotRecord $slot ) {
|
|
$this->setSlot( SlotRecord::newInherited( $slot ) );
|
|
}
|
|
|
|
/**
|
|
* Sets the content for the slot with the given role.
|
|
* If a slot with the same role is already present, it is replaced.
|
|
*
|
|
* @param string $role
|
|
* @param Content $content
|
|
*/
|
|
public function setContent( $role, Content $content ) {
|
|
$slot = SlotRecord::newUnsaved( $role, $content );
|
|
$this->setSlot( $slot );
|
|
}
|
|
|
|
/**
|
|
* Remove the slot for the given role, discontinue the corresponding stream.
|
|
*
|
|
* @param string $role
|
|
*/
|
|
public function removeSlot( $role ) {
|
|
if ( !is_array( $this->slots ) ) {
|
|
$this->getSlots(); // initialize $this->slots
|
|
}
|
|
|
|
unset( $this->slots[$role] );
|
|
}
|
|
|
|
}
|