/** * axWFactorySaveVariable * * ajax method, save variable from form * * @author Krzysztof Krzyżaniak (eloy) <*****@*****.**> * @access public * * @return string encoded in JSON format */ function axWFactorySaveVariable() { global $wgUser, $wgRequest; $error = 0; $return = ""; if (!$wgUser->isAllowed('wikifactory')) { $error++; $return = Wikia::errormsg("You are not allowed to change variable value"); } else { $cv_id = $wgRequest->getVal('varId'); $city_id = $wgRequest->getVal('cityid'); $cv_name = $wgRequest->getVal('varName'); $cv_value = $wgRequest->getVal('varValue'); $cv_variable_type = $wgRequest->getVal('varType'); $reason = $wgRequest->getVal('reason', null); $tag_name = $wgRequest->getVal('tagName'); $tag_wiki_count = 0; $form_id = $wgRequest->getVal("formId", null); #--- check if variable is valid switch ($cv_variable_type) { case "boolean": if ((bool) $cv_value != $cv_value) { $error++; $return = Wikia::errormsg("Syntax error: value is not boolean. Variable not saved."); } else { $return = Wikia::successmsg("Parse OK, variable saved"); $cv_value = (bool) $cv_value; } break; case "integer": if ((int) $cv_value != $cv_value) { $error++; $return = Wikia::errormsg("Syntax error: value is not integer. Variable not saved."); } else { $return = Wikia::successmsg("Parse OK, variable saved."); $cv_value = (int) $cv_value; } break; case "string": $return = Wikia::successmsg("Parse OK, variable saved."); break; default: $tEval = "\$__var_value = {$cv_value};"; /** * catch parse errors */ ob_start(); if (eval($tEval) === FALSE) { $error++; $return = Wikia::errormsg("Syntax error, value is not valid PHP structure. Variable not saved."); } else { $cv_value = $__var_value; /** * now check if it's actually array when we want array) */ if (in_array($cv_variable_type, array("array", "struct", "hash"))) { if (is_array($cv_value)) { $return = Wikia::successmsg("Syntax OK (array), variable saved."); } else { $error++; $return = Wikia::errormsg("Syntax error: value is not array. Variable not saved."); } } else { $return = Wikia::successmsg("Parse OK, variable saved."); } } ob_end_clean(); #--- puts parse error to /dev/null } if (empty($error)) { $varInfo = WikiFactory::getVarById($cv_id, $city_id); if ($varInfo->cv_is_unique) { $wikis = WikiFactory::getCityIDsFromVarValue($cv_id, $cv_value, '='); $count = count($wikis); if ($count == 1 && $wikis[0] != $city_id || $count > 1) { $return = Wikia::errormsg("Value of this variable need to be unique."); $error++; } } } wfRunHooks('WikiFactoryVarSave::AfterErrorDetection', array($cv_id, $city_id, $cv_name, $cv_value, &$return, &$error)); # Save to DB, but only if no errors occurred if (empty($error)) { if (!WikiFactory::setVarByID($cv_id, $city_id, $cv_value, $reason)) { $error++; $return = Wikia::errormsg("Variable not saved because of problems with database. Try again."); } else { /* the one "set" that used this is now disabled, so disabling the call until needed again $tied = WikiFactory::getTiedVariables( $cv_name ); if( $tied ) { $return .= Wikia::successmsg( " This variable is tied with others. Check: ". implode(", ", $tied ) ); } */ if (!empty($tag_name)) { // apply changes to all wikis with given tag $tagsQuery = new WikiFactoryTagsQuery($tag_name); foreach ($tagsQuery->doQuery() as $tagged_wiki_id) { if (WikiFactory::setVarByID($cv_id, $tagged_wiki_id, $cv_value, $reason)) { $tag_wiki_count++; } } $return .= Wikia::successmsg(" ({$tag_wiki_count} wikis affected)"); } } } } if (empty($form_id)) { $div_name = "wf-variable-parse"; } else { $div_name = "wf-variable-parse-{$form_id}"; } return json_encode(array("div-body" => $return, "is-error" => $error, "tag-name" => $tag_name, "tag-wikis" => $tag_wiki_count, "div-name" => $div_name)); }
} #do we still have a R side? if ($to) { /****************************************************/ /* get right stuff */ /****************************************************/ $vars['R']['city'] = $to; $vars['R']['*'] = WikiFactory::getVariables("cv_id", $vars['R']['city'], 0, true); } $combined = array(); foreach ($vars as $side => $data) { foreach ($data['*'] as $item) { $combined[$item->cv_id]['*'] = $item->cv_name; $var = WikiFactory::getVarById($item->cv_id, $data['city']); $combined[$item->cv_id]['type'] = $var->cv_variable_type; $combined[$item->cv_id]['_'] = true; $val = unserialize($var->cv_value); switch ($var->cv_variable_type) { case "string": /*use as is*/ break; case "integer": /*use as is*/ break; case "boolean": $val = $val ? 'true' : 'false'; $val = "<abbr title='boolean'><i>{$val}</i></abbr>"; break; default:
private function getHomePageContents($wikiId) { $url = unserialize(WikiFactory::getVarById(5, $wikiId)->cv_value); echo "Loading {$wikiId} - {$url}"; $htmlContents = file_get_contents($url); if (!empty($htmlContents)) { echo " - success\n"; } else { echo " - failed\n"; $htmlContents = ''; } return $htmlContents; }
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; }
protected function isValidCity($cityId) { return WikiaDataAccess::cache('hubsapi_is_valid_cityid_' . $cityId, 6 * 60 * 60, function () use($cityId) { $varId = WikiFactory::getVarIdByName(self::HUBS_V3_VARIABLE_NAME); $varData = WikiFactory::getVarById($varId, $cityId); return !empty($varData) && !empty($varData->cv_value) && unserialize($varData->cv_value); }); }