blob: 6150e3216c8297a6fa77ca94f022cf285d1ce946 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
<?php
/**
* Job for updating translation units and translation pages when
* a translatable page is marked for translation.
*
* @note MessageUpdateJobs from getTranslationUnitJobs() should be run
* before the TranslateRenderJobs are run so that the latest changes can
* take effect on the translation pages.
*
* @since 2016.03
*/
class TranslationsUpdateJob extends Job {
/**
* @param Title $title
* @param array $params
* @param int $id
*/
public function __construct( Title $title, array $params, $id = 0 ) {
parent::__construct( __CLASS__, $title, $params, $id );
$this->page = TranslatablePage::newFromTitle( $title );
$this->sections = $params['sections'];
}
public function run() {
// Units should be updated before the render jobs are run
$unitJobs = self::getTranslationUnitJobs( $this->page, $this->sections );
foreach ( $unitJobs as $job ) {
$job->run();
}
// Ensure fresh definitions for MessageIndex and stats
$this->page->getMessageGroup()->clearCaches();
MessageIndex::singleton()->rebuild();
// Refresh translations statistics
$id = $this->page->getMessageGroupId();
MessageGroupStats::clearGroup( $id );
MessageGroupStats::forGroup( $id );
$wikiPage = WikiPage::factory( $this->page->getTitle() );
$wikiPage->doPurge();
$renderJobs = self::getRenderJobs( $this->page );
JobQueueGroup::singleton()->push( $renderJobs );
return true;
}
/**
* Creates jobs needed to create or update all translation page definitions.
* @param TranslatablePage $page
* @param TPSection[] $sections
* @return Job[]
* @since 2013-01-28
*/
public static function getTranslationUnitJobs( TranslatablePage $page, array $sections ) {
$jobs = array();
$code = $page->getSourceLanguageCode();
$prefix = $page->getTitle()->getPrefixedText();
foreach ( $sections as $s ) {
$unit = $s->name;
$title = Title::makeTitle( NS_TRANSLATIONS, "$prefix/$unit/$code" );
$fuzzy = $s->type === 'changed';
$jobs[] = MessageUpdateJob::newJob( $title, $s->getTextWithVariables(), $fuzzy );
}
return $jobs;
}
/**
* Creates jobs needed to create or update all translation pages.
* @param TranslatablePage $page
* @return Job[]
* @since 2013-01-28
*/
public static function getRenderJobs( TranslatablePage $page ) {
$jobs = array();
$jobTitles = $page->getTranslationPages();
// $jobTitles may have the source language title already but duplicate TranslateRenderJobs
// are not executed so it's not run twice for the source language page present. This is
// added to ensure that we create the source language page from the very beginning.
$sourceLangTitle = $page->getTitle()->getSubpage( $page->getSourceLanguageCode() );
$jobTitles[] = $sourceLangTitle;
foreach ( $jobTitles as $t ) {
$jobs[] = TranslateRenderJob::newJob( $t );
}
return $jobs;
}
}
|