function wfTalkHereAjaxEditor( $page, $section, $returnto ) { global $wgRequest, $wgTitle, $wgOut; $title = Title::newFromText( $page ); if ( !$title ) { return false; } //fake editor environment $args = array( 'wpTalkHere' => '1', 'wpReturnTo' => $returnto, 'action' => 'edit', 'section' => $section ); $wgRequest = new FauxRequest( $args ); $wgTitle = $title; $article = Article::newFromTitle( $title, RequestContext::getMain() ); $editor = new TalkHereEditPage( $article ); //generate form $editor->importFormData( $wgRequest ); $editor->showEditForm(); $response = new AjaxResponse(); $response->addText( $wgOut->getHTML() ); $response->setCacheDuration( false ); //don't cache, because of tokens etc return $response; }
/** * Ajax call. This is called by efCategoryTreeAjaxWrapper, which is used to * load CategoryTreeFunctions.php on demand. */ function ajax($category, $mode) { global $wgDBname; $title = self::makeTitle($category); if (!$title) { return false; } #TODO: error message? $this->mIsAjaxRequest = true; # Retrieve page_touched for the category $dbkey = $title->getDBkey(); $dbr =& wfGetDB(DB_SLAVE); $touched = $dbr->selectField('page', 'page_touched', array('page_namespace' => NS_CATEGORY, 'page_title' => $dbkey), __METHOD__); $mckey = "{$wgDBname}:categorytree({$mode}):{$dbkey}"; //FIXME: would need to add depth parameter. $response = new AjaxResponse(); if ($response->checkLastModified($touched)) { return $response; } if ($response->loadFromMemcached($mckey, $touched)) { return $response; } $html = $this->renderChildren($title, $mode); //FIXME: would need to pass depth parameter. if ($html == '') { $html = ' '; } #HACK: Safari doesn't like empty responses. #see Bug 7219 and http://bugzilla.opendarwin.org/show_bug.cgi?id=10716 $response->addText($html); $response->storeInMemcached($mckey, 86400); return $response; }
/** * * cmd posible values: * 'getCasesInfo' - in response there will be returned set of cases and subcases info formated in WikiText * 'getComment' - in response there will be returned comments for particular case */ public static function getFogbugzServiceResponse() { global $wgRequest, $wgHTTPProxy, $wgFogbugzAPIConfig; $command = $wgRequest->getText('cmd'); $myFBService = new FogbugzService($wgFogbugzAPIConfig['apiUrl'], $wgFogbugzAPIConfig['username'], $wgFogbugzAPIConfig['password'], $wgHTTPProxy); // there should be made some kind of protection from setting different value as cmd if ($command == 'getCasesInfo') { $outerIDs = $wgRequest->getArray('IDs'); $results = array(); try { $results = $myFBService->logon()->getCasesBasicInfo($outerIDs); } catch (Exception $e) { $results = array(); } $preparedResults = FogbugzTag::sortAndMakeTickets($results); $response = new AjaxResponse(); $response->addText(json_encode($preparedResults)); } else { // this part is not in use now; it will be after adding displaying comments $outerIDs = $wgRequest->getText('ID'); /* ... */ } if (!$response) { $response = new AjaxResponse(); $response->addText(json_encode(array('status' => wfMsg('fbtag-unknown-error')))); } return $response; }
static function blockArticle() { global $wgUser, $wgExternalDatawareDB, $wgRequest; $response = new AjaxResponse(); if (!$wgUser->isAllowed('corporatepagemanager') || !$wgRequest->wasPosted()) { $response->addText(json_encode(array('status' => "ERROR1"))); return $response; } $dbw = wfGetDB(DB_MASTER, array(), $wgExternalDatawareDB); $dbw->begin(); $article = $wgRequest->getVal('wiki') . ":" . $wgRequest->getVal('name'); if (!WikiaGlobalStats::excludeArticle($article)) { $response->addText(json_encode(array('status' => "ERROR2"))); return $response; } $response->addText(json_encode(array('status' => "OK"))); $dbw->commit(); return $response; }
function playerAjaxHandler($file, $options) { $response = new AjaxResponse(); try { #TODO: caching! $player = Player::newFromName($file, $options, 'thumbsize'); $html = $player->getPlayerHTML(); $response->addText($html); } catch (PlayerException $ex) { $response->setResponseCode($ex->getHTTPCode()); $response->addText($ex->getHTML()); } return $response; }
function ajaxModalChooseName() { global $wgRequest; $response = new AjaxResponse(); $specialConnect = new SpecialConnect(); $form = new ChooseNameForm($wgRequest, 'signup'); $form->mainLoginForm($specialConnect, ''); $tmpl = $form->getAjaxTemplate(); $tmpl->set('isajax', true); ob_start(); $tmpl->execute(); $html = ob_get_clean(); $response->addText($html); return $response; }
/** * Ajax call. This is called by efCategoryTreeAjaxWrapper, which is used to * load CategoryTreeFunctions.php on demand. * @param $category * @param $depth int * @return AjaxResponse|bool */ function ajax($category, $depth = 1) { global $wgLang, $wgContLang, $wgRenderHashAppend; $title = self::makeTitle($category); if (!$title) { return false; # TODO: error message? } # Retrieve page_touched for the category $dbkey = $title->getDBkey(); $dbr = wfGetDB(DB_SLAVE); $touched = $dbr->selectField('page', 'page_touched', array('page_namespace' => NS_CATEGORY, 'page_title' => $dbkey), __METHOD__); $mckey = wfMemcKey("categorytree(" . $this->getOptionsAsCacheKey($depth) . ")", $dbkey, $wgLang->getCode(), $wgContLang->getExtraHashOptions(), $wgRenderHashAppend); $response = new AjaxResponse(); if ($response->checkLastModified($touched)) { return $response; } if ($response->loadFromMemcached($mckey, $touched)) { return $response; } $html = $this->renderChildren($title, $depth); if ($html == '') { # HACK: Safari doesn't like empty responses. # see Bug 7219 and http://bugzilla.opendarwin.org/show_bug.cgi?id=10716 $html = ' '; } $response->addText($html); $response->storeInMemcached($mckey, 86400); return $response; }
static function hideFeed() { global $wgUser, $wgRequest, $wgLang; $response = new AjaxResponse(); $result = array(); if (!$wgUser->isAllowed('corporatepagemanager')) { $result['response'] = 'error'; $response->addText(json_encode($result)); return $response; } $tag_id = (int) $wgRequest->getVal('tag_id', 0); $city_id = (int) $wgRequest->getVal('city_id', 0); $page_id = (int) $wgRequest->getVal('page_id', 0); $dir = $wgRequest->getVal('dir', 'add'); $ws = new WikiaStatsAutoHubsConsumerDB(DB_MASTER); $result = array(); if ($dir == 'add') { if ($wgRequest->getVal('type') == 'article') { if ($ws->addExludeArticle($tag_id, $city_id, $page_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } if ($wgRequest->getVal('type') == 'blog') { if ($ws->addExludeBlog($tag_id, $city_id, $page_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } if ($wgRequest->getVal('type') == 'city') { if ($ws->addExludeWiki($tag_id, $city_id, $wgLang->getCode())) { $result['response'] = 'ok'; } } } else { $result['response'] = 'ok'; if ($wgRequest->getVal('type') == 'article') { $ws->removeExludeArticle($tag_id, $city_id, $page_id, $wgLang->getCode()); } if ($wgRequest->getVal('type') == 'blog') { $ws->removeExludeBlog($tag_id, $city_id, $page_id, $wgLang->getCode()); } if ($wgRequest->getVal('type') == 'city') { $ws->removeExludeWiki($tag_id, $city_id, $wgLang->getCode()); } } $result['response'] = 'ishide'; $response->addText(json_encode($result)); return $response; }
/** Returns colored markup. @return colored markup. */ static function ajax_getColoredText($page_title_raw, $page_id_raw = NULL, $rev_id_raw = NULL) { global $wgParser, $wgWikiTrustContentServerURL, $wgWikiTrustApiURL, $wgUser; global $wgMemc; $response = new AjaxResponse(""); $request_headers = apache_request_headers(); // Try to use gzip for the content, if possible. // Ian - This isn't working with redherring, for some reason. if (strstr($request_headers["Accept-Encoding"], "gzip")) { // $response->setContentType("gzip"); } // Can set this to use client side caching, but this can also cause // problems. // Mark that the content can be cached // $response->setCacheDuration(self::TRUST_CACHE_VALID); if (!$page_id_raw || !$rev_id_raw) { $data = array('action' => 'query', 'prop' => 'revisions', 'titles' => $page_title_raw, 'rvlimit' => '1', 'rvprop' => 'ids', 'format' => 'json'); $page_info_raw = file_get_contents($wgWikiTrustApiURL . http_build_query($data)); $page_json = json_decode($page_info_raw, true); $pages_arr = array_keys($page_json["query"]["pages"]); // Now, parse out only what we need if (!$page_id_raw) { $page_id_raw = $pages_arr[0]; } if (!$rev_id_raw) { $rev_id_raw = $page_json["query"]["pages"][$page_id_raw]["revisions"][0]["revid"]; } } $dbr =& wfGetDB(DB_SLAVE); $page_id = $dbr->strencode($page_id_raw, $dbr); $rev_id = $dbr->strencode($rev_id_raw, $dbr); $page_title = $dbr->strencode($page_title_raw, $dbr); // Check the If-Modified-Since header. // If the timestamp of the requested revision is earlier than the IMS // header, return 304 and do nothing further. $rev_ts = '19700101000000'; $res = $dbr->select(self::util_getDbTable('wikitrust_colored_markup'), array('revision_createdon'), array('revision_id' => $rev_id), array()); if ($res && $dbr->numRows($res) > 0) { $row = $dbr->fetchRow($res); $rev_ts = $row['revision_createdon']; if (!$rev_ts) { $rev_ts = '19700101000000'; } } $dbr->freeResult($res); if ($response->checkLastModified($rev_ts)) { return $response; } // See if we have a cached version of the colored text, or if // we need to generate new text. $memcKey = wfMemcKey('revisiontext', 'revid', $rev_id); $cached_text = $wgMemc->get($memcKey); if ($cached_text) { $response->addText($cached_text); return $response; } // Since we are here, we need to get the colored HTML the hard way. $ctx = stream_context_create(array('http' => array('timeout' => self::TRUST_TIMEOUT))); // TODO: Should we do doing this via HTTPS? Or POST? // TODO: in RemoteMode, shouldn't we use local database? $colored_raw = file_get_contents($wgWikiTrustContentServerURL . "rev=" . urlencode($rev_id) . "&page=" . urlencode($page_id) . "&page_title=" . urlencode($page_title) . "&time=" . urlencode(wfTimestampNow()) . "&user=0", 0, $ctx); if ($colored_raw && $colored_raw != self::NOT_FOUND_TEXT_TOKEN) { // Inflate. Pick off the first 10 bytes for python-php conversion. $colored_raw = gzinflate(substr($colored_raw, 10)); // Pick off the median value first. $colored_data = explode(",", $colored_raw, 2); $colored_text = $colored_data[1]; if (preg_match("/^[+-]?(([0-9]+)|([0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*)|\n\t\t\t (([0-9]+|([0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*))[eE][+-]?[0-9]+))\$/", $colored_data[0])) { self::$median = $colored_data[0]; if ($colored_data[0] == 0) { self::$median = self::TRUST_DEFAULT_MEDIAN; } } // First, make sure that there are not any instances of our tokens in the colored_text $colored_text = str_replace(self::TRUST_OPEN_TOKEN, "", $colored_text); $colored_text = str_replace(self::TRUST_CLOSE_TOKEN, "", $colored_text); $colored_text = preg_replace("/'/", "'", $colored_text, -1); $colored_text = preg_replace("/&/", "&", $colored_text, -1); $colored_text = preg_replace("/</", self::TRUST_OPEN_TOKEN, $colored_text, -1); $colored_text = preg_replace("/>/", self::TRUST_CLOSE_TOKEN, $colored_text, -1); $title = Title::newFromText($page_title); $options = ParserOptions::newFromUser($wgUser); $parsed = $wgParser->parse($colored_text, $title, $options); $text = $parsed->getText(); $count = 0; // Update the trust tags $text = preg_replace_callback("/\\{\\{#t:(\\d+),(\\d+),(.*?)\\}\\}/", "WikiTrust::color_handleParserRe", $text, -1, $count); // Update open, close, images, and links. $text = preg_replace('/' . self::TRUST_OPEN_TOKEN . '/', "<", $text, -1, $count); // Regex broken for some pages. // Removing for now. /** $text = preg_replace('/<a href="(.*?)(File):(.*?)" (.*?)>/' , self::TRUST_OPEN_TOKEN, $text, -1, $count); $text = preg_replace('/<a href="(.*?)(Image):(.*?)" (.*?)>/' , self::TRUST_OPEN_TOKEN, $text, -1, $count); */ $text = preg_replace('/<a href="(.*?)title=(.*?)&action=edit&redlink=1" class="new" title="(.*?) \\(not yet written\\)">/', '<a href="/wiki/$2" title="$3">', $text, -1, $count); /* $text = preg_replace_callback( '/'.self::TRUST_OPEN_TOKEN .'(Image|File):(.*?)<\/a>/' ,"WikiTrust::color_getImageInfo" ,$text, -1, $count); */ $text = preg_replace('/' . self::TRUST_CLOSE_TOKEN . '/', ">", $text, -1, $count); $text = preg_replace('/<\\/p>/', "</span></p>", $text, -1, $count); $text = preg_replace('/<p><\\/span>/', "<p>", $text, -1, $count); $text = preg_replace('/<li><\\/span>/', "<li>", $text, -1, $count); // Save the finished text in the cache. $wgMemc->set($memcKey, $text, self::TRUST_CACHE_VALID); // And finally return the colored HTML. $response->addText($text); // And mark that we have the colored version, for cache control. $dbw = wfGetDB(DB_MASTER); $dbw->begin(); $dbw->insert('wikitrust_colored_markup', array('revision_id' => $rev_id, 'revision_text' => "memcached", 'revision_createdon' => wfTimestampNow()), 'Database::insert', array('IGNORE')); $dbw->commit(); } else { // text not found. $response = new AjaxResponse(self::NOT_FOUND_TEXT_TOKEN); } return $response; }
/** Returns colored markup. @return colored markup. */ static function ajax_getColoredText($page_title, $page_id = 0, $rev_id = 0) { global $wgTitle, $wgMemc; wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . ": ajax_getColoredText({$page_title}, {$page_id}, {$rev_id})"); wfLoadExtensionMessages('WikiTrust'); list($page_title, $page_id, $rev_id) = self::util_ResolveRevSpec($page_title, $page_id, $rev_id); wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . ": computed=({$page_title}, {$page_id}, {$rev_id})"); // See if we have a cached version of the colored text, or if // we need to generate new text. $memcKey = wfMemcKey('revisiontext', 'revid', $rev_id); $cached_text = $wgMemc->get($memcKey); if ($cached_text) { wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . " {$rev_id}: using cached text."); $response = new AjaxResponse(""); $response->addText($cached_text); return $response; } wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . " {$memcKey}: not cached."); try { $colored_text = WikiTrust::color_getColorData($page_title, $page_id, $rev_id); self::color_fixup($colored_text); } catch (Exception $e) { wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . ": exception caught: " . $e->getMessage()); } $text = ''; if (!$colored_text) { wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . " {$rev_id}: colored text not found."); // text not found. global $wgUser, $wgParser, $wgTitle; $options = ParserOptions::newFromUser($wgUser); $msg = $wgParser->parse(wfMsgNoTrans("wgNoTrustExplanation"), $wgTitle, $options); $text = $msg->getText() . $text; } else { self::color_Wiki2Html($colored_text, $text, $rev_id); self::vote_showButton($text); self::color_addTracker($text); // Save the finished text in the cache. $wgMemc->set($memcKey, $text); wfWikiTrustDebug(__FILE__ . ":" . __LINE__ . " {$memcKey}: saving to cache. "); } return new AjaxResponse($text); }
/** * showAll -- ajax function to show all feeds on follow list * * @static * @access public * * * @return bool */ public static function showAll() { global $wgRequest, $wgUser, $wgExternalSharedDB, $wgWikiaEnableConfirmEditExt; wfProfileIn(__METHOD__); $user_id = $wgRequest->getVal('user_id'); $head = $wgRequest->getVal('head'); $from = $wgRequest->getVal('from'); $response = new AjaxResponse(); $user = User::newFromId($user_id); if (empty($user) || $user->getOption('hidefollowedpages')) { if ($user->getId() != $wgUser->getId()) { $response->addText(wfMsg('wikiafollowedpages-special-hidden')); return $response; } } $template = new EasyTemplate(dirname(__FILE__) . '/templates/'); $template->set_vars(array("data" => FollowModel::getWatchList($user_id, $from, FollowModel::$ajaxListLimit, $head), "owner" => $wgUser->getId() == $user_id, "user_id" => $user_id, "more" => true)); $text = $template->render("followedPages"); $response->addText($text); wfProfileOut(__METHOD__); return $response; }
function createUserLogin() { global $wgRequest, $wgUser, $wgExternalSharedDB, $wgWikiaEnableConfirmEditExt, $wgEnableCOPPA, $wgDefaultSkin; // Init session if necessary if (session_id() == '') { wfSetupSession(); } $response = new AjaxResponse(); $response->setCacheDuration(3600 * 24 * 365); if (!(($wgRequest->getCheck("wpCreateaccountMail") || $wgRequest->getCheck("wpCreateaccount")) && $wgRequest->wasPosted())) { $response->addText(json_encode(array('status' => "ERROR", 'msg' => wfMsgExt('comboajaxlogin-post-not-understood', array('parseinline')), 'type' => 'error'))); return $response; } if ($wgRequest->getVal('type', '') == '') { $wgRequest->setVal('type', 'signup'); } $form = new AjaxLoginForm($wgRequest); $form->load(); if ($wgEnableCOPPA && !$form->checkDate()) { // If the users is too young to legally register. $response->addText(json_encode(array('status' => "ERROR", 'msg' => wfMsg('userlogin-unable-info'), 'type' => 'error'))); return $response; } $dbw = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB); $dbl = wfGetDB(DB_MASTER); $dbw->begin(); $dbl->begin(); $form->execute('signup'); $dbw->commit(); $dbl->commit(); if ($form->msgtype == "error") { if (!$wgWikiaEnableConfirmEditExt) { /*theoretically impossible because the only possible error is captcha error*/ $response->addText(json_encode(array('status' => "ERROR", 'msg' => $form->msg, 'type' => $form->msgtype, 'captchaUrl' => '', 'captcha' => ''))); return $response; } $captchaObj = new FancyCaptcha(); $captcha = $captchaObj->pickImage(); $captchaIndex = $captchaObj->storeCaptcha($captcha); $titleObj = SpecialPage::getTitleFor('Captcha/image'); $captchaUrl = $titleObj->getLocalUrl('wpCaptchaId=' . urlencode($captchaIndex)); $response->addText(json_encode(array('status' => "ERROR", 'msg' => $form->msg, 'type' => $form->msgtype, 'captchaUrl' => $captchaUrl, 'captcha' => $captchaIndex))); return $response; } $response->addText(json_encode(array('status' => "OK"))); return $response; }
/** * This is used when an author wants to CLONE a title from outside the Documentation namespace into a * title within it. We must be passed the title of the original/source topic and then the destination * title which should be a full form PONYDOCS_DOCUMENTATION_NAMESPACE_NAME . ':<manual>:<topicName>:<version>' * which it will then tag with the supplied version and strip out any other Category tags (since they are * invalid in the Documentation namespace unless a DEFINED version). * * This will return an AjaxResponse object which MAY contain an error in the case the version is not * valid or the topic already exists (destination). * * @FIXME: Should validate version is defined. * * @param string $topic Title of topic to clone. * @param string $destTitle Title of destination topic. * @return AjaxResponse */ function efPonyDocsAjaxCloneExternalTopic($topic, $destTitle) { $response = new AjaxResponse(); $response->setCacheDuration(false); $pieces = split(':', $destTitle); if (sizeof($pieces) < 4 || strcasecmp($pieces[0], PONYDOCS_DOCUMENTATION_NAMESPACE_NAME) != 0) { $response->addText('Destination title is not valid.'); return $response; } if (!PonyDocsManual::IsManual($pieces[1])) { $response->addText('Destination title references an invalid manual.'); return $response; } if (!PonyDocsVersion::IsVersion($pieces[3])) { $response->addText('Destination title references an undefined version.'); return $response; } $destArticle = new Article(Title::newFromText($destTitle)); if ($destArticle->exists()) { $response->addText('Destination title already exists.'); return $response; } $article = new Article(Title::newFromText($topic)); if (!$article->exists()) { $response->addText('Source article could not be found.'); return $response; } $content = $article->getContent(); //$content = preg_replace( '/\[\[ return $response; }
function wfAjaxPostCollection($collection = '', $redirect = '') { $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); if (session_id() == '') { wfSetupSession(); } $collection = $json->decode($collection); $collection['enabled'] = true; $_SESSION['wsCollection'] = $collection; $r = new AjaxResponse(); if ($redirect) { $title = Title::newFromText($redirect); $redirecturl = wfExpandUrl($title->getFullURL(), PROTO_CURRENT); $r->setResponseCode(302); header('Location: ' . $redirecturl); } else { $title = SpecialPage::getTitleFor('Book'); $redirecturl = wfExpandUrl($title->getFullURL(), PROTO_CURRENT); $r->setContentType('application/json'); $r->addText($json->encode(array('redirect_url' => $redirecturl))); } return $r; }
public static function disconnectFromFB($user = null) { $response = new AjaxResponse(); $response->addText(json_encode(self::coreDisconnectFromFB($user))); return $response; }