23 public static function newJob(
27 bool $isTranslationPage,
28 UserIdentity $performer,
32 'translation' => $isTranslationPage,
34 'bundleType' => $bundleType,
35 'performer' => $performer->getName(),
39 return new self( $target, $params );
42 public function __construct( Title $title, array $params = [] ) {
43 parent::__construct(
'DeleteTranslatableBundleJob', $title, $params );
46 public function run() {
47 $title = $this->title;
48 $fuzzyBot = FuzzyBot::getUser();
49 $summary = $this->getSummary();
50 $base = $this->getBase();
51 $performer = $this->getPerformer();
52 $reason = $this->getReason();
53 $mwInstance = MediaWikiServices::getInstance();
56 Hooks::$allowTargetEdit =
true;
59 Hooks::$isDeleteTranslatableBundleJobRunning =
true;
61 $wikipage = $mwInstance->getWikiPageFactory()->newFromTitle( $title );
62 $deletePage = $mwInstance->getDeletePageFactory()->newDeletePage( $wikipage, $fuzzyBot );
63 $status = $deletePage->setSuppress(
false )
64 ->forceImmediate(
true )
65 ->deleteUnsafe(
"$summary: $reason" );
67 $bundleFactory = Services::getInstance()->getTranslatableBundleFactory();
69 $bundle = $bundleFactory->getBundleFromClass( Title::newFromText( $base ), $this->getBundleType() );
70 $logger = $bundleFactory->getPageDeleteLogger( $bundle );
72 if ( !$status->isGood() ) {
73 if ( $this->isTranslation() ) {
74 $logger->logPageError( $performer, $reason, $status );
76 $logger->logBundleError( $performer, $reason, $status );
80 Hooks::$allowTargetEdit =
false;
81 Hooks::$isDeleteTranslatableBundleJobRunning =
false;
83 $cache = $mwInstance->getMainObjectStash();
84 $pageKey = $cache->makeKey(
'pt-base', $base );
85 $pages = (array)$cache->get( $pageKey );
86 $lastitem = array_pop( $pages );
87 if ( $title->getPrefixedText() === $lastitem ) {
88 $cache->delete( $pageKey );
90 if ( $this->isTranslation() ) {
91 $logger->logPageSuccess( $performer, $reason );
93 $logger->logBundleSuccess( $performer, $reason );
96 $title->invalidateCache();
102 public function getSummary():
string {
103 $base = $this->getBase();
104 if ( $this->isTranslation() ) {
105 $msg = wfMessage(
'pt-deletepage-lang-logreason', $base )->inContentLanguage()->text();
107 $msg = wfMessage(
'pt-deletepage-full-logreason', $base )->inContentLanguage()->text();
113 public function getReason():
string {
114 return $this->params[
'reason'];
117 private function isTranslation():
bool {
118 return $this->params[
'translation'];
121 public function getPerformer(): User {
122 $userFactory = MediaWikiServices::getInstance()->getUserFactory();
123 return $userFactory->newFromName( $this->params[
'performer'] );
126 public function getBase():
string {
127 return $this->params[
'base'];
130 private function getBundleType():
string {
132 return $this->params[
'bundleType'] ?? TranslatablePage::class;