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); } } }
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'); }
/** * Checks that the user is in the sandbox. Also handles special overrides * mainly used for integration testing. * * @return bool */ protected function hasPermissionToUse() { global $wgTranslateTestUsers; $request = $this->getRequest(); $user = $this->getUser(); if (in_array($user->getName(), $wgTranslateTestUsers, true)) { if ($request->getVal('integrationtesting') === 'activatestash') { $user->addGroup('translate-sandboxed'); return true; } elseif ($request->getVal('integrationtesting') === 'deactivatestash') { $user->removeGroup('translate-sandboxed'); $this->stash->deleteTranslations($user); return false; } } if (!TranslateSandbox::isSandboxed($user)) { return false; } return true; }
/** * Whitelisting for certain API modules. See also enforcePermissions. * Hook: ApiCheckCanExecute */ public static function onApiCheckCanExecute(ApiBase $module, User $user, &$message) { $whitelist = array('ApiTranslationStash', 'ApiOptions'); if (TranslateSandbox::isSandboxed($user)) { $class = get_class($module); if ($module->isWriteMode() && !in_array($class, $whitelist, true)) { $message = 'writerequired'; return false; } } return true; }
protected function makeList() { $items = array(); $requests = array(); $users = TranslateSandbox::getUsers(); /** @var User $user */ foreach ($users as $user) { $reminders = $user->getOption('translate-sandbox-reminders'); $reminders = $reminders ? explode('|', $reminders) : array(); $remindersCount = count($reminders); if ($remindersCount) { $lastReminderTimestamp = new MWTimestamp(end($reminders)); $lastReminderAgo = htmlspecialchars($lastReminderTimestamp->getHumanTimestamp()); } else { $lastReminderAgo = ''; } $requests[] = array('username' => $user->getName(), 'email' => $user->getEmail(), 'gender' => $user->getOption('gender'), 'registrationdate' => $user->getRegistration(), 'translations' => count($this->stash->getTranslations($user)), 'languagepreferences' => FormatJson::decode($user->getOption('translate-sandbox')), 'userid' => $user->getId(), 'reminderscount' => $remindersCount, 'lastreminder' => $lastReminderAgo); } // Sort the requests based on translations and registration date usort($requests, array(__CLASS__, 'translatorRequestSort')); foreach ($requests as $request) { $items[] = $this->makeRequestItem($request); } $requestsList = implode("\n", $items); return <<<HTML <div class="row request-header"> \t<div class="four columns"> \t\t<button class="language-selector unselected"> \t\t\t{$this->msg("tsb-all-languages-button-label")->escaped()} \t\t</button> \t</div> \t<div class="five columns request-count"></div> \t<div class="three columns center"> \t\t<input class="request-selector-all" name="request" type="checkbox" /> \t</div> </div> <div class="requests-list"> \t{$requestsList} </div> HTML; }
protected function doRemind() { $params = $this->extractRequestParams(); foreach ($params['userid'] as $user) { $user = User::newFromId($user); try { TranslateSandbox::sendEmail($this->getUser(), $user, 'reminder'); } catch (MWException $e) { $this->dieUsage($e->getMessage(), 'invalidparam'); } } }