public function execute() { $users = 10; // For number of translations, limited to [0,20] $mean = 15; $stddev = 20; $stash = new TranslationStashStorage(wfGetDB(DB_MASTER)); $languages = array_keys(Language::fetchLanguageNames()); for ($i = 0; $i < $users; $i++) { $username = '******' . wfRandomString(6); $password = wfRandomString(12); $email = "{$username}.{$password}@blackhole.io"; $user = TranslateSandbox::addUser($username, $password, $email); $language = $languages[rand(0, count($languages) - 1)]; $count = wfGaussMs($mean, $stddev); $count = min(20, $count); $count = max(0, $count); for ($j = 0; $j < $count; $j++) { $title = Title::makeTitle(NS_MEDIAWIKI, wfRandomString(24) . '/' . $language); $value = array('Pupu söi'); for ($k = rand(0, 20); $k > 0; $k--) { $value[] = wfRandomString(rand(1, 28)); } $value = implode("\n", $value); $translation = new StashedTranslation($user, $title, $value); $stash->addTranslation($translation); } } }
protected function doCreate() { $params = $this->extractRequestParams(); // Do validations foreach (explode('|', 'username|password|email') as $field) { if (!isset($params[$field])) { $this->dieUsage("Missing parameter {$field}", 'missingparam'); } } $username = $params['username']; if (User::getCanonicalName($username, 'creatable') === false) { $this->dieUsage("User name is not acceptable", 'invalidusername'); } $user = User::newFromName($username); if ($user->getID() !== 0) { $this->dieUsage("User name is in use", 'nonfreeusername'); } $password = $params['password']; if (!$user->isValidPassword($password)) { $this->dieUsage("Password is not acceptable", 'invalidpassword'); } $email = $params['email']; if (!Sanitizer::validateEmail($email)) { $this->dieUsage("Email is not acceptable", 'invalidemail'); } $user = TranslateSandbox::addUser($username, $email, $password); $output = array('user' => array('name' => $user->getName(), 'id' => $user->getId())); $user->setOption('language', $this->getContext()->getLanguage()->getCode()); $user->saveSettings(); $this->getResult()->addValue(null, $this->getModuleName(), $output); }
public function testPermissions() { $user = TranslateSandbox::addUser('Test user7', '*****@*****.**', 'test password'); $title = Title::makeTitle(NS_USER_TALK, $user->getName()); $this->assertFalse($title->userCan('edit', $user), 'Sandboxed users cannot edit their own talk page'); TranslateSandbox::promoteUser($user); $this->assertTrue($title->userCan('edit', $user), 'Promoted users can edit their own talk page'); }
/** * Add users to the sandbox or delete them to facilitate browsers tests. * Use with caution! */ public function prepareForTests() { global $wgTranslateTestUsers; $user = $this->getUser(); $request = $this->getRequest(); if (!in_array($user->getName(), $wgTranslateTestUsers, true)) { return; } if ($request->getVal('integrationtesting') === 'populate') { // Empty all the users, even if they were created manually // to ensure the number of users is what the tests expect $this->emptySandbox(); $textUsernamePrefixes = array('Pupu', 'Orava'); $testLanguages = array('fi', 'uk', 'nl', 'he', 'bn'); $testLanguagesCount = count($testLanguages); foreach ($textUsernamePrefixes as $prefix) { for ($i = 0; $i < $testLanguagesCount; $i++) { $name = "{$prefix}{$i}"; // Get rid of users, even if promoted during tests $userToDelete = User::newFromName($name, false); $this->deleteUserPage($userToDelete); TranslateSandbox::deleteUser($userToDelete, 'force'); $user = TranslateSandbox::addUser($name, "{$name}@blackhole.io", 'porkkana'); $user->setOption('translate-sandbox', FormatJson::encode(array('languages' => array($testLanguages[$i]), 'comment' => ''))); $reminders = array(); for ($reminderIndex = 0; $reminderIndex < $i; $reminderIndex++) { $reminders[] = wfTimestamp() - $reminderIndex * $i * 10000; } $user->setOption('translate-sandbox-reminders', implode('|', $reminders)); $user->saveSettings(); for ($j = 0; $j < $i; $j++) { $title = Title::makeTitle(NS_MEDIAWIKI, wfRandomString(24) . '/' . $testLanguages[$i]); $translation = 'plop'; $stashedTranslation = new StashedTranslation($user, $title, $translation); $this->stash->addTranslation($stashedTranslation); } } } // Another account for testing a translator to multiple languages $oldPolyglotUser = User::newFromName('Kissa', false); $this->deleteUserPage($oldPolyglotUser); TranslateSandbox::deleteUser($oldPolyglotUser, 'force'); $polyglotUser = TranslateSandbox::addUser('Kissa', '*****@*****.**', 'porkkana'); $polyglotUser->setOption('translate-sandbox', FormatJson::encode(array('languages' => $testLanguages, 'comment' => "I know some languages, and I'm a developer."))); $polyglotUser->saveSettings(); for ($polyglotLang = 0; $polyglotLang < $testLanguagesCount; $polyglotLang++) { $title = Title::makeTitle(NS_MEDIAWIKI, wfRandomString(24) . '/' . $testLanguages[$polyglotLang]); $translation = "plop in {$testLanguages[$polyglotLang]}"; $stashedTranslation = new StashedTranslation($polyglotUser, $title, $translation); $this->stash->addTranslation($stashedTranslation); } } elseif ($request->getVal('integrationtesting') === 'empty') { $this->emptySandbox(); } }