/// <bahnenregiontabelle region="Innsbruck" />
public static function bahnenregiontabelleParserHook($input, $args, $parser) {
$parser->getOutput()->addModules('ext.wrreport');
- $sql = 'SELECT page_title, position_longitude, position_latitude, under_construction FROM wrsledruncache WHERE MBRCONTAINS((SELECT border FROM wrregion WHERE page_id = %s), POINT(position_longitude, position_latitude))';
+ // get border for region
+ list($region_name, $region_border_wkb) = WrReport::getPageRegion($parser->getTitle());
+ if (is_null($region_name)) return; // no region page
+
+ // get titles that are in the region
$page_titles = array();
+ $dbr = wfGetDB(DB_SLAVE);
+ $res = $dbr->select('wrsledruncache', 'page_id', array('CONTAINS(GEOMFROMWKB(' . $dbr->addQuotes($region_border_wkb) . '), POINT(position_longitude, position_latitude))', 'under_construction' => false), __METHOD__, 'page_title');
+ foreach ($res as $row) {
+ $page_titles[] = Title::newFromId($row->page_id);
+ }
+ $dbr->freeResult($res);
+
+ // note that MySQL returns too many data compared to real "CONTAINS".
+
$html = WrReport::createBahnentabelle($page_titles);
return array($html, 'noparse' => true, 'isHTML' => true);
}