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();