protected function setUp() { parent::setUp(); global $wgHooks; $this->setMwGlobals(array('wgHooks' => $wgHooks, 'wgGroupPermissions' => array(), 'wgTranslateMessageNamespaces' => array(NS_MEDIAWIKI))); $wgHooks['TranslatePostInitGroups'] = array(array($this, 'getTestGroups')); $mg = MessageGroups::singleton(); $mg->setCache(wfGetCache('hash')); $mg->recache(); MessageIndex::setInstance(new HashMessageIndex()); MessageIndex::singleton()->rebuild(); }
public function setUp() { parent::setUp(); global $wgHooks; $this->setMwGlobals(array('wgHooks' => $wgHooks, 'wgTranslateTranslationServices' => array(), 'wgTranslateDelayedMessageIndexRebuild' => false)); $wgHooks['TranslatePostInitGroups'] = array(); $mg = MessageGroups::singleton(); $mg->setCache(wfGetCache('hash')); $mg->recache(); MessageIndex::setInstance(new HashMessageIndex()); MessageIndex::singleton()->rebuild(); }
protected function setUp() { parent::setUp(); global $wgHooks; $this->setMwGlobals(array('wgHooks' => $wgHooks, 'wgTranslateTranslationServices' => array(), 'wgTranslateCacheDirectory' => $this->getNewTempDirectory())); $wgHooks['TranslatePostInitGroups'] = array(); $mg = MessageGroups::singleton(); $mg->setCache(wfGetCache('hash')); $mg->recache(); MessageIndex::setInstance(new HashMessageIndex()); MessageIndex::singleton()->rebuild(); }
protected function setUp() { parent::setUp(); global $wgHooks; $this->setMwGlobals(array('wgHooks' => $wgHooks, 'wgEnablePageTranslation' => true, 'wgTranslateTranslationServices' => array())); TranslateHooks::setupTranslate(); $wgHooks['TranslatePostInitGroups'] = array('MessageGroups::getTranslatablePages'); $mg = MessageGroups::singleton(); $mg->setCache(wfGetCache('hash')); $mg->recache(); MessageIndex::setInstance(new HashMessageIndex()); MessageIndex::singleton()->rebuild(); }
protected function setUp() { parent::setUp(); $conf = array(__DIR__ . '/data/ParentGroups.yaml'); global $wgHooks; $this->setMwGlobals(array('wgHooks' => $wgHooks, 'wgTranslateGroupFiles' => $conf, 'wgTranslateTranslationServices' => array())); $wgHooks['TranslatePostInitGroups'] = array('MessageGroups::getConfiguredGroups'); $mg = MessageGroups::singleton(); $mg->setCache(wfGetCache('hash')); $mg->recache(); MessageIndex::setInstance(new HashMessageIndex()); MessageIndex::singleton()->rebuild(); }
/** * Returns the all the groups message belongs to. * @param int $namespace * @param string $key * @return string[] Possibly empty list of group ids. */ public static function messageKeyToGroups($namespace, $key) { $mi = MessageIndex::singleton()->retrieve(); $normkey = self::normaliseKey($namespace, $key); if (isset($mi[$normkey])) { return (array) $mi[$normkey]; } else { return array(); } }
function run() { MessageIndex::singleton()->rebuild(); }
public function execute() { MessageGroups::singleton()->recache(); MessageIndex::singleton()->rebuild(); }
function run() { MessageIndex::singleton()->rebuild(); return true; }
public function testSearchableTTMServer() { global $wgTranslateTestTTMServer; if (!$wgTranslateTestTTMServer) { $this->markTestSkipped('No test TTMServer available'); } $server = TTMServer::factory($wgTranslateTestTTMServer); $solarium = $server->getSolarium(); // Empty it $update = $solarium->createUpdate(); $update->addDeleteQuery('*:*'); $update->addCommit(); $solarium->update($update); // Check that it is empty indeed $select = $solarium->createSelect(); $select->setRows(0); $select->setQuery('*:*'); $result = $solarium->select($select); $this->assertEquals(0, $result->getNumFound()); // Add one definition $title = Title::newFromText('MediaWiki:one/en'); $page = WikiPage::factory($title); $content = ContentHandler::makeContent('1', $title); $page->doEditContent($content, __METHOD__); $select = $solarium->createSelect(); $select->setRows(1); $select->setQuery('*:*'); $result = $solarium->select($select); $this->assertEquals(1, $result->getNumFound()); $doc = null; foreach ($result as $doc) { // @todo FIXME Empty foreach statement. } $this->assertEquals(wfWikiId(), $doc->wiki); $this->assertEquals('en', $doc->language); $this->assertEquals('1', $doc->content); $this->assertEquals(array('ttmserver-test'), $doc->group); // Add one translation $title = Title::newFromText('MediaWiki:one/fi'); $page = WikiPage::factory($title); $content = ContentHandler::makeContent('yksi', $title); $page->doEditContent($content, __METHOD__); $select = $solarium->createSelect(); $select->setRows(1); $select->setQuery('language:fi'); $result = $solarium->select($select); $this->assertEquals(1, $result->getNumFound()); $doc = null; foreach ($result as $doc) { // @todo FIXME Empty foreach statement. } $this->assertEquals('yksi', $doc->content); $this->assertEquals(array('ttmserver-test'), $doc->group); // Update definition $title = Title::newFromText('MediaWiki:one/en'); $page = WikiPage::factory($title); $content = ContentHandler::makeContent('1-updated', $title); $page->doEditContent($content, __METHOD__); $select = $solarium->createSelect(); $select->setQuery('language:en'); $result = $solarium->select($select); $this->assertEquals(2, $result->getNumFound(), 'Old and new definition exists'); // Translation is fuzzied $title = Title::newFromText('MediaWiki:one/fi'); $page = WikiPage::factory($title); $content = ContentHandler::makeContent('!!FUZZY!!yksi', $title); $page->doEditContent($content, __METHOD__); $select = $solarium->createSelect(); $select->setQuery('language:fi'); $result = $solarium->select($select); $this->assertEquals(0, $result->getNumFound()); // Translation is udpated $title = Title::newFromText('MediaWiki:one/fi'); $page = WikiPage::factory($title); $content = ContentHandler::makeContent('yksi-päiv', $title); $page->doEditContent($content, __METHOD__); $select = $solarium->createSelect(); $select->setQuery('language:fi'); $result = $solarium->select($select); $this->assertEquals(1, $result->getNumFound()); $doc = null; foreach ($result as $doc) { // @todo FIXME Empty foreach statement. } $this->assertEquals('yksi-päiv', $doc->content); // And now the messages should be orphaned global $wgHooks; $wgHooks['TranslatePostInitGroups'] = array(); MessageGroups::singleton()->recache(); MessageIndex::singleton()->rebuild(); self::runJobs(); $select = $solarium->createSelect(); $select->setQuery('*:*'); $result = $solarium->select($select); $this->assertEquals(2, $result->getNumFound(), 'One definition and one translation exists'); foreach ($result as $doc) { $this->assertEquals(null, $doc->group, 'Messages are orphaned'); } // And message deletion $title = Title::newFromText('MediaWiki:one/fi'); $page = WikiPage::factory($title); $page->doDeleteArticle(__METHOD__); $select = $solarium->createSelect(); $select->setQuery('language:fi'); $result = $solarium->select($select); $this->assertEquals(0, $result->getNumFound()); }
public function getDefinitions() { global $wgTranslateSandboxSuggestions, $wgTranslateSandboxLimit; // This will contain the list of messages shown to the user $list = array(); // Ugly $store = new TranslationStashStorage(wfGetDB(DB_MASTER)); $user = RequestContext::getMain()->getUser(); $translations = $store->getTranslations($user); // Add messages the user has already translated first, so he // can go back and correct them. foreach ($translations as $translation) { $title = $translation->getTitle(); $handle = new MessageHandle($title); $index = $title->getNamespace() . ':' . $handle->getKey(); $list[$index] = ''; } // Always add the regular suggestions foreach ($wgTranslateSandboxSuggestions as $titleText) { $title = Title::newFromText($titleText); if (!$title) { wfWarn("Invalid title in \$wgTranslateSandboxSuggestions: {$titleText}"); continue; } $index = $title->getNamespace() . ':' . $handle->getKey(); // This index might already exist, but that is okay $list[$index] = ''; } // Message index of all known messages $mi = MessageIndex::singleton(); // Get some random keys $all = array_keys($mi->retrieve()); // In case there aren't any messages if ($all === array()) { return $list; } $min = 0; $max = count($all) - 1; // Indexes are zero-based // Get some message. Will be filtered to less below. for ($i = count($list); $i < 100; $i++) { $list[$all[rand($min, $max)]] = ''; } // Fetch definitions, slowly, one by one $count = 0; // Provide twice the number of messages than the limit // to have a buffer in case the user skips some messages $messagesToProvide = $wgTranslateSandboxLimit * 2; foreach ($list as $index => &$translation) { list($ns, $page) = explode(':', $index, 2); $title = Title::makeTitle($ns, "{$page}/{$this->language}"); $handle = new MessageHandle($title); if (MessageGroups::isTranslatableMessage($handle)) { // Modified by reference $translation = $this->getMessageContent($handle); if ($translation === null) { // Something is not in sync or badly broken. Handle gracefully. unset($list[$index]); wfWarn("No message definition for {$index} while preparing the sandbox"); continue; } } else { // This might include messages that the user has already translated // or messages given in $wgTranslateSandboxSuggestions or just dated // message index. unset($list[$index]); continue; } $count++; if ($count === $messagesToProvide) { break; } } // Remove the extra entries $list = array_slice($list, 0, $messagesToProvide); return $list; }
/** * Returns all message group ids this message belongs to. * The primary message group id is always the first one. * If the handle does not correspond to any message, the returned array * is empty. * @return string[] */ public function getGroupIds() { if ($this->groupIds === null) { $this->groupIds = MessageIndex::singleton()->getGroupIds($this); } return $this->groupIds; }
* * @author Niklas Laxstrom * @copyright Copyright © 2008-2011, Niklas Laxström * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later * @file */ require( dirname( __FILE__ ) . '/cli.inc' ); function showUsage() { STDERR( <<<EOT Message index creation command line script Usage: php createMessageIndex.php [options...] Options: --help Show this help text --quiet Only output errors EOT ); exit( 1 ); } if ( isset( $options['help'] ) ) { showUsage(); } MessageGroups::clearCache(); MessageIndex::singleton()->rebuild();