protected function getFormFields()
 {
     $fields = [];
     if ($this->par !== null) {
         $this->botPassword = BotPassword::newFromCentralId($this->userId, $this->par);
         if (!$this->botPassword) {
             $this->botPassword = BotPassword::newUnsaved(['centralId' => $this->userId, 'appId' => $this->par]);
         }
         $sep = BotPassword::getSeparator();
         $fields[] = ['type' => 'info', 'label-message' => 'username', 'default' => $this->getUser()->getName() . $sep . $this->par];
         if ($this->botPassword->isSaved()) {
             $fields['resetPassword'] = ['type' => 'check', 'label-message' => 'botpasswords-label-resetpassword'];
         }
         $lang = $this->getLanguage();
         $showGrants = MWGrants::getValidGrants();
         $fields['grants'] = ['type' => 'checkmatrix', 'label-message' => 'botpasswords-label-grants', 'help-message' => 'botpasswords-help-grants', 'columns' => [$this->msg('botpasswords-label-grants-column')->escaped() => 'grant'], 'rows' => array_combine(array_map('MWGrants::getGrantsLink', $showGrants), $showGrants), 'default' => array_map(function ($g) {
             return "grant-{$g}";
         }, $this->botPassword->getGrants()), 'tooltips' => array_combine(array_map('MWGrants::getGrantsLink', $showGrants), array_map(function ($rights) use($lang) {
             return $lang->semicolonList(array_map('User::getRightDescription', $rights));
         }, array_intersect_key(MWGrants::getRightsByGrant(), array_flip($showGrants)))), 'force-options-on' => array_map(function ($g) {
             return "grant-{$g}";
         }, MWGrants::getHiddenGrants())];
         $fields['restrictions'] = ['type' => 'textarea', 'label-message' => 'botpasswords-label-restrictions', 'required' => true, 'default' => $this->botPassword->getRestrictions()->toJson(true), 'rows' => 5, 'validation-callback' => function ($v) {
             try {
                 MWRestrictions::newFromJson($v);
                 return true;
             } catch (InvalidArgumentException $ex) {
                 return $ex->getMessage();
             }
         }];
     } else {
         $dbr = BotPassword::getDB(DB_SLAVE);
         $res = $dbr->select('bot_passwords', ['bp_app_id'], ['bp_user' => $this->userId], __METHOD__);
         foreach ($res as $row) {
             $fields[] = ['section' => 'existing', 'type' => 'info', 'raw' => true, 'default' => Linker::link($this->getPageTitle($row->bp_app_id), htmlspecialchars($row->bp_app_id), [], [], ['known'])];
         }
         $fields['appId'] = ['section' => 'createnew', 'type' => 'textwithbutton', 'label-message' => 'botpasswords-label-appid', 'buttondefault' => $this->msg('botpasswords-label-create')->text(), 'buttonflags' => ['progressive', 'primary'], 'required' => true, 'size' => BotPassword::APPID_MAXLENGTH, 'maxlength' => BotPassword::APPID_MAXLENGTH, 'validation-callback' => function ($v) {
             $v = trim($v);
             return $v !== '' && strlen($v) <= BotPassword::APPID_MAXLENGTH;
         }];
         $fields[] = ['type' => 'hidden', 'default' => 'new', 'name' => 'op'];
     }
     return $fields;
 }
Beispiel #2
0
 /**
  * @covers MWGrants::getValidGrants
  */
 public function testGetValidGrants()
 {
     $this->assertSame(['hidden1', 'hidden2', 'normal', 'normal2', 'admin'], MWGrants::getValidGrants());
 }