/** * @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>'); }