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;
 }
Exemplo n.º 5
0
 /**
  * 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;
 }