/** * Make output to be returned from the references() function * * @param $group * * @return string XHTML ready for output */ function referencesFormat($group) { if (count($this->mRefs) == 0 || empty($this->mRefs[$group])) { return ''; } wfProfileIn(__METHOD__); wfProfileIn(__METHOD__ . '-entries'); $ent = array(); foreach ($this->mRefs[$group] as $k => $v) { $ent[] = $this->referencesFormatEntry($k, $v); } $prefix = wfMessage('cite_references_prefix')->inContentLanguage()->plain(); $suffix = wfMessage('cite_references_suffix')->inContentLanguage()->plain(); $content = implode("\n", $ent); // Prepare the parser input. We add new lines between the pieces to avoid a confused tidy (bug 13073) $parserInput = $prefix . "\n" . $content . "\n" . $suffix; // Let's try to cache it. global $wgMemc; $cacheKey = wfMemcKey('citeref', md5($parserInput), $this->mParser->Title()->getArticleID()); wfProfileOut(__METHOD__ . '-entries'); global $wgCiteCacheReferences; $data = false; if ($wgCiteCacheReferences) { wfProfileIn(__METHOD__ . '-cache-get'); $data = $wgMemc->get($cacheKey); wfProfileOut(__METHOD__ . '-cache-get'); } if (!$data || !$this->mParser->isValidHalfParsedText($data)) { wfProfileIn(__METHOD__ . '-parse'); // Live hack: parse() adds two newlines on WM, can't reproduce it locally -ævar $ret = rtrim($this->parse($parserInput), "\n"); if ($wgCiteCacheReferences) { $serData = $this->mParser->serializeHalfParsedText($ret); $wgMemc->set($cacheKey, $serData, 86400); } wfProfileOut(__METHOD__ . '-parse'); } else { $ret = $this->mParser->unserializeHalfParsedText($data); } wfProfileOut(__METHOD__); // done, clean up so we can reuse the group unset($this->mRefs[$group]); unset($this->mGroupCnt[$group]); return $ret; }
public function execute() { global $wgUser, $egMapsDefaultGeoService, $egMapsDistanceDecimals, $egMapsDistanceUnit; $params = $this->extractRequestParams(); $geoCoordinateParser = new DataValues\Geo\Parsers\GeoCoordinateParser(); $results = array(); if (Maps\Geocoders::canGeocode()) { $location = Maps\Geocoders::attemptToGeocode($params['location'], $egMapsDefaultGeoService); } else { $location = $geoCoordinateParser->parse($params['location']); } $query = "{{#ask:[[Bundesland::+]][[aktiv::wahr]][[Lage::+]]|?Lage|?=Name|mainlabel=-|format=array|link=none|headers=plain|headersep==|sep=<BV>}}"; $mainpage = Title::newMainPage(); $options = new ParserOptions(); $localparser = new Parser(); $localparser->Title($mainpage); $localparser->Options($options); $localparser->clearState(); $bedarfsverkehre = $localparser->RecursiveTagParse($query); $bedarfsverkehre = explode('<BV>', $bedarfsverkehre); foreach ($bedarfsverkehre as $key => $props) { $props = explode('<PROP>', $props); $bedarfsverkehre[$key] = array(); foreach ($props as $prop) { $prop = explode('=', $prop); $bedarfsverkehre[$key][$prop[0]] = $prop[1]; } $bvlocation = $geoCoordinateParser->parse($bedarfsverkehre[$key]['Lage']); if ($location && $bvlocation) { $bedarfsverkehre[$key]['Distanz'] = MapsGeoFunctions::calculateDistance($location, $bvlocation); } else { // The locations should be valid when this method gets called. throw new MWException('Attempt to find the distance between locations of at least one is invalid' . $bedarfsverkehre[$key]['Name']); } } usort($bedarfsverkehre, array("ApiBVdistances", "distanceSort")); $results = array_slice($bedarfsverkehre, 0, 10); $this->getResult()->addValue(null, 'results', $results); }
function parseArticleText($text) { if ($text === '') { return ''; } else { if ($this->mExpandTemplates) { global $wgTitle; $parser = new Parser(); $parser->Options(new ParserOptions()); // We don't want this to be user-specific $parser->Title($wgTitle); $parser->OutputType(OT_HTML); return $parser->replaceVariables($text); } else { return $text; } } }
/** * Render navigations elements that renderNavigation hasn't dealt with * * @param $buttons array * @param $customItems array */ private function renderCustomNavigation(&$buttons, &$customItems) { /* TODO: check for unintended consequences, there are probably more elegant ways to do this... */ $options = new ParserOptions(); $localParser = new Parser(); $localParser->Title($this->getSkin()->getTitle()); $localParser->Options($options); $localParser->clearState(); if (count($customItems) !== 0) { $newButtons = TweekiHooks::parseButtons(implode(chr(10), $customItems), $localParser, false); $buttons = array_merge($buttons, $newButtons); $customItems = array(); } }