function execute() { global $wgOut, $wgUser, $wgRequest, $wgTitle; $gVar = $wgRequest->getText('var'); $gVal = $wgRequest->getVal('val', 'true'); $gLikeVal = $wgRequest->getVal('likeValue', 'true'); $gTypeVal = $wgRequest->getVal('searchType', 'bool'); $wgOut->SetPageTitle(wfMsg('whereisextension')); $wgOut->setRobotpolicy('noindex,nofollow'); if (!$wgUser->isAllowed('WhereIsExtension')) { $this->displayRestrictionError(); return; } $this->values = array(0 => array('true', true, '='), 1 => array('false', false, '='), 2 => array('not empty', '', '!=')); $tagName = $wgRequest->getVal('wikiSelectTagName', null); $tagWikis = $wgRequest->getArray('wikiSelected'); $tagResultInfo = ''; if ($wgRequest->wasPosted() && !empty($tagName) && count($tagWikis)) { $tagResultInfo = $this->tagSelectedWikis($tagName, $tagWikis); } $formData['vars'] = $this->getListOfVars($gVar == ''); $formData['vals'] = $this->values; $formData['selectedVal'] = $gVal; $formData['likeValue'] = $gLikeVal; $formData['searchType'] = $gTypeVal; $formData['selectedGroup'] = $gVar == '' ? 27 : ''; //default group: extensions (or all groups when looking for variable, rt#16953) $formData['groups'] = WikiFactory::getGroups(); $formData['actionURL'] = $wgTitle->getFullURL(); // by default, we don't need a paginator $sPaginator = ''; if (!empty($gVar)) { $formData['selectedVar'] = $gVar; // assume an empty result $formData['count'] = 0; $formData['wikis'] = array(); if (isset($this->values[$gVal][1]) && isset($this->values[$gVal][2])) { // check how many wikis meet the conditions $formData['count'] = WikiFactory::getCountOfWikisWithVar($gVar, $gTypeVal, $this->values[$gVal][2], $this->values[$gVal][1], $gLikeVal); // if there are any, get the list and create a Paginator if (0 < $formData['count']) { // determine the offset (from the requested page) $iPage = $wgRequest->getVal('page', 1); $iOffset = ($iPage - 1) * self::ITEMS_PER_PAGE; // the list $formData['wikis'] = WikiFactory::getListOfWikisWithVar($gVar, $gTypeVal, $this->values[$gVal][2], $this->values[$gVal][1], $gLikeVal, $iOffset, self::ITEMS_PER_PAGE); // the Paginator, if we need more than one page if (self::ITEMS_PER_PAGE < $formData['count']) { $oPaginator = Paginator::newFromArray(array_fill(0, $formData['count'], ''), self::ITEMS_PER_PAGE, 5); $oPaginator->setActivePage($iPage - 1); $sPager = $oPaginator->getBarHTML(sprintf('%s?var=%s&val=%s&likeValue=%s&searchType=%s&page=%%s', $wgTitle->getFullURL(), $gVar, $gVal, $gLikeVal, $gTypeVal)); } } } } $oTmpl = new EasyTemplate(dirname(__FILE__) . '/templates/'); $oTmpl->set_vars(array('formData' => $formData, 'tagResultInfo' => $tagResultInfo, 'sPager' => $sPager)); $wgOut->addHTML($oTmpl->render('list')); }
public function index() { global $wgOut, $wgUser, $wgRequest, $wgTitle; if (!$this->wg->User->isAllowed('batchvarnishpurgetool')) { $this->displayRestrictionError(); return false; // skip rendering } $formErrors = array(); $gUrl = $this->getVal('url', null); $gUrl = trim($gUrl, '/'); if (!$gUrl) { $formErrors['url'] = wfMsg('batchvarnishpurgetool-error-url'); } $gVar = $this->getVal('var', null); if (!$gVar) { $formErrors['var'] = wfMsg('batchvarnishpurgetool-error-var'); } $gVal = $this->getVal('val', 'true'); $gLikeVal = $this->getVal('likeValue', 'true'); $gTypeVal = $this->getVal('searchType', 'bool'); if (empty($formErrors)) { $purgedUrls = $this->purge($gUrl, $gVar, $gTypeVal, $gVal, $gLikeVal); $this->setVal('purgedUrls', $purgedUrls); } $formData['vars'] = $this->getListOfVars($gVar == ''); $formData['vals'] = self::$values; $formData['selectedVal'] = $gVal; $formData['likeValue'] = $gLikeVal; $formData['searchType'] = $gTypeVal; $formData['selectedGroup'] = $gVar == '' ? 27 : ''; //default group: extensions (or all groups when looking for variable, rt#16953) $formData['groups'] = WikiFactory::getGroups(); $formData['actionURL'] = $wgTitle->getFullURL(); $this->setVal('formData', $formData); $this->setVal('formErrors', $formErrors); }
/** * axWFactorySubmitChangeVariable * * Method for getting a change-variable form via AJAX request. * This is for changing the variable itself (discription, groups, etc.), NOT for * changing the values set on each wiki. * * @author Sean Colombo * @access public * * @return HTML code with variable-edit form */ function axWFactorySubmitChangeVariable() { global $wgRequest, $wgUser, $wgOut; if (!$wgUser->isAllowed('wikifactory')) { $wgOut->readOnlyPage(); #--- FIXME: later change to something reasonable return; } $cv_variable_id = $wgRequest->getVal("cv_variable_id"); $city_id = $wgRequest->getVal("wiki"); $cv_name = $wgRequest->getVal("cv_name"); $cv_variable_type = $wgRequest->getVal("cv_variable_type"); $cv_access_level = $wgRequest->getVal("cv_access_level"); $cv_variable_group = $wgRequest->getVal("cv_variable_group"); $cv_description = $wgRequest->getval("cv_description"); // Verify that the form is filled out, then add the variable if it is (display an error if it isn't). $errMsg = ""; if ($cv_name == "") { $errMsg .= "<li>Please enter a name for the variable.</li>\n"; } if (!in_array($cv_variable_type, WikiFactory::$types)) { $errMsg .= "<li>The value \"{$cv_variable_type}\" was not recognized as a valid WikiFactory::\$type.</li>\n"; } if (!in_array($cv_access_level, array_keys(WikiFactory::$levels))) { $errMsg .= "<li>The value \"{$cv_access_level}\" was not recognized as a valid key from WikiFactory::\$levels.</li>\n"; } if (!in_array($cv_variable_group, array_keys(WikiFactory::getGroups()))) { $errMsg .= "<li>The value \"{$cv_variable_group}\" was not recognized as a valid group_id from city_variables_groups table as returned by WikiFactory::getGroups()</li>\n"; } if ($cv_description == "") { $errMsg .= "<li>Please enter a description of what the variable is used for.</li>\n"; } if ($errMsg == "") { $success = WikiFactory::changeVariable($cv_variable_id, $cv_name, $cv_variable_type, $cv_access_level, $cv_variable_group, $cv_description); if (!$success) { $errMsg .= "<li>There was a database error while trying to change the variable. Please see the logs for more info.</li>"; } } $oTmpl = new EasyTemplate(dirname(__FILE__) . "/templates/"); $variable = WikiFactory::getVarById($cv_variable_id, $city_id); if ($errMsg != "") { $errHtml = ""; $errHtml .= "<div style='border:1px #f00 solid;background-color:#faa;padding:5px'>"; $errHtml .= "<strong>ERROR: Unable to update variable!</strong>"; $errHtml .= "<ul>\n{$errMsg}</ul>\n"; $errHtml .= "</div>"; $vars = array("error_message" => $errHtml, "title" => Title::makeTitle(NS_SPECIAL, 'WikiFactory'), "groups" => WikiFactory::getGroups(), "accesslevels" => WikiFactory::$levels, "types" => WikiFactory::$types, "cv_variable_id" => $cv_variable_id, "cv_name" => $cv_name, "cv_variable_type" => $cv_variable_type, "cv_access_level" => $cv_access_level, "cv_variable_group" => $cv_variable_group, "cv_description" => $cv_description); $oTmpl->set_vars($vars); return json_encode(array("div-body" => $oTmpl->render("change-variable"), "div-name" => "wk-variable-form")); } else { // Set it back to the normal form for just setting the variable's value for the current wiki. $oTmpl->set_vars(array("cityid" => $city_id, "variable" => WikiFactory::getVarById($cv_variable_id, $city_id), "groups" => WikiFactory::getGroups(), "accesslevels" => WikiFactory::$levels)); // Inject a success message above the form so that the user know the updates worked. $html = ""; $html .= "<div style='border:1px #0f0 solid;background-color:#afa;padding:5px'>"; $html .= "<strong>{$variable->cv_name}</strong> successfully updated."; $html .= "</div>"; return json_encode(array("div-body" => $html . $oTmpl->render("variable"), "div-name" => "wk-variable-form")); } }
function getCustomSettings() { global $wgExternalSharedDB; $city_list = 'city_list'; $cv = 'city_variables'; $cv_pool = 'city_variables_pool'; $dbr = wfGetDB(DB_SLAVE, array(), $wgExternalSharedDB); $res = $dbr->select(array($city_list, $cv, $cv_pool), array('cv_value', 'city_url', 'city_id'), array("{$city_list}.city_id = {$cv}.cv_city_id", "{$cv}.cv_variable_id = {$cv_pool}.cv_id", "{$cv_pool}.cv_id = '{$this->varid}'"), __METHOD__); $variable = WikiFactory::getVarById($this->varid, 0); $data = array(); $values = array(); $row_count = $dbr->numRows($res); if ($row_count == 0) { $dbr->freeResult($res); $out = "no settings found in WikiFactory\n"; return $out; } $this->over_limit = false; if ($row_count > 1000) { $this->over_limit = true; } if ($this->disable_limit) { $this->over_limit = false; } while ($row = $dbr->fetchObject($res)) { $city_id = $row->city_id; $cv_value = unserialize($row->cv_value); $nom_value = $cv_value; if (is_array($cv_value)) { asort($cv_value); $cv_value = join(', ', $cv_value); $nom_value = 'array'; } elseif (is_bool($cv_value)) { $cv_value = $cv_value ? 'true' : 'false'; $nom_value = $cv_value; } else { #$cv_value = 'Error. Not an array?!?'; } if (preg_match('/http:\\/\\/([\\w\\.\\-]+)\\//', $row->city_url, $matches)) { $city_url = str_ireplace('.wikia.com', '', $matches[1]); } else { $city_url = 'Error. Unknown wiki?!?'; } if (!empty($cv_value)) { if (count($data) <= 1000 || $this->disable_limit) { $data[] = array('value' => $cv_value, 'url' => $city_url, 'city' => $city_id); } $values[] = $nom_value; } } $dbr->freeResult($res); $acv = array_count_values($values); asort($acv); unset($values); global $wgCityId; if ($wgCityId == 177) { #we're on central (or are faking it), so link locallly $WF_title = SpecialPage::getTitleFor('WikiFactory'); $wie_title = SpecialPage::getTitleFor('WhereIsExtension'); } else { #we're away from home, so make sure the links link back right $WF_title = GlobalTitle::newFromText('WikiFactory', NS_SPECIAL, 177); $wie_title = GlobalTitle::newFromText('WhereIsExtension', NS_SPECIAL, 177); } $wie_query = array('var' => $variable->cv_variable_id, 'searchType' => 'full', 'val' => 0); #likeValue is appended manually inside the template; $wie_base = $wie_title->getFullURL(http_build_query($wie_query)); unset($wie_query); unset($wie_title); $limit_message = ''; if ($this->over_limit) { $limit_message = Wikia::errorbox("Warning, this variable has {$row_count} entries. Only first 1000 shown"); $QS = http_build_query(array('varid' => $variable->cv_variable_id, 'nolimit' => 1)); $limit_message .= "<a href='/index.php?title=Special:WikiFactoryReporter&{$QS}'>Click here to load all results</a>\n"; } $groups = WikiFactory::getGroups(); $variable->var_group = $groups[$variable->cv_variable_group]; unset($groups); $sprites = array('search' => "<img src='" . wfBlankImgUrl() . "' class='sprite search' alt='search' height='16' width='22'>", 'edit' => "<img src='" . wfBlankImgUrl() . "' class='sprite edit-pencil' alt='edit'>"); $tmpl = new EasyTemplate(dirname(__FILE__) . '/templates/'); $tmpl->set_vars(array('th' => array($variable->cv_name, 'wiki', 'city_id'), 'data' => $data, 'variable' => $variable, 'acv' => $acv, 'wf_base' => $WF_title->getFullUrl(), 'limit_message' => $limit_message, 'sprites' => $sprites, 'wie_base' => $wie_base)); $out = $tmpl->render('reporter'); return $out; }
/** * If there was a post to the add variable form, this will process it. * * @author Sean Colombo * @access private * * @param varOverrides array - array that will be filled (by reference) with any values * which should be used as overrides for form re-initialization * (for instance, if there was an error in the form we start where * the user left off instead of starting from scratch). * * @return any additional HTML that should be rendered as a result of the form post. */ private function doAddVariableForm(&$varOverrides) { global $wgRequest; $html = ""; if ($wgRequest->wasPosted()) { $cv_name = $wgRequest->getVal("cv_name"); $cv_variable_type = $wgRequest->getVal("cv_variable_type"); $cv_access_level = $wgRequest->getVal("cv_access_level"); $cv_variable_group = $wgRequest->getVal("cv_variable_group"); $cv_description = $wgRequest->getval("cv_description"); $cv_is_unique = $wgRequest->getval("cv_is_unique", "0"); // Verify that the form is filled out, then add the variable if it is (display an error if it isn't). $err = ""; if ($cv_name == "") { $err .= "<li>Please enter a name for the variable.</li>\n"; } if (!in_array($cv_variable_type, WikiFactory::$types)) { $err .= "<li>The value \"{$cv_variable_type}\" was not recognized as a valid WikiFactory::\$type.</li>\n"; } if (!in_array($cv_access_level, array_keys(WikiFactory::$levels))) { $err .= "<li>The value \"{$cv_access_level}\" was not recognized as a valid key from WikiFactory::\$levels.</li>\n"; } if (!in_array($cv_variable_group, array_keys(WikiFactory::getGroups()))) { $err .= "<li>The value \"{$cv_variable_group}\" was not recognized as a valid group_id from city_variables_groups table as returned by WikiFactory::getGroups()</li>\n"; } if ($cv_description == "") { $err .= "<li>Please enter a description of what the variable is used for.</li>\n"; } if ($err == "") { $success = WikiFactory::createVariable($cv_name, $cv_variable_type, $cv_access_level, $cv_variable_group, $cv_description, $cv_is_unique); if ($success) { $html .= "<div style='border:1px #0f0 solid;background-color:#afa;padding:5px'><strong>{$cv_name}</strong> successfully added to WikiFactory.</div>"; } else { $html .= "<div style='border:1px #f00 solid;background-color:#faa;padding:5px'>"; $html .= "<strong>ERROR: There was a database error while trying to create the variable. Please see the logs for more info.</strong>"; $html .= "</div>"; } } else { $html .= "<div style='border:1px #f00 solid;background-color:#faa;padding:5px'>"; $html .= "<strong>ERROR: Unable to add variable!</strong>"; $html .= "<ul>\n{$err}</ul>\n"; $html .= "</div>"; $varOverrides['cv_name'] = $cv_name; $varOverrides['cv_variable_type'] = $cv_variable_type; $varOverrides['cv_access_level'] = $cv_access_level; $varOverrides['cv_variable_group'] = $cv_variable_group; $varOverrides['cv_description'] = $cv_description; $varOverrides['cv_is_unique'] = $cv_is_unique; } } return $html; }