/**
 * axWFactoryRemoveVariable
 *
 * Ajax call, remove
 *
 * @access public
 * @author eloy@wikia
 *
 * @return string: json string with array of variables
 */
function axWFactoryRemoveVariable()
{
    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');
        $tag_name = $wgRequest->getVal('tagName');
        $tag_wiki_count = 0;
        $form_id = $wgRequest->getVal("formId", null);
        $reason = $wgRequest->getVal("reason", null);
        if (!WikiFactory::removeVarById($cv_id, $city_id, $reason)) {
            $error++;
            $return = Wikia::errormsg("Variable not removed because of problems with database. Try again.");
        } else {
            $return = Wikia::successmsg(" Value of variable was removed ");
            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::removeVarByID($cv_id, $tagged_wiki_id)) {
                        $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));
}
 /**
  * doMultiRemoveTags
  *
  * @access private
  * @author uberfuzzy@wikia-inc.com
  *
  * @return text message (use Wikia::*box functions)
  */
 private function doMultiRemoveTags()
 {
     /* working data is stored in object prior to call
     			$this->mRemoveTag; has the tag to remove
     			$this->mRemoveTags; has int array of wiki id to remove from
     		*/
     /* in theory, these should never trigger, but BSTS */
     if (empty($this->mRemoveTag)) {
         return Wikia::errorbox("no tag to remove?");
     }
     if (empty($this->mRemoveTags)) {
         return Wikia::errorbox("no items to remove?");
     }
     /* turn the tag string into the tag id */
     $tagID = WikiFactoryTags::idFromName($this->mRemoveTag);
     if ($tagID === false) {
         return Wikia::errorbox("tag [{$this->mRemoveTag}] doesnt exist");
     }
     /* to get list of all wikis with this tag, and later, use this to cache clear */
     $tagsQuery = new WikiFactoryTagsQuery($this->mRemoveTag);
     $fails = array();
     foreach ($this->mRemoveTags as $wkid) {
         $oTag = new WikiFactoryTags($wkid);
         $ret = $oTag->removeTagsById(array($tagID));
         if ($ret === false) {
             $fails[] = $wkid;
         }
     }
     /* force dump of the tag_map in memcache */
     $tagsQuery->clearCache();
     /* since we /hopefully/ removed some tags from wikis,
     			force the search results for this pageload to be empty. */
     $this->mTagWikiIds = array();
     #print "(forcing mTagWikiIds to null at ".gmdate('r').")";
     if (empty($fails)) {
         return Wikia::successbox("ok!");
     } else {
         return Wikia::errorbox("ok, but failed at " . count($fails) . " wikis" . " (" . implode(", ", $fails) . ")");
     }
 }