Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
76 / 76 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
1 / 1 |
| PageUpdaterFactory | |
100.00% |
76 / 76 |
|
100.00% |
4 / 4 |
4 | |
100.00% |
1 / 1 |
| __construct | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
1 | |||
| newPageUpdater | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
1 | |||
| newPageUpdaterForDerivedPageDataUpdater | |
100.00% |
25 / 25 |
|
100.00% |
1 / 1 |
1 | |||
| newDerivedPageDataUpdater | |
100.00% |
24 / 24 |
|
100.00% |
1 / 1 |
1 | |||
| 1 | <?php |
| 2 | /** |
| 3 | * @license GPL-2.0-or-later |
| 4 | * @file |
| 5 | */ |
| 6 | |
| 7 | namespace MediaWiki\Storage; |
| 8 | |
| 9 | use MediaWiki\ChangeTags\ChangeTagsStore; |
| 10 | use MediaWiki\Config\ServiceOptions; |
| 11 | use MediaWiki\Content\IContentHandlerFactory; |
| 12 | use MediaWiki\Content\Transform\ContentTransformer; |
| 13 | use MediaWiki\DomainEvent\DomainEventDispatcher; |
| 14 | use MediaWiki\HookContainer\HookContainer; |
| 15 | use MediaWiki\JobQueue\JobQueueGroup; |
| 16 | use MediaWiki\Language\Language; |
| 17 | use MediaWiki\MainConfigNames; |
| 18 | use MediaWiki\Page\PageIdentity; |
| 19 | use MediaWiki\Page\WikiPageFactory; |
| 20 | use MediaWiki\Parser\ParserCache; |
| 21 | use MediaWiki\Revision\RevisionRenderer; |
| 22 | use MediaWiki\Revision\RevisionStore; |
| 23 | use MediaWiki\Revision\SlotRoleRegistry; |
| 24 | use MediaWiki\Title\TitleFormatter; |
| 25 | use MediaWiki\User\UserGroupManager; |
| 26 | use MediaWiki\User\UserIdentity; |
| 27 | use Psr\Log\LoggerInterface; |
| 28 | use Wikimedia\ObjectCache\WANObjectCache; |
| 29 | use Wikimedia\Rdbms\ILBFactory; |
| 30 | |
| 31 | /** |
| 32 | * A factory for PageUpdater and DerivedPageDataUpdater instances. |
| 33 | * |
| 34 | * @since 1.37 |
| 35 | * @ingroup Page |
| 36 | */ |
| 37 | class PageUpdaterFactory { |
| 38 | |
| 39 | /** |
| 40 | * Options that have to be present in the ServiceOptions object passed to the constructor. |
| 41 | * @note must include PageUpdater::CONSTRUCTOR_OPTIONS |
| 42 | * @internal |
| 43 | */ |
| 44 | public const CONSTRUCTOR_OPTIONS = [ |
| 45 | MainConfigNames::ArticleCountMethod, |
| 46 | MainConfigNames::RCWatchCategoryMembership, |
| 47 | MainConfigNames::UseAutomaticEditSummaries, |
| 48 | MainConfigNames::ManualRevertSearchRadius, |
| 49 | MainConfigNames::UseRCPatrol, |
| 50 | MainConfigNames::ParsoidCacheConfig, |
| 51 | MainConfigNames::PageCreationLog, |
| 52 | ]; |
| 53 | |
| 54 | /** @var RevisionStore */ |
| 55 | private $revisionStore; |
| 56 | |
| 57 | /** @var RevisionRenderer */ |
| 58 | private $revisionRenderer; |
| 59 | |
| 60 | /** @var SlotRoleRegistry */ |
| 61 | private $slotRoleRegistry; |
| 62 | |
| 63 | /** @var ParserCache */ |
| 64 | private $parserCache; |
| 65 | |
| 66 | /** @var JobQueueGroup */ |
| 67 | private $jobQueueGroup; |
| 68 | |
| 69 | /** @var Language */ |
| 70 | private $contLang; |
| 71 | |
| 72 | /** @var ILBFactory */ |
| 73 | private $loadbalancerFactory; |
| 74 | |
| 75 | /** @var IContentHandlerFactory */ |
| 76 | private $contentHandlerFactory; |
| 77 | |
| 78 | /** @var DomainEventDispatcher */ |
| 79 | private $eventDispatcher; |
| 80 | |
| 81 | /** @var HookContainer */ |
| 82 | private $hookContainer; |
| 83 | |
| 84 | /** @var EditResultCache */ |
| 85 | private $editResultCache; |
| 86 | |
| 87 | /** @var LoggerInterface */ |
| 88 | private $logger; |
| 89 | |
| 90 | /** @var ServiceOptions */ |
| 91 | private $options; |
| 92 | |
| 93 | /** @var UserGroupManager */ |
| 94 | private $userGroupManager; |
| 95 | |
| 96 | /** @var TitleFormatter */ |
| 97 | private $titleFormatter; |
| 98 | |
| 99 | /** @var ContentTransformer */ |
| 100 | private $contentTransformer; |
| 101 | |
| 102 | /** @var PageEditStash */ |
| 103 | private $pageEditStash; |
| 104 | |
| 105 | /** @var WANObjectCache */ |
| 106 | private $mainWANObjectCache; |
| 107 | |
| 108 | /** @var WikiPageFactory */ |
| 109 | private $wikiPageFactory; |
| 110 | |
| 111 | /** @var string[] */ |
| 112 | private $softwareTags; |
| 113 | |
| 114 | private ChangeTagsStore $changeTagsStore; |
| 115 | |
| 116 | /** |
| 117 | * @param RevisionStore $revisionStore |
| 118 | * @param RevisionRenderer $revisionRenderer |
| 119 | * @param SlotRoleRegistry $slotRoleRegistry |
| 120 | * @param ParserCache $parserCache |
| 121 | * @param JobQueueGroup $jobQueueGroup |
| 122 | * @param Language $contLang |
| 123 | * @param ILBFactory $loadbalancerFactory |
| 124 | * @param IContentHandlerFactory $contentHandlerFactory |
| 125 | * @param DomainEventDispatcher $eventDispatcher |
| 126 | * @param HookContainer $hookContainer |
| 127 | * @param EditResultCache $editResultCache |
| 128 | * @param LoggerInterface $logger |
| 129 | * @param ServiceOptions $options |
| 130 | * @param UserGroupManager $userGroupManager |
| 131 | * @param TitleFormatter $titleFormatter |
| 132 | * @param ContentTransformer $contentTransformer |
| 133 | * @param PageEditStash $pageEditStash |
| 134 | * @param WANObjectCache $mainWANObjectCache |
| 135 | * @param WikiPageFactory $wikiPageFactory |
| 136 | * @param ChangeTagsStore $changeTagsStore |
| 137 | * @param string[] $softwareTags |
| 138 | */ |
| 139 | public function __construct( |
| 140 | RevisionStore $revisionStore, |
| 141 | RevisionRenderer $revisionRenderer, |
| 142 | SlotRoleRegistry $slotRoleRegistry, |
| 143 | ParserCache $parserCache, |
| 144 | JobQueueGroup $jobQueueGroup, |
| 145 | Language $contLang, |
| 146 | ILBFactory $loadbalancerFactory, |
| 147 | IContentHandlerFactory $contentHandlerFactory, |
| 148 | DomainEventDispatcher $eventDispatcher, |
| 149 | HookContainer $hookContainer, |
| 150 | EditResultCache $editResultCache, |
| 151 | LoggerInterface $logger, |
| 152 | ServiceOptions $options, |
| 153 | UserGroupManager $userGroupManager, |
| 154 | TitleFormatter $titleFormatter, |
| 155 | ContentTransformer $contentTransformer, |
| 156 | PageEditStash $pageEditStash, |
| 157 | WANObjectCache $mainWANObjectCache, |
| 158 | WikiPageFactory $wikiPageFactory, |
| 159 | ChangeTagsStore $changeTagsStore, |
| 160 | array $softwareTags |
| 161 | ) { |
| 162 | $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); |
| 163 | |
| 164 | $this->revisionStore = $revisionStore; |
| 165 | $this->revisionRenderer = $revisionRenderer; |
| 166 | $this->slotRoleRegistry = $slotRoleRegistry; |
| 167 | $this->parserCache = $parserCache; |
| 168 | $this->jobQueueGroup = $jobQueueGroup; |
| 169 | $this->contLang = $contLang; |
| 170 | $this->loadbalancerFactory = $loadbalancerFactory; |
| 171 | $this->contentHandlerFactory = $contentHandlerFactory; |
| 172 | $this->eventDispatcher = $eventDispatcher; |
| 173 | $this->hookContainer = $hookContainer; |
| 174 | $this->editResultCache = $editResultCache; |
| 175 | $this->logger = $logger; |
| 176 | $this->options = $options; |
| 177 | $this->userGroupManager = $userGroupManager; |
| 178 | $this->titleFormatter = $titleFormatter; |
| 179 | $this->contentTransformer = $contentTransformer; |
| 180 | $this->pageEditStash = $pageEditStash; |
| 181 | $this->mainWANObjectCache = $mainWANObjectCache; |
| 182 | $this->softwareTags = $softwareTags; |
| 183 | $this->wikiPageFactory = $wikiPageFactory; |
| 184 | $this->changeTagsStore = $changeTagsStore; |
| 185 | } |
| 186 | |
| 187 | /** |
| 188 | * Return a PageUpdater for building an update to a page. |
| 189 | * |
| 190 | * @internal For now, most code should keep using WikiPage::newPageUpdater() instead. |
| 191 | * @note We can only start using this method everywhere when WikiPage::prepareContentForEdit() |
| 192 | * and WikiPage::getCurrentUpdate() have been removed. For now, the WikiPage instance is |
| 193 | * used to make the state of an ongoing edit available to hook handlers. |
| 194 | * |
| 195 | * @param PageIdentity $page |
| 196 | * @param UserIdentity $user |
| 197 | * |
| 198 | * @return PageUpdater |
| 199 | * @since 1.37 |
| 200 | */ |
| 201 | public function newPageUpdater( |
| 202 | PageIdentity $page, |
| 203 | UserIdentity $user |
| 204 | ): PageUpdater { |
| 205 | return $this->newPageUpdaterForDerivedPageDataUpdater( |
| 206 | $page, |
| 207 | $user, |
| 208 | $this->newDerivedPageDataUpdater( $page ) |
| 209 | ); |
| 210 | } |
| 211 | |
| 212 | /** |
| 213 | * Return a PageUpdater for building an update to a page, reusing the state of |
| 214 | * an existing DerivedPageDataUpdater. |
| 215 | * |
| 216 | * @param PageIdentity $page |
| 217 | * @param UserIdentity $user |
| 218 | * @param DerivedPageDataUpdater $derivedPageDataUpdater |
| 219 | * |
| 220 | * @return PageUpdater |
| 221 | * @internal needed by WikiPage to back the WikiPage::newPageUpdater method. |
| 222 | * |
| 223 | * @since 1.37 |
| 224 | */ |
| 225 | public function newPageUpdaterForDerivedPageDataUpdater( |
| 226 | PageIdentity $page, |
| 227 | UserIdentity $user, |
| 228 | DerivedPageDataUpdater $derivedPageDataUpdater |
| 229 | ): PageUpdater { |
| 230 | $pageUpdater = new PageUpdater( |
| 231 | $user, |
| 232 | $page, |
| 233 | $derivedPageDataUpdater, |
| 234 | $this->loadbalancerFactory, |
| 235 | $this->revisionStore, |
| 236 | $this->slotRoleRegistry, |
| 237 | $this->contentHandlerFactory, |
| 238 | $this->hookContainer, |
| 239 | $this->userGroupManager, |
| 240 | $this->titleFormatter, |
| 241 | new ServiceOptions( |
| 242 | PageUpdater::CONSTRUCTOR_OPTIONS, |
| 243 | $this->options |
| 244 | ), |
| 245 | $this->softwareTags, |
| 246 | $this->logger, |
| 247 | $this->wikiPageFactory |
| 248 | ); |
| 249 | |
| 250 | $pageUpdater->setUsePageCreationLog( |
| 251 | $this->options->get( MainConfigNames::PageCreationLog ) ); |
| 252 | |
| 253 | $pageUpdater->setUseAutomaticEditSummaries( |
| 254 | $this->options->get( MainConfigNames::UseAutomaticEditSummaries ) |
| 255 | ); |
| 256 | |
| 257 | return $pageUpdater; |
| 258 | } |
| 259 | |
| 260 | /** |
| 261 | * @param PageIdentity $page |
| 262 | * |
| 263 | * @return DerivedPageDataUpdater |
| 264 | * @internal Needed by WikiPage to back the deprecated prepareContentForEdit() method. |
| 265 | * @note Avoid direct usage of DerivedPageDataUpdater. |
| 266 | * @see docs/pageupdater.md for more information. |
| 267 | */ |
| 268 | public function newDerivedPageDataUpdater( PageIdentity $page ): DerivedPageDataUpdater { |
| 269 | $derivedDataUpdater = new DerivedPageDataUpdater( |
| 270 | $this->options, |
| 271 | $page, |
| 272 | $this->revisionStore, |
| 273 | $this->revisionRenderer, |
| 274 | $this->slotRoleRegistry, |
| 275 | $this->parserCache, |
| 276 | $this->jobQueueGroup, |
| 277 | $this->contLang, |
| 278 | $this->loadbalancerFactory, |
| 279 | $this->contentHandlerFactory, |
| 280 | $this->hookContainer, |
| 281 | $this->eventDispatcher, |
| 282 | $this->editResultCache, |
| 283 | $this->contentTransformer, |
| 284 | $this->pageEditStash, |
| 285 | $this->mainWANObjectCache, |
| 286 | $this->wikiPageFactory, |
| 287 | $this->changeTagsStore, |
| 288 | ); |
| 289 | |
| 290 | $derivedDataUpdater->setLogger( $this->logger ); |
| 291 | $derivedDataUpdater->setArticleCountMethod( |
| 292 | $this->options->get( MainConfigNames::ArticleCountMethod ) ); |
| 293 | |
| 294 | return $derivedDataUpdater; |
| 295 | } |
| 296 | |
| 297 | } |