Ejemplo n.º 1
0
 /**
  * @param $id
  * @return mixed
  */
 function doSubmit($id)
 {
     global $wgContLang;
     $name = $wgContLang->ucfirst($this->getRequest()->getVal('wpName'));
     $type = $this->getRequest()->getVal('wpType');
     $wikis = array_unique(preg_split('/(\\s+|\\s*\\W\\s*)/', $this->getRequest()->getVal('wpWikis'), -1, PREG_SPLIT_NO_EMPTY));
     $reason = $this->getRequest()->getVal('wpReason');
     $set = WikiSet::newFromId($id);
     if (!Title::newFromText($name)) {
         $this->buildSetView($id, wfMsgHtml('centralauth-editset-badname'), $name, $type, $wikis, $reason);
         return;
     }
     if ((!$id || $set->getName() != $name) && WikiSet::newFromName($name)) {
         $this->buildSetView($id, wfMsgHtml('centralauth-editset-setexists'), $name, $type, $wikis, $reason);
         return;
     }
     if (!in_array($type, array(WikiSet::OPTIN, WikiSet::OPTOUT))) {
         $this->buildSetView($id, wfMsgHtml('centralauth-editset-badtype'), $name, $type, $wikis, $reason);
         return;
     }
     if (!$wikis) {
         $this->buildSetView($id, wfMsgHtml('centralauth-editset-nowikis'), $name, $type, $wikis, $reason);
         return;
     }
     $badwikis = array();
     $allwikis = CentralAuthUser::getWikiList();
     foreach ($wikis as $wiki) {
         if (!in_array($wiki, $allwikis)) {
             $badwikis[] = $wiki;
         }
     }
     if ($badwikis) {
         $this->buildSetView($id, wfMsgExt('centralauth-editset-badwikis', array('escapenoentities', 'parsemag'), implode(', ', $badwikis), count($badwikis)), $name, $type, $wikis, $reason);
         return;
     }
     if ($set) {
         $oldname = $set->getName();
         $oldtype = $set->getType();
         $oldwikis = $set->getWikisRaw();
     } else {
         $set = new WikiSet();
         $oldname = $oldtype = null;
         $oldwikis = array();
     }
     $set->setName($name);
     $set->setType($type);
     $set->setWikisRaw($wikis);
     $set->commit();
     // Now logging
     $log = new LogPage('gblrights');
     $title = SpecialPage::getTitleFor('WikiSets', $set->getID());
     if (!$oldname) {
         // New set
         $log->addEntry('newset', $title, $reason, array($name, $type, implode(', ', $wikis)));
     } else {
         if ($oldname != $name) {
             $log->addEntry('setrename', $title, $reason, array($name, $oldname));
         }
         if ($oldtype != $type) {
             $log->addEntry('setnewtype', $title, $reason, array($name, $oldtype, $type));
         }
         $added = implode(', ', array_diff($wikis, $oldwikis));
         $removed = implode(', ', array_diff($oldwikis, $wikis));
         if ($added || $removed) {
             $log->addEntry('setchange', $title, $reason, array($name, $added, $removed));
         }
     }
     $returnLink = Linker::makeKnownLinkObj($this->getTitle(), wfMsg('centralauth-editset-return'));
     $this->getOutput()->addHTML('<strong class="success">' . wfMsgHtml('centralauth-editset-success') . '</strong> <p>' . $returnLink . '</p>');
 }