public function exportPdfAction() { /*$this->loadLayout()->_setActiveMenu('Iways/Assistant/Overview') ->_title('Iways Assistant / ' . $this->__('Overview')); $modules = $this->helper->getLoadedModules('Iways', 'local'); if ($extend = Mage::getStoreConfig('Iways_Assistant/General/Extend')) { foreach (explode(",", $extend) as $module) $modules = array_merge($modules, $this->helper->getLoadedModules(trim($module))); } $block = $this->getLayout() ->createBlock('Iways_Assistant/adminhtml_assistant_overview', '', array('modules' => $modules)) ->setTemplate('iways_assistant/overview.phtml'); $this->_addContent($block); $this->renderLayout();*/ var_Dump("TEST!"); die; $fileName = 'orders.csv'; $grid = $this->getLayout()->createBlock('adminhtml/sales_order_grid'); $this->_prepareDownloadResponse($fileName, $grid->getCsvFile()); }
function test() { $database = model::factory('database'); $r = $database->safe_query('select * from user where user_id in :user_id', array('user_id' => array(329, 339))); var_Dump($r); var_dump($r->fetchAll()); }
protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Starting to fetch github-Usernames'); $data = parse_ini_file(__DIR__ . '/../../../.env'); $pdo = new \PDO('mysql:dbname=' . $data['DB_DBNAME'] . ';host=' . $data['DB_HOSTNAME'], $data['DB_USERNAME'], $data['DB_PASSWORD']); $select = $pdo->prepare('SELECT * FROM `users` WHERE `githubName` = ""'); $update = $pdo->prepare('UPDATE `users` SET `githubName`= :githubName WHERE githubUid = :githubUid'); $select->execute(); $result = $select->fetchAll(); foreach ($result as $row) { $output->writeln(sprintf('Fetching username for user %s (%s)', $row['githubUid'], $row['name'])); $ch = curl_init('https://api.github.com/users?per_page=1&since=' . ($row['githubUid'] - 1)); curl_setopt($ch, CURLOPT_TIMEOUT, 2); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: PHPMentoring-App')); $info = curl_exec($ch); // get curl response curl_close($ch); var_Dump($info); $info = json_decode($info, true); var_Dump($info); if (!isset($info[0])) { throw new \Exception('Transport Error occured'); } $update->execute(array(':githubUid' => $row['githubUid'], ':githubName' => $info[0]['login'])); } $output->writeln('Finished'); }
function dump() { if ($this->curfunc) { var_Dump($this->curfunc); } echo "Profiling period: " . ($this->profstart - $this->api->start_time) . ' .. ' . (time() + microtime() - $this->api->start_time) . '<br/>'; echo "Profiled (ms): <b>" . round(1000 * (time() + microtime() - $this->profstart - $this->timetable['Profiling']['total']), 2) . '</b><br/>'; uasort($this->timetable, function ($l, $r) { $l = $l['total']; ///$l['calls']; $r = $r['total']; ///$r['calls']; if ($l > $r) { return -1; } if ($l < $r) { return 1; } }); $x = 0; foreach ($this->timetable as $activity => $detail) { if ($activity == 'Profiling') { $activity = '<font color="gray">' . $activity . '</font>'; $detail['calls'] = $this->calls * 2; } $x += $detail['total']; echo '+' . number_format($detail['total'] * 1000, 2) . ' ' . $activity . ' x ' . $detail['calls'] . '<br/>'; } }
function createFatalRedirectRequest(ezcMvcRequest $request, ezcMvcResult $result, Exception $response) { var_Dump($request); $req = clone $request; $req->uri = '/FATAL'; return $req; }
function tesdt() { $tab = array('sdaf' => 'dsafad'); $tab[] = 'safas'; $tab[] = $tab; $tab['wtf'] = new KontoBankMillenium(); var_Dump($tab); }
public function __invoke($str, $find) { var_Dump($this->view->basePath()); if (!is_string($str)) { return 'must be string'; } if (strpos($str, $find) === false) { return 'not found'; } return 'found'; }
public function testMain() { $b = Browser::create()->get('http://localhost')->get('http://localhost')->get('http://localhost')->get('http://localhost')->get('http://localhost')->get('http://localhost'); // 結果 foreach ($b->getResults() as $r) { echo $r->header(); echo strip_tags($r->body()); } // クッキー var_Dump($b->getCookie()); }
function page_callback() { $r = $this->op->recall('result', null); $this->op->forget('result'); $this->opauth = new \Opauth($this->config, false); $response = $_SESSION['opauth']; // Controller_Opauth or it's descendand (which you can tweak) // will determine, what should be done upon successful initialization. // See documentation of if ($this->api->auth->opauth) { $res = $this->op->callback($response, $this->opauth); if (is_array($res) && isset($res['force_callback']) && $res['force_callback']) { $r = $res; } else { $r = $r ?: $res; } } else { $r = $r ?: 'dump'; } if ($r === 'dump') { echo '<h2>default_action is not specified fo OPauth Controller. Dumping...</h2>'; echo "<pre>"; var_Dump($response); exit; } if (is_array($r) && isset($r['error'])) { echo '<h2>Unable to authenticate</h2>'; echo "<p>" . htmlspecialchars($r['error']) . "</p>"; exit; } if ($r === 'close') { echo '<script>window.opener.location.reload(true);window.close()</script>'; exit; } if (is_array($r) && isset($r['redirect_me'])) { if ($r['redirect_me']['0'] == '/' && strlen($r['redirect_me']) != 1) { header('Location: ' . $r['redirect_me']); exit; } $this->api->redirect($r['redirect_me']); } if (is_array($r) && isset($r['redirect'])) { echo '<script>window.opener.location="' . $this->api->url($r['redirect']) . '";window.close()</script>'; exit; } if (is_array($r) && isset($r['custom_script'])) { echo $r['custom_script']; exit; } $this->add('View_Info')->set('Authentication is successful, but no action is defined'); }
public function testMain() { // セットアップ Nora::Configure(TEST_DIR, 'dev', ['config' => 'config/test']); Nora::getService('logger')->err('エラーだよ'); $this->assertEquals(spl_object_hash(Nora::getService('logger')), spl_object_hash(Nora::getService('logger'))); // 既存クラスをサービスにする Nora::setService('mysql', ['class' => 'PDO', 'params' => ['dsn' => 'mysql:dbname=test;host=127.0.0.1']]); // サービスを読み込む Nora::setService('hoge', ['callback' => function ($db) { return $db; }, 'params' => ['db' => '@mysql']]); var_Dump(Nora::getService('hoge')->prepare('SHOW TABLES;')->fetch()); }
function &getDB($bNew = false, $bPersistent = false) { // Get the database object $oDB =& DB::connect(CONST_Database_DSN . ($bNew ? '?new_link=true' : ''), $bPersistent); if (PEAR::IsError($oDB)) { var_dump(CONST_Database_DSN); var_Dump($oDB); fail($oDB->getMessage()); } $oDB->setFetchMode(DB_FETCHMODE_ASSOC); $oDB->query("SET DateStyle TO 'sql,european'"); $oDB->query("SET client_encoding TO 'utf-8'"); return $oDB; }
public function find($data, $find) { $dom = new DOMDocument(); @$dom->loadHTML($data); $xpath = new DOMXPath($dom); $elements = $xpath->evaluate($find); var_Dump($elements); die; return $elements; $urls = array(); foreach ($elements as $e) { $url = $e->nodeValue; $urls[] = $url; } return array_unique($urls); }
function test() { echo "<pre>"; for ($x = 0; $x < 10; $x++) { $n = rand(1, 100000); echo "here"; $a = rand(1, 10000); $b = rand(1, 10000); $c = $a + 1; $d = $b + 1; echo "== {$n} {$a}, {$b}, {$c}, {$d} ==\n"; $c = $this->add('Controller_Roses'); $res = $c->solve($n, $a, $b, $c, $d); var_dump($res); var_Dump($c->distance); } }
function page_index($p) { $tabs=$p->add('Tabs'); $p=$tabs->addTab('Jobs'); $crud=$p->add('CRUD'); $crud->setModel('Job_Admin',null,array('id','category','type','company','position','location', 'is_public','is_activated','expires_at','email')); if($crud->grid){ $crud->grid->addPaginator(); $crud->grid->getColumn('type')->makeSortable(); $crud->grid->getColumn('location')->makeSortable(); $crud->grid->dq->field('description'); $crud->grid->addColumn('button','extend'); if($_GET['extend']){ $new_expires=$crud->grid->getModel()->loadData($_GET['extend']) ->extend()->get('expires_at'); $new_expires=date($this->api->getConfig('locale/date','d/m/Y'), strtotime($new_expires)); $crud->grid->js(null,$crud->grid->js()->univ()->successMessage('Extended job #'. $_GET['extend'].' till '.$new_expires))->reload()->execute(); } $crud->grid->addQuickSearch(array('company','position','location','description')); $action_form=$crud->add('Form',null,null,array('form_empty')); $ids=$action_form->addField('hidden','ids'); $crud->grid->addSelectable($ids); $d=$action_form->addSubmit('Delete Selected'); $d=$action_form->addSubmit('Extend Selected'); $action_form->onSubmit(function($f) use ($crud,$d){ $ids=json_decode($f->get('ids')); //$m=$crud->grid->getModel()->dsql(null,false)->where('id in',$ids)->do_delete(); var_Dump($d->isClicked()); exit; return $f->js(null,$crud->grid->js()->reload()) ->univ()->successMessage('Success'); }); } $p=$tabs->addTab('Categories')->add('CRUD')->setModel('Category'); }
/** * Run a module controller method * Output from module is buffered and returned. **/ public static function run($module) { $method = 'index'; if (($pos = strrpos($module, '/')) != FALSE) { $method = substr($module, $pos + 1); $module = substr($module, 0, $pos); } if ($module == 'tasks/reviews') { $class = self::load($module); var_Dump(get_class_methods($class)); } if ($class = self::load($module)) { if (method_exists($class, $method)) { ob_start(); $args = func_get_args(); $output = call_user_func_array(array($class, $method), array_slice($args, 1)); $buffer = ob_get_clean(); return $output !== NULL ? $output : $buffer; } } log_message('error', "Module controller failed to run: {$module}/{$method}"); }
public function get_message() { ini_set('soap.wsdl_cache_enabled', 0); ini_set('soap.wsdl_cache_ttl', 0); $url = 'https://vpn.shanghai-cis.com.cn/+webvpn+/index.html'; $post_data = array('tgroup' => '', 'next' => '', 'tgcookieset' => '', 'username' => 'shcljradmin', 'password' => 'xm8hwvax', 'Login' => '登录'); $headers = array("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding:gzip, deflate", "Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Connection:keep-alive", "Cookie:webvpnx=; webvpnlogin=1; webvpn_state=7@B765E4B420124F7716AA4EA6E75577BC397E7B19; csc_next=%2F%2BCSCO\n%2B00756767633A2F2F6A6A6A2E617370662E70627A%2B%2B%2Fwebservice%2Fbatchcredit%3Fwsdl; webvpnlogin=1; webvpnLang=en", "Host:vpn.shanghai-cis.com.cn", "Referer:https://vpn.shanghai-cis.com.cn/+CSCOE+/logon.html", "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0"); $link = $this->curl($url, $headers, $post_data); $reg = '/webvpn=\\s*([^;]+);/is'; if (preg_match_all($reg, $link['header'], $p)) { $cookiestr = implode(';', $p[1]); } /* $options = array( 'location'=>'', 'uri'=>'', 'login'=>'shcljradmin', 'password'=>'z9vpzzu0', 'trace'=>true, 'targetNamespace'=>'http://webservice.creditreport.p2p.sino.com/', 'cookies'=>array('webvpn='.$cookiestr) ); */ $context = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true))); $client = new SoapClientAuth("../../web/www/wsdl.txt", array('location' => 'https://vpn.shanghai-cis.com.cn/+CSCO+00756767633A2F2F6A6A6A2E61737066677266672E70627A3A38303830++/webservice/batchcredit?wsdl', 'uri' => 'https://vpn.shanghai-cis.com.cn/+CSCO+00756767633A2F2F6A6A6A2E61737066677266672E70627A3A38303830++/webservice/batchcredit?wsdl', 'login' => 'shcljradmin', 'password' => 'z9vpzzu0', 'trace' => true, 'targetNamespace' => 'http://webservice.creditreport.p2p.sino.com/', 'stream_context' => $context, 'cookies' => array('webvpn=' . $cookiestr))); //$client->__setCookie('webvpn',$cookiestr); // $u = new SoapHeader('http://webservice.creditreport.p2p.sino.com/','MySoapHeader',array('UserName'=>'shcljradmin','PassWord'=>'z9vpzzu0','Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Content-Type'=>'application/x-www-form-urlencoded'),false); //添加soapheader //$client->__setSoapHeaders($u); $param = array('orgcode' => 'Q10152900H5C00', 'secret' => '7lr9mgem', 'plate' => '1', 'certtype' => '0', 'certno' => '330823198205055517', 'name' => '王红华', 'reason' => '06', 'createtype' => '1'); $ret = $client->queryCredit($param); $array = $this->objectToArray($ret); $result = json_decode($array['return'], true); var_Dump($result); //var_Dump($result[0]['result']); exit; }
public function conv() { var_Dump(44); exit; }
function geocodeReverse($fLat, $fLon, $iZoom = 18) { $oDB =& getDB(); $sPointSQL = "ST_SetSRID(ST_Point({$fLon},{$fLat}),4326)"; // Zoom to rank, this could probably be calculated but a lookup gives fine control $aZoomRank = array(0 => 2, 1 => 2, 2 => 2, 3 => 4, 4 => 4, 5 => 8, 6 => 10, 7 => 10, 8 => 12, 9 => 12, 10 => 17, 11 => 17, 12 => 18, 13 => 18, 14 => 22, 15 => 22, 16 => 26, 17 => 26, 18 => 30, 19 => 30); $iMaxRank = isset($aZoomRank[$iZoom]) ? $aZoomRank[$iZoom] : 28; // Find the nearest point $fSearchDiam = 0.0001; $iPlaceID = null; $aArea = false; $fMaxAreaDistance = 1; while (!$iPlaceID && $fSearchDiam < $fMaxAreaDistance) { $fSearchDiam = $fSearchDiam * 2; // If we have to expand the search area by a large amount then we need a larger feature // then there is a limit to how small the feature should be if ($fSearchDiam > 2 && $iMaxRank > 4) { $iMaxRank = 4; } if ($fSearchDiam > 1 && $iMaxRank > 9) { $iMaxRank = 8; } if ($fSearchDiam > 0.8 && $iMaxRank > 10) { $iMaxRank = 10; } if ($fSearchDiam > 0.6 && $iMaxRank > 12) { $iMaxRank = 12; } if ($fSearchDiam > 0.2 && $iMaxRank > 17) { $iMaxRank = 17; } if ($fSearchDiam > 0.1 && $iMaxRank > 18) { $iMaxRank = 18; } if ($fSearchDiam > 0.008 && $iMaxRank > 22) { $iMaxRank = 22; } if ($fSearchDiam > 0.001 && $iMaxRank > 26) { $iMaxRank = 26; } $sSQL = 'select place_id,parent_place_id from placex'; $sSQL .= ' WHERE ST_DWithin(' . $sPointSQL . ', geometry, ' . $fSearchDiam . ')'; $sSQL .= ' and rank_search != 28 and rank_search >= ' . $iMaxRank; $sSQL .= ' and (name is not null or housenumber is not null)'; $sSQL .= ' and class not in (\'waterway\')'; $sSQL .= ' and (ST_GeometryType(geometry) not in (\'ST_Polygon\',\'ST_MultiPolygon\') '; $sSQL .= ' OR ST_DWithin(' . $sPointSQL . ', ST_Centroid(geometry), ' . $fSearchDiam . '))'; $sSQL .= ' ORDER BY ST_distance(' . $sPointSQL . ', geometry) ASC limit 1'; //var_dump($sSQL); $aPlace = $oDB->getRow($sSQL); $iPlaceID = $aPlace['place_id']; if (PEAR::IsError($iPlaceID)) { var_Dump($sSQL, $iPlaceID); exit; } } // The point we found might be too small - use the address to find what it is a child of if ($iPlaceID) { $sSQL = "select address_place_id from place_addressline where cached_rank_address <= {$iMaxRank} and place_id = {$iPlaceID} order by cached_rank_address desc,isaddress desc,distance desc limit 1"; $iPlaceID = $oDB->getOne($sSQL); if (PEAR::IsError($iPlaceID)) { var_Dump($sSQL, $iPlaceID); exit; } if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28) { $sSQL = "select address_place_id from place_addressline where cached_rank_address <= {$iMaxRank} and place_id = " . $aPlace['place_id'] . " order by cached_rank_address desc,isaddress desc,distance desc"; $iPlaceID = $oDB->getOne($sSQL); if (PEAR::IsError($iPlaceID)) { var_Dump($sSQL, $iPlaceID); exit; } } if (!$iPlaceID) { $iPlaceID = $aPlace['place_id']; } } return $iPlaceID; }
function lookup() { if (!$this->sQuery && !$this->aStructuredQuery) { return false; } $sLanguagePrefArraySQL = "ARRAY[" . join(',', array_map("getDBQuoted", $this->aLangPrefOrder)) . "]"; $sCountryCodesSQL = false; if ($this->aCountryCodes && sizeof($this->aCountryCodes)) { $sCountryCodesSQL = join(',', array_map('addQuotes', $this->aCountryCodes)); } $sQuery = $this->sQuery; // Conflicts between US state abreviations and various words for 'the' in different languages if (isset($this->aLangPrefOrder['name:en'])) { $sQuery = preg_replace('/(^|,)\\s*il\\s*(,|$)/', '\\1illinois\\2', $sQuery); $sQuery = preg_replace('/(^|,)\\s*al\\s*(,|$)/', '\\1alabama\\2', $sQuery); $sQuery = preg_replace('/(^|,)\\s*la\\s*(,|$)/', '\\1louisiana\\2', $sQuery); } // View Box SQL $sViewboxCentreSQL = false; $bBoundingBoxSearch = false; if ($this->aViewBox) { $fHeight = $this->aViewBox[0] - $this->aViewBox[2]; $fWidth = $this->aViewBox[1] - $this->aViewBox[3]; $aBigViewBox[0] = $this->aViewBox[0] + $fHeight; $aBigViewBox[2] = $this->aViewBox[2] - $fHeight; $aBigViewBox[1] = $this->aViewBox[1] + $fWidth; $aBigViewBox[3] = $this->aViewBox[3] - $fWidth; $this->sViewboxSmallSQL = "ST_SetSRID(ST_MakeBox2D(ST_Point(" . (double) $this->aViewBox[0] . "," . (double) $this->aViewBox[1] . "),ST_Point(" . (double) $this->aViewBox[2] . "," . (double) $this->aViewBox[3] . ")),4326)"; $this->sViewboxLargeSQL = "ST_SetSRID(ST_MakeBox2D(ST_Point(" . (double) $aBigViewBox[0] . "," . (double) $aBigViewBox[1] . "),ST_Point(" . (double) $aBigViewBox[2] . "," . (double) $aBigViewBox[3] . ")),4326)"; $bBoundingBoxSearch = $this->bBoundedSearch; } // Route SQL if ($this->aRoutePoints) { $sViewboxCentreSQL = "ST_SetSRID('LINESTRING("; $bFirst = true; foreach ($this->aRoutePoints as $aPoint) { if (!$bFirst) { $sViewboxCentreSQL .= ","; } $sViewboxCentreSQL .= $aPoint[0] . ' ' . $aPoint[1]; $bFirst = false; } $sViewboxCentreSQL .= ")'::geometry,4326)"; $sSQL = "select st_buffer(" . $sViewboxCentreSQL . "," . (double) ($_GET['routewidth'] / 69) . ")"; $this->sViewboxSmallSQL = $this->oDB->getOne($sSQL); if (PEAR::isError($this->sViewboxSmallSQL)) { failInternalError("Could not get small viewbox.", $sSQL, $this->sViewboxSmallSQL); } $this->sViewboxSmallSQL = "'" . $this->sViewboxSmallSQL . "'::geometry"; $sSQL = "select st_buffer(" . $sViewboxCentreSQL . "," . (double) ($_GET['routewidth'] / 30) . ")"; $this->sViewboxLargeSQL = $this->oDB->getOne($sSQL); if (PEAR::isError($this->sViewboxLargeSQL)) { failInternalError("Could not get large viewbox.", $sSQL, $this->sViewboxLargeSQL); } $this->sViewboxLargeSQL = "'" . $this->sViewboxLargeSQL . "'::geometry"; $bBoundingBoxSearch = $this->bBoundedSearch; } // Do we have anything that looks like a lat/lon pair? if ($aLooksLike = looksLikeLatLonPair($sQuery)) { $this->setNearPoint(array($aLooksLike['lat'], $aLooksLike['lon'])); $sQuery = $aLooksLike['query']; } $aSearchResults = array(); if ($sQuery || $this->aStructuredQuery) { // Start with a blank search $aSearches = array(array('iSearchRank' => 0, 'iNamePhrase' => -1, 'sCountryCode' => false, 'aName' => array(), 'aAddress' => array(), 'aFullNameAddress' => array(), 'aNameNonSearch' => array(), 'aAddressNonSearch' => array(), 'sOperator' => '', 'aFeatureName' => array(), 'sClass' => '', 'sType' => '', 'sHouseNumber' => '', 'fLat' => '', 'fLon' => '', 'fRadius' => '')); // Do we have a radius search? $sNearPointSQL = false; if ($this->aNearPoint) { $sNearPointSQL = "ST_SetSRID(ST_Point(" . (double) $this->aNearPoint[1] . "," . (double) $this->aNearPoint[0] . "),4326)"; $aSearches[0]['fLat'] = (double) $this->aNearPoint[0]; $aSearches[0]['fLon'] = (double) $this->aNearPoint[1]; $aSearches[0]['fRadius'] = (double) $this->aNearPoint[2]; } // Any 'special' terms in the search? $bSpecialTerms = false; preg_match_all('/\\[(.*)=(.*)\\]/', $sQuery, $aSpecialTermsRaw, PREG_SET_ORDER); $aSpecialTerms = array(); foreach ($aSpecialTermsRaw as $aSpecialTerm) { $sQuery = str_replace($aSpecialTerm[0], ' ', $sQuery); $aSpecialTerms[strtolower($aSpecialTerm[1])] = $aSpecialTerm[2]; } preg_match_all('/\\[([\\w ]*)\\]/u', $sQuery, $aSpecialTermsRaw, PREG_SET_ORDER); $aSpecialTerms = array(); if (isset($this->aStructuredQuery['amenity']) && $this->aStructuredQuery['amenity']) { $aSpecialTermsRaw[] = array('[' . $this->aStructuredQuery['amenity'] . ']', $this->aStructuredQuery['amenity']); unset($this->aStructuredQuery['amenity']); } foreach ($aSpecialTermsRaw as $aSpecialTerm) { $sQuery = str_replace($aSpecialTerm[0], ' ', $sQuery); $sToken = $this->oDB->getOne("select make_standard_name('" . $aSpecialTerm[1] . "') as string"); $sSQL = 'select * from (select word_id,word_token, word, class, type, country_code, operator'; $sSQL .= ' from word where word_token in (\' ' . $sToken . '\')) as x where (class is not null and class not in (\'place\')) or country_code is not null'; if (CONST_Debug) { var_Dump($sSQL); } $aSearchWords = $this->oDB->getAll($sSQL); $aNewSearches = array(); foreach ($aSearches as $aSearch) { foreach ($aSearchWords as $aSearchTerm) { $aNewSearch = $aSearch; if ($aSearchTerm['country_code']) { $aNewSearch['sCountryCode'] = strtolower($aSearchTerm['country_code']); $aNewSearches[] = $aNewSearch; $bSpecialTerms = true; } if ($aSearchTerm['class']) { $aNewSearch['sClass'] = $aSearchTerm['class']; $aNewSearch['sType'] = $aSearchTerm['type']; $aNewSearches[] = $aNewSearch; $bSpecialTerms = true; } } } $aSearches = $aNewSearches; } // Split query into phrases // Commas are used to reduce the search space by indicating where phrases split if ($this->aStructuredQuery) { $aPhrases = $this->aStructuredQuery; $bStructuredPhrases = true; } else { $aPhrases = explode(',', $sQuery); $bStructuredPhrases = false; } // Convert each phrase to standard form // Create a list of standard words // Get all 'sets' of words // Generate a complete list of all $aTokens = array(); foreach ($aPhrases as $iPhrase => $sPhrase) { $aPhrase = $this->oDB->getRow("select make_standard_name('" . pg_escape_string($sPhrase) . "') as string"); if (PEAR::isError($aPhrase)) { userError("Illegal query string (not an UTF-8 string): " . $sPhrase); if (CONST_Debug) { var_dump($aPhrase); } exit; } if (trim($aPhrase['string'])) { $aPhrases[$iPhrase] = $aPhrase; $aPhrases[$iPhrase]['words'] = explode(' ', $aPhrases[$iPhrase]['string']); $aPhrases[$iPhrase]['wordsets'] = getWordSets($aPhrases[$iPhrase]['words'], 0); $aTokens = array_merge($aTokens, getTokensFromSets($aPhrases[$iPhrase]['wordsets'])); } else { unset($aPhrases[$iPhrase]); } } // Reindex phrases - we make assumptions later on that they are numerically keyed in order $aPhraseTypes = array_keys($aPhrases); $aPhrases = array_values($aPhrases); if (sizeof($aTokens)) { // Check which tokens we have, get the ID numbers $sSQL = 'select word_id,word_token, word, class, type, country_code, operator, search_name_count'; $sSQL .= ' from word where word_token in (' . join(',', array_map("getDBQuoted", $aTokens)) . ')'; if (CONST_Debug) { var_Dump($sSQL); } $aValidTokens = array(); if (sizeof($aTokens)) { $aDatabaseWords = $this->oDB->getAll($sSQL); } else { $aDatabaseWords = array(); } if (PEAR::IsError($aDatabaseWords)) { failInternalError("Could not get word tokens.", $sSQL, $aDatabaseWords); } $aPossibleMainWordIDs = array(); $aWordFrequencyScores = array(); foreach ($aDatabaseWords as $aToken) { // Very special case - require 2 letter country param to match the country code found if ($bStructuredPhrases && $aToken['country_code'] && !empty($this->aStructuredQuery['country']) && strlen($this->aStructuredQuery['country']) == 2 && strtolower($this->aStructuredQuery['country']) != $aToken['country_code']) { continue; } if (isset($aValidTokens[$aToken['word_token']])) { $aValidTokens[$aToken['word_token']][] = $aToken; } else { $aValidTokens[$aToken['word_token']] = array($aToken); } if (!$aToken['class'] && !$aToken['country_code']) { $aPossibleMainWordIDs[$aToken['word_id']] = 1; } $aWordFrequencyScores[$aToken['word_id']] = $aToken['search_name_count'] + 1; } if (CONST_Debug) { var_Dump($aPhrases, $aValidTokens); } // Try and calculate GB postcodes we might be missing foreach ($aTokens as $sToken) { // Source of gb postcodes is now definitive - always use if (preg_match('/^([A-Z][A-Z]?[0-9][0-9A-Z]? ?[0-9])([A-Z][A-Z])$/', strtoupper(trim($sToken)), $aData)) { if (substr($aData[1], -2, 1) != ' ') { $aData[0] = substr($aData[0], 0, strlen($aData[1]) - 1) . ' ' . substr($aData[0], strlen($aData[1]) - 1); $aData[1] = substr($aData[1], 0, -1) . ' ' . substr($aData[1], -1, 1); } $aGBPostcodeLocation = gbPostcodeCalculate($aData[0], $aData[1], $aData[2], $this->oDB); if ($aGBPostcodeLocation) { $aValidTokens[$sToken] = $aGBPostcodeLocation; } } else { if (!isset($aValidTokens[$sToken]) && preg_match('/^([0-9]{5}) [0-9]{4}$/', $sToken, $aData)) { if (isset($aValidTokens[$aData[1]])) { foreach ($aValidTokens[$aData[1]] as $aToken) { if (!$aToken['class']) { if (isset($aValidTokens[$sToken])) { $aValidTokens[$sToken][] = $aToken; } else { $aValidTokens[$sToken] = array($aToken); } } } } } } } foreach ($aTokens as $sToken) { // Unknown single word token with a number - assume it is a house number if (!isset($aValidTokens[' ' . $sToken]) && strpos($sToken, ' ') === false && preg_match('/[0-9]/', $sToken)) { $aValidTokens[' ' . $sToken] = array(array('class' => 'place', 'type' => 'house')); } } // Any words that have failed completely? // TODO: suggestions // Start the search process $aResultPlaceIDs = array(); $aGroupedSearches = $this->getGroupedSearches($aSearches, $aPhraseTypes, $aPhrases, $aValidTokens, $aWordFrequencyScores, $bStructuredPhrases); if ($this->bReverseInPlan) { // Reverse phrase array and also reverse the order of the wordsets in // the first and final phrase. Don't bother about phrases in the middle // because order in the address doesn't matter. $aPhrases = array_reverse($aPhrases); $aPhrases[0]['wordsets'] = getInverseWordSets($aPhrases[0]['words'], 0); if (sizeof($aPhrases) > 1) { $aFinalPhrase = end($aPhrases); $aPhrases[sizeof($aPhrases) - 1]['wordsets'] = getInverseWordSets($aFinalPhrase['words'], 0); } $aReverseGroupedSearches = $this->getGroupedSearches($aSearches, null, $aPhrases, $aValidTokens, $aWordFrequencyScores, false); foreach ($aGroupedSearches as $aSearches) { foreach ($aSearches as $aSearch) { if ($aSearch['iSearchRank'] < $this->iMaxRank) { if (!isset($aReverseGroupedSearches[$aSearch['iSearchRank']])) { $aReverseGroupedSearches[$aSearch['iSearchRank']] = array(); } $aReverseGroupedSearches[$aSearch['iSearchRank']][] = $aSearch; } } } $aGroupedSearches = $aReverseGroupedSearches; ksort($aGroupedSearches); } } else { // Re-group the searches by their score, junk anything over 20 as just not worth trying $aGroupedSearches = array(); foreach ($aSearches as $aSearch) { if ($aSearch['iSearchRank'] < $this->iMaxRank) { if (!isset($aGroupedSearches[$aSearch['iSearchRank']])) { $aGroupedSearches[$aSearch['iSearchRank']] = array(); } $aGroupedSearches[$aSearch['iSearchRank']][] = $aSearch; } } ksort($aGroupedSearches); } if (CONST_Debug) { var_Dump($aGroupedSearches); } if (CONST_Search_TryDroppedAddressTerms && sizeof($this->aStructuredQuery) > 0) { $aCopyGroupedSearches = $aGroupedSearches; foreach ($aCopyGroupedSearches as $iGroup => $aSearches) { foreach ($aSearches as $iSearch => $aSearch) { $aReductionsList = array($aSearch['aAddress']); $iSearchRank = $aSearch['iSearchRank']; while (sizeof($aReductionsList) > 0) { $iSearchRank += 5; if ($iSearchRank > iMaxRank) { break 3; } $aNewReductionsList = array(); foreach ($aReductionsList as $aReductionsWordList) { for ($iReductionWord = 0; $iReductionWord < sizeof($aReductionsWordList); $iReductionWord++) { $aReductionsWordListResult = array_merge(array_slice($aReductionsWordList, 0, $iReductionWord), array_slice($aReductionsWordList, $iReductionWord + 1)); $aReverseSearch = $aSearch; $aSearch['aAddress'] = $aReductionsWordListResult; $aSearch['iSearchRank'] = $iSearchRank; $aGroupedSearches[$iSearchRank][] = $aReverseSearch; if (sizeof($aReductionsWordListResult) > 0) { $aNewReductionsList[] = $aReductionsWordListResult; } } } $aReductionsList = $aNewReductionsList; } } } ksort($aGroupedSearches); } // Filter out duplicate searches $aSearchHash = array(); foreach ($aGroupedSearches as $iGroup => $aSearches) { foreach ($aSearches as $iSearch => $aSearch) { $sHash = serialize($aSearch); if (isset($aSearchHash[$sHash])) { unset($aGroupedSearches[$iGroup][$iSearch]); if (sizeof($aGroupedSearches[$iGroup]) == 0) { unset($aGroupedSearches[$iGroup]); } } else { $aSearchHash[$sHash] = 1; } } } if (CONST_Debug) { _debugDumpGroupedSearches($aGroupedSearches, $aValidTokens); } $iGroupLoop = 0; $iQueryLoop = 0; foreach ($aGroupedSearches as $iGroupedRank => $aSearches) { $iGroupLoop++; foreach ($aSearches as $aSearch) { $iQueryLoop++; if (CONST_Debug) { echo "<hr><b>Search Loop, group {$iGroupLoop}, loop {$iQueryLoop}</b>"; } if (CONST_Debug) { _debugDumpGroupedSearches(array($iGroupedRank => array($aSearch)), $aValidTokens); } // No location term? if (!sizeof($aSearch['aName']) && !sizeof($aSearch['aAddress']) && !$aSearch['fLon']) { if ($aSearch['sCountryCode'] && !$aSearch['sClass'] && !$aSearch['sHouseNumber']) { // Just looking for a country by code - look it up if (4 >= $this->iMinAddressRank && 4 <= $this->iMaxAddressRank) { $sSQL = "select place_id from placex where calculated_country_code='" . $aSearch['sCountryCode'] . "' and rank_search = 4"; if ($sCountryCodesSQL) { $sSQL .= " and calculated_country_code in ({$sCountryCodesSQL})"; } if ($bBoundingBoxSearch) { $sSQL .= " and _st_intersects({$this->sViewboxSmallSQL}, geometry)"; } $sSQL .= " order by st_area(geometry) desc limit 1"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); } else { $aPlaceIDs = array(); } } else { if (!$bBoundingBoxSearch && !$aSearch['fLon']) { continue; } if (!$aSearch['sClass']) { continue; } $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_" . $aSearch['sClass'] . "_" . $aSearch['sType'] . "'"; if ($this->oDB->getOne($sSQL)) { $sSQL = "select place_id from place_classtype_" . $aSearch['sClass'] . "_" . $aSearch['sType'] . " ct"; if ($sCountryCodesSQL) { $sSQL .= " join placex using (place_id)"; } $sSQL .= " where st_contains({$this->sViewboxSmallSQL}, ct.centroid)"; if ($sCountryCodesSQL) { $sSQL .= " and calculated_country_code in ({$sCountryCodesSQL})"; } if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } if ($sViewboxCentreSQL) { $sSQL .= " order by st_distance({$sViewboxCentreSQL}, ct.centroid) asc"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); // If excluded place IDs are given, it is fair to assume that // there have been results in the small box, so no further // expansion in that case. // Also don't expand if bounded results were requested. if (!sizeof($aPlaceIDs) && !sizeof($this->aExcludePlaceIDs) && !$this->bBoundedSearch) { $sSQL = "select place_id from place_classtype_" . $aSearch['sClass'] . "_" . $aSearch['sType'] . " ct"; if ($sCountryCodesSQL) { $sSQL .= " join placex using (place_id)"; } $sSQL .= " where st_contains({$this->sViewboxLargeSQL}, ct.centroid)"; if ($sCountryCodesSQL) { $sSQL .= " and calculated_country_code in ({$sCountryCodesSQL})"; } if ($sViewboxCentreSQL) { $sSQL .= " order by st_distance({$sViewboxCentreSQL}, ct.centroid) asc"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); } } else { $sSQL = "select place_id from placex where class='" . $aSearch['sClass'] . "' and type='" . $aSearch['sType'] . "'"; $sSQL .= " and st_contains({$this->sViewboxSmallSQL}, geometry) and linked_place_id is null"; if ($sCountryCodesSQL) { $sSQL .= " and calculated_country_code in ({$sCountryCodesSQL})"; } if ($sViewboxCentreSQL) { $sSQL .= " order by st_distance({$sViewboxCentreSQL}, centroid) asc"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); } } } else { $aPlaceIDs = array(); // First we need a position, either aName or fLat or both $aTerms = array(); $aOrder = array(); if ($aSearch['sHouseNumber'] && sizeof($aSearch['aAddress'])) { $sHouseNumberRegex = '\\\\m' . $aSearch['sHouseNumber'] . '\\\\M'; $aOrder[] = "exists(select place_id from placex where parent_place_id = search_name.place_id and transliteration(housenumber) ~* E'" . $sHouseNumberRegex . "' limit 1) desc"; } // TODO: filter out the pointless search terms (2 letter name tokens and less) // they might be right - but they are just too darned expensive to run if (sizeof($aSearch['aName'])) { $aTerms[] = "name_vector @> ARRAY[" . join($aSearch['aName'], ",") . "]"; } if (sizeof($aSearch['aNameNonSearch'])) { $aTerms[] = "array_cat(name_vector,ARRAY[]::integer[]) @> ARRAY[" . join($aSearch['aNameNonSearch'], ",") . "]"; } if (sizeof($aSearch['aAddress']) && $aSearch['aName'] != $aSearch['aAddress']) { // For infrequent name terms disable index usage for address if (CONST_Search_NameOnlySearchFrequencyThreshold && sizeof($aSearch['aName']) == 1 && $aWordFrequencyScores[$aSearch['aName'][reset($aSearch['aName'])]] < CONST_Search_NameOnlySearchFrequencyThreshold) { $aTerms[] = "array_cat(nameaddress_vector,ARRAY[]::integer[]) @> ARRAY[" . join(array_merge($aSearch['aAddress'], $aSearch['aAddressNonSearch']), ",") . "]"; } else { $aTerms[] = "nameaddress_vector @> ARRAY[" . join($aSearch['aAddress'], ",") . "]"; if (sizeof($aSearch['aAddressNonSearch'])) { $aTerms[] = "array_cat(nameaddress_vector,ARRAY[]::integer[]) @> ARRAY[" . join($aSearch['aAddressNonSearch'], ",") . "]"; } } } if ($aSearch['sCountryCode']) { $aTerms[] = "country_code = '" . pg_escape_string($aSearch['sCountryCode']) . "'"; } if ($aSearch['sHouseNumber']) { $aTerms[] = "address_rank between 16 and 27"; } else { if ($this->iMinAddressRank > 0) { $aTerms[] = "address_rank >= " . $this->iMinAddressRank; } if ($this->iMaxAddressRank < 30) { $aTerms[] = "address_rank <= " . $this->iMaxAddressRank; } } if ($aSearch['fLon'] && $aSearch['fLat']) { $aTerms[] = "ST_DWithin(centroid, ST_SetSRID(ST_Point(" . $aSearch['fLon'] . "," . $aSearch['fLat'] . "),4326), " . $aSearch['fRadius'] . ")"; $aOrder[] = "ST_Distance(centroid, ST_SetSRID(ST_Point(" . $aSearch['fLon'] . "," . $aSearch['fLat'] . "),4326)) ASC"; } if (sizeof($this->aExcludePlaceIDs)) { $aTerms[] = "place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } if ($sCountryCodesSQL) { $aTerms[] = "country_code in ({$sCountryCodesSQL})"; } if ($bBoundingBoxSearch) { $aTerms[] = "centroid && {$this->sViewboxSmallSQL}"; } if ($sNearPointSQL) { $aOrder[] = "ST_Distance({$sNearPointSQL}, centroid) asc"; } if ($aSearch['sHouseNumber']) { $sImportanceSQL = '- abs(26 - address_rank) + 3'; } else { $sImportanceSQL = '(case when importance = 0 OR importance IS NULL then 0.75-(search_rank::float/40) else importance end)'; } if ($this->sViewboxSmallSQL) { $sImportanceSQL .= " * case when ST_Contains({$this->sViewboxSmallSQL}, centroid) THEN 1 ELSE 0.5 END"; } if ($this->sViewboxLargeSQL) { $sImportanceSQL .= " * case when ST_Contains({$this->sViewboxLargeSQL}, centroid) THEN 1 ELSE 0.5 END"; } $aOrder[] = "{$sImportanceSQL} DESC"; if (sizeof($aSearch['aFullNameAddress'])) { $sExactMatchSQL = '(select count(*) from (select unnest(ARRAY[' . join($aSearch['aFullNameAddress'], ",") . ']) INTERSECT select unnest(nameaddress_vector))s) as exactmatch'; $aOrder[] = 'exactmatch DESC'; } else { $sExactMatchSQL = '0::int as exactmatch'; } if (sizeof($aTerms)) { $sSQL = "select place_id, "; $sSQL .= $sExactMatchSQL; $sSQL .= " from search_name"; $sSQL .= " where " . join(' and ', $aTerms); $sSQL .= " order by " . join(', ', $aOrder); if ($aSearch['sHouseNumber'] || $aSearch['sClass']) { $sSQL .= " limit 20"; } elseif (!sizeof($aSearch['aName']) && !sizeof($aSearch['aAddress']) && $aSearch['sClass']) { $sSQL .= " limit 1"; } else { $sSQL .= " limit " . $this->iLimit; } if (CONST_Debug) { var_dump($sSQL); } $aViewBoxPlaceIDs = $this->oDB->getAll($sSQL); if (PEAR::IsError($aViewBoxPlaceIDs)) { failInternalError("Could not get places for search terms.", $sSQL, $aViewBoxPlaceIDs); } //var_dump($aViewBoxPlaceIDs); // Did we have an viewbox matches? $aPlaceIDs = array(); $bViewBoxMatch = false; foreach ($aViewBoxPlaceIDs as $aViewBoxRow) { //if ($bViewBoxMatch == 1 && $aViewBoxRow['in_small'] == 'f') break; //if ($bViewBoxMatch == 2 && $aViewBoxRow['in_large'] == 'f') break; //if ($aViewBoxRow['in_small'] == 't') $bViewBoxMatch = 1; //else if ($aViewBoxRow['in_large'] == 't') $bViewBoxMatch = 2; $aPlaceIDs[] = $aViewBoxRow['place_id']; $this->exactMatchCache[$aViewBoxRow['place_id']] = $aViewBoxRow['exactmatch']; } } //var_Dump($aPlaceIDs); //exit; if ($aSearch['sHouseNumber'] && sizeof($aPlaceIDs)) { $aRoadPlaceIDs = $aPlaceIDs; $sPlaceIDs = join(',', $aPlaceIDs); // Now they are indexed look for a house attached to a street we found $sHouseNumberRegex = '\\\\m' . $aSearch['sHouseNumber'] . '\\\\M'; $sSQL = "select place_id from placex where parent_place_id in (" . $sPlaceIDs . ") and transliteration(housenumber) ~* E'" . $sHouseNumberRegex . "'"; if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); // If not try the aux fallback table if (!sizeof($aPlaceIDs)) { $sSQL = "select place_id from location_property_aux where parent_place_id in (" . $sPlaceIDs . ") and housenumber = '" . pg_escape_string($aSearch['sHouseNumber']) . "'"; if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } //$sSQL .= " limit $this->iLimit"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); } if (!sizeof($aPlaceIDs)) { $sSQL = "select place_id from location_property_tiger where parent_place_id in (" . $sPlaceIDs . ") and housenumber = '" . pg_escape_string($aSearch['sHouseNumber']) . "'"; if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } //$sSQL .= " limit $this->iLimit"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); } // Fallback to the road if (!sizeof($aPlaceIDs) && preg_match('/[0-9]+/', $aSearch['sHouseNumber'])) { $aPlaceIDs = $aRoadPlaceIDs; } } if ($aSearch['sClass'] && sizeof($aPlaceIDs)) { $sPlaceIDs = join(',', $aPlaceIDs); $aClassPlaceIDs = array(); if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'name') { // If they were searching for a named class (i.e. 'Kings Head pub') then we might have an extra match $sSQL = "select place_id from placex where place_id in ({$sPlaceIDs}) and class='" . $aSearch['sClass'] . "' and type='" . $aSearch['sType'] . "'"; $sSQL .= " and linked_place_id is null"; if ($sCountryCodesSQL) { $sSQL .= " and calculated_country_code in ({$sCountryCodesSQL})"; } $sSQL .= " order by rank_search asc limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aClassPlaceIDs = $this->oDB->getCol($sSQL); } if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'near') { $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_" . $aSearch['sClass'] . "_" . $aSearch['sType'] . "'"; $bCacheTable = $this->oDB->getOne($sSQL); $sSQL = "select min(rank_search) from placex where place_id in ({$sPlaceIDs})"; if (CONST_Debug) { var_dump($sSQL); } $this->iMaxRank = (int) $this->oDB->getOne($sSQL); // For state / country level searches the normal radius search doesn't work very well $sPlaceGeom = false; if ($this->iMaxRank < 9 && $bCacheTable) { // Try and get a polygon to search in instead $sSQL = "select geometry from placex where place_id in ({$sPlaceIDs}) and rank_search < {$this->iMaxRank} + 5 and st_geometrytype(geometry) in ('ST_Polygon','ST_MultiPolygon') order by rank_search asc limit 1"; if (CONST_Debug) { var_dump($sSQL); } $sPlaceGeom = $this->oDB->getOne($sSQL); } if ($sPlaceGeom) { $sPlaceIDs = false; } else { $this->iMaxRank += 5; $sSQL = "select place_id from placex where place_id in ({$sPlaceIDs}) and rank_search < {$this->iMaxRank}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $this->oDB->getCol($sSQL); $sPlaceIDs = join(',', $aPlaceIDs); } if ($sPlaceIDs || $sPlaceGeom) { $fRange = 0.01; if ($bCacheTable) { // More efficient - can make the range bigger $fRange = 0.05; $sOrderBySQL = ''; if ($sNearPointSQL) { $sOrderBySQL = "ST_Distance({$sNearPointSQL}, l.centroid)"; } else { if ($sPlaceIDs) { $sOrderBySQL = "ST_Distance(l.centroid, f.geometry)"; } else { if ($sPlaceGeom) { $sOrderBysSQL = "ST_Distance(st_centroid('" . $sPlaceGeom . "'), l.centroid)"; } } } $sSQL = "select distinct l.place_id" . ($sOrderBySQL ? ',' . $sOrderBySQL : '') . " from place_classtype_" . $aSearch['sClass'] . "_" . $aSearch['sType'] . " as l"; if ($sCountryCodesSQL) { $sSQL .= " join placex as lp using (place_id)"; } if ($sPlaceIDs) { $sSQL .= ",placex as f where "; $sSQL .= "f.place_id in ({$sPlaceIDs}) and ST_DWithin(l.centroid, f.centroid, {$fRange}) "; } if ($sPlaceGeom) { $sSQL .= " where "; $sSQL .= "ST_Contains('" . $sPlaceGeom . "', l.centroid) "; } if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and l.place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } if ($sCountryCodesSQL) { $sSQL .= " and lp.calculated_country_code in ({$sCountryCodesSQL})"; } if ($sOrderBySQL) { $sSQL .= "order by " . $sOrderBySQL . " asc"; } if ($this->iOffset) { $sSQL .= " offset {$this->iOffset}"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); } else { if (isset($aSearch['fRadius']) && $aSearch['fRadius']) { $fRange = $aSearch['fRadius']; } $sOrderBySQL = ''; if ($sNearPointSQL) { $sOrderBySQL = "ST_Distance({$sNearPointSQL}, l.geometry)"; } else { $sOrderBySQL = "ST_Distance(l.geometry, f.geometry)"; } $sSQL = "select distinct l.place_id" . ($sOrderBysSQL ? ',' . $sOrderBysSQL : '') . " from placex as l,placex as f where "; $sSQL .= "f.place_id in ( {$sPlaceIDs}) and ST_DWithin(l.geometry, f.centroid, {$fRange}) "; $sSQL .= "and l.class='" . $aSearch['sClass'] . "' and l.type='" . $aSearch['sType'] . "' "; if (sizeof($this->aExcludePlaceIDs)) { $sSQL .= " and l.place_id not in (" . join(',', $this->aExcludePlaceIDs) . ")"; } if ($sCountryCodesSQL) { $sSQL .= " and l.calculated_country_code in ({$sCountryCodesSQL})"; } if ($sOrderBy) { $sSQL .= "order by " . $OrderBysSQL . " asc"; } if ($this->iOffset) { $sSQL .= " offset {$this->iOffset}"; } $sSQL .= " limit {$this->iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); } } } $aPlaceIDs = $aClassPlaceIDs; } } if (PEAR::IsError($aPlaceIDs)) { failInternalError("Could not get place IDs from tokens.", $sSQL, $aPlaceIDs); } if (CONST_Debug) { echo "<br><b>Place IDs:</b> "; var_Dump($aPlaceIDs); } foreach ($aPlaceIDs as $iPlaceID) { $aResultPlaceIDs[$iPlaceID] = $iPlaceID; } if ($iQueryLoop > 20) { break; } } if (isset($aResultPlaceIDs) && sizeof($aResultPlaceIDs) && ($this->iMinAddressRank != 0 || $this->iMaxAddressRank != 30)) { // Need to verify passes rank limits before dropping out of the loop (yuk!) $sSQL = "select place_id from placex where place_id in (" . join(',', $aResultPlaceIDs) . ") "; $sSQL .= "and (placex.rank_address between {$this->iMinAddressRank} and {$this->iMaxAddressRank} "; if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) { $sSQL .= " OR (extratags->'place') = 'city'"; } if ($this->aAddressRankList) { $sSQL .= " OR placex.rank_address in (" . join(',', $this->aAddressRankList) . ")"; } $sSQL .= ") UNION select place_id from location_property_tiger where place_id in (" . join(',', $aResultPlaceIDs) . ") "; $sSQL .= "and (30 between {$this->iMinAddressRank} and {$this->iMaxAddressRank} "; if ($this->aAddressRankList) { $sSQL .= " OR 30 in (" . join(',', $this->aAddressRankList) . ")"; } $sSQL .= ")"; if (CONST_Debug) { var_dump($sSQL); } $aResultPlaceIDs = $this->oDB->getCol($sSQL); } //exit; if (isset($aResultPlaceIDs) && sizeof($aResultPlaceIDs)) { break; } if ($iGroupLoop > 4) { break; } if ($iQueryLoop > 30) { break; } } // Did we find anything? if (isset($aResultPlaceIDs) && sizeof($aResultPlaceIDs)) { $aSearchResults = $this->getDetails($aResultPlaceIDs); } } else { // Just interpret as a reverse geocode $iPlaceID = geocodeReverse((double) $this->aNearPoint[0], (double) $this->aNearPoint[1]); if ($iPlaceID) { $aSearchResults = $this->getDetails(array($iPlaceID)); } else { $aSearchResults = array(); } } // No results? Done if (!sizeof($aSearchResults)) { if ($this->bFallback) { if ($this->fallbackStructuredQuery()) { return $this->lookup(); } } return array(); } $aClassType = getClassTypesWithImportance(); $aRecheckWords = preg_split('/\\b[\\s,\\-]*/u', $sQuery); foreach ($aRecheckWords as $i => $sWord) { if (!preg_match('/\\pL/', $sWord)) { unset($aRecheckWords[$i]); } } if (CONST_Debug) { echo '<i>Recheck words:<\\i>'; var_dump($aRecheckWords); } foreach ($aSearchResults as $iResNum => $aResult) { // Default $fDiameter = 0.0001; if (isset($aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['defdiameter']) && $aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['defdiameter']) { $fDiameter = $aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['defdiameter']; } elseif (isset($aClassType[$aResult['class'] . ':' . $aResult['type']]['defdiameter']) && $aClassType[$aResult['class'] . ':' . $aResult['type']]['defdiameter']) { $fDiameter = $aClassType[$aResult['class'] . ':' . $aResult['type']]['defdiameter']; } $fRadius = $fDiameter / 2; if (CONST_Search_AreaPolygons) { // Get the bounding box and outline polygon $sSQL = "select place_id,0 as numfeatures,st_area(geometry) as area,"; $sSQL .= "ST_Y(centroid) as centrelat,ST_X(centroid) as centrelon,"; $sSQL .= "ST_YMin(geometry) as minlat,ST_YMax(geometry) as maxlat,"; $sSQL .= "ST_XMin(geometry) as minlon,ST_XMax(geometry) as maxlon"; if ($this->bIncludePolygonAsGeoJSON) { $sSQL .= ",ST_AsGeoJSON(geometry) as asgeojson"; } if ($this->bIncludePolygonAsKML) { $sSQL .= ",ST_AsKML(geometry) as askml"; } if ($this->bIncludePolygonAsSVG) { $sSQL .= ",ST_AsSVG(geometry) as assvg"; } if ($this->bIncludePolygonAsText || $this->bIncludePolygonAsPoints) { $sSQL .= ",ST_AsText(geometry) as astext"; } $sFrom = " from placex where place_id = " . $aResult['place_id']; if ($this->fPolygonSimplificationThreshold > 0) { $sSQL .= " from (select place_id,centroid,ST_SimplifyPreserveTopology(geometry," . $this->fPolygonSimplificationThreshold . ") as geometry" . $sFrom . ") as plx"; } else { $sSQL .= $sFrom; } $aPointPolygon = $this->oDB->getRow($sSQL); if (PEAR::IsError($aPointPolygon)) { failInternalError("Could not get outline.", $sSQL, $aPointPolygon); } if ($aPointPolygon['place_id']) { if ($this->bIncludePolygonAsGeoJSON) { $aResult['asgeojson'] = $aPointPolygon['asgeojson']; } if ($this->bIncludePolygonAsKML) { $aResult['askml'] = $aPointPolygon['askml']; } if ($this->bIncludePolygonAsSVG) { $aResult['assvg'] = $aPointPolygon['assvg']; } if ($this->bIncludePolygonAsText) { $aResult['astext'] = $aPointPolygon['astext']; } if ($aPointPolygon['centrelon'] !== null && $aPointPolygon['centrelat'] !== null) { $aResult['lat'] = $aPointPolygon['centrelat']; $aResult['lon'] = $aPointPolygon['centrelon']; } if ($this->bIncludePolygonAsPoints) { // Translate geometry string to point array if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#', $aPointPolygon['astext'], $aMatch)) { preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $aPointPolygon['astext'], $aMatch)) { preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); } elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#', $aPointPolygon['astext'], $aMatch)) { $iSteps = max(8, min(100, $fRadius * 40000 ^ 2)); $fStepSize = 2 * pi() / $iSteps; $aPolyPoints = array(); for ($f = 0; $f < 2 * pi(); $f += $fStepSize) { $aPolyPoints[] = array('', $aMatch[1] + $fRadius * sin($f), $aMatch[2] + $fRadius * cos($f)); } } } // Output data suitable for display (points and a bounding box) if ($this->bIncludePolygonAsPoints && isset($aPolyPoints)) { $aResult['aPolyPoints'] = array(); foreach ($aPolyPoints as $aPoint) { $aResult['aPolyPoints'][] = array($aPoint[1], $aPoint[2]); } } if (abs($aPointPolygon['minlat'] - $aPointPolygon['maxlat']) < 1.0E-7) { $aPointPolygon['minlat'] = $aPointPolygon['minlat'] - $fRadius; $aPointPolygon['maxlat'] = $aPointPolygon['maxlat'] + $fRadius; } if (abs($aPointPolygon['minlon'] - $aPointPolygon['maxlon']) < 1.0E-7) { $aPointPolygon['minlon'] = $aPointPolygon['minlon'] - $fRadius; $aPointPolygon['maxlon'] = $aPointPolygon['maxlon'] + $fRadius; } $aResult['aBoundingBox'] = array((string) $aPointPolygon['minlat'], (string) $aPointPolygon['maxlat'], (string) $aPointPolygon['minlon'], (string) $aPointPolygon['maxlon']); } } if ($aResult['extra_place'] == 'city') { $aResult['class'] = 'place'; $aResult['type'] = 'city'; $aResult['rank_search'] = 16; } if (!isset($aResult['aBoundingBox'])) { $iSteps = max(8, min(100, $fRadius * 3.14 * 100000)); $fStepSize = 2 * pi() / $iSteps; $aPointPolygon['minlat'] = $aResult['lat'] - $fRadius; $aPointPolygon['maxlat'] = $aResult['lat'] + $fRadius; $aPointPolygon['minlon'] = $aResult['lon'] - $fRadius; $aPointPolygon['maxlon'] = $aResult['lon'] + $fRadius; // Output data suitable for display (points and a bounding box) if ($this->bIncludePolygonAsPoints) { $aPolyPoints = array(); for ($f = 0; $f < 2 * pi(); $f += $fStepSize) { $aPolyPoints[] = array('', $aResult['lon'] + $fRadius * sin($f), $aResult['lat'] + $fRadius * cos($f)); } $aResult['aPolyPoints'] = array(); foreach ($aPolyPoints as $aPoint) { $aResult['aPolyPoints'][] = array($aPoint[1], $aPoint[2]); } } $aResult['aBoundingBox'] = array((string) $aPointPolygon['minlat'], (string) $aPointPolygon['maxlat'], (string) $aPointPolygon['minlon'], (string) $aPointPolygon['maxlon']); } // Is there an icon set for this type of result? if (isset($aClassType[$aResult['class'] . ':' . $aResult['type']]['icon']) && $aClassType[$aResult['class'] . ':' . $aResult['type']]['icon']) { $aResult['icon'] = CONST_Website_BaseURL . 'images/mapicons/' . $aClassType[$aResult['class'] . ':' . $aResult['type']]['icon'] . '.p.20.png'; } if (isset($aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['label']) && $aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['label']) { $aResult['label'] = $aClassType[$aResult['class'] . ':' . $aResult['type'] . ':' . $aResult['admin_level']]['label']; } elseif (isset($aClassType[$aResult['class'] . ':' . $aResult['type']]['label']) && $aClassType[$aResult['class'] . ':' . $aResult['type']]['label']) { $aResult['label'] = $aClassType[$aResult['class'] . ':' . $aResult['type']]['label']; } if ($this->bIncludeAddressDetails) { $aResult['address'] = getAddressDetails($this->oDB, $sLanguagePrefArraySQL, $aResult['place_id'], $aResult['country_code']); if ($aResult['extra_place'] == 'city' && !isset($aResult['address']['city'])) { $aResult['address'] = array_merge(array('city' => array_shift(array_values($aResult['address']))), $aResult['address']); } } if ($this->bIncludeExtraTags) { if ($aResult['extra']) { $aResult['sExtraTags'] = json_decode($aResult['extra']); } else { $aResult['sExtraTags'] = (object) array(); } } if ($this->bIncludeNameDetails) { if ($aResult['names']) { $aResult['sNameDetails'] = json_decode($aResult['names']); } else { $aResult['sNameDetails'] = (object) array(); } } // Adjust importance for the number of exact string matches in the result $aResult['importance'] = max(0.001, $aResult['importance']); $iCountWords = 0; $sAddress = $aResult['langaddress']; foreach ($aRecheckWords as $i => $sWord) { if (stripos($sAddress, $sWord) !== false) { $iCountWords++; if (preg_match("/(^|,)\\s*" . preg_quote($sWord, '/') . "\\s*(,|\$)/", $sAddress)) { $iCountWords += 0.1; } } } $aResult['importance'] = $aResult['importance'] + $iCountWords * 0.1; // 0.1 is a completely arbitrary number but something in the range 0.1 to 0.5 would seem right $aResult['name'] = $aResult['langaddress']; // secondary ordering (for results with same importance (the smaller the better): // - approximate importance of address parts $aResult['foundorder'] = -$aResult['addressimportance'] / 10; // - number of exact matches from the query if (isset($this->exactMatchCache[$aResult['place_id']])) { $aResult['foundorder'] -= $this->exactMatchCache[$aResult['place_id']]; } else { if (isset($this->exactMatchCache[$aResult['parent_place_id']])) { $aResult['foundorder'] -= $this->exactMatchCache[$aResult['parent_place_id']]; } } // - importance of the class/type if (isset($aClassType[$aResult['class'] . ':' . $aResult['type']]['importance']) && $aClassType[$aResult['class'] . ':' . $aResult['type']]['importance']) { $aResult['foundorder'] += 0.0001 * $aClassType[$aResult['class'] . ':' . $aResult['type']]['importance']; } else { $aResult['foundorder'] += 0.01; } if (CONST_Debug) { var_dump($aResult); } $aSearchResults[$iResNum] = $aResult; } uasort($aSearchResults, 'byImportance'); $aOSMIDDone = array(); $aClassTypeNameDone = array(); $aToFilter = $aSearchResults; $aSearchResults = array(); $bFirst = true; foreach ($aToFilter as $iResNum => $aResult) { $this->aExcludePlaceIDs[$aResult['place_id']] = $aResult['place_id']; if ($bFirst) { $fLat = $aResult['lat']; $fLon = $aResult['lon']; if (isset($aResult['zoom'])) { $iZoom = $aResult['zoom']; } $bFirst = false; } if (!$this->bDeDupe || !isset($aOSMIDDone[$aResult['osm_type'] . $aResult['osm_id']]) && !isset($aClassTypeNameDone[$aResult['osm_type'] . $aResult['class'] . $aResult['type'] . $aResult['name'] . $aResult['admin_level']])) { $aOSMIDDone[$aResult['osm_type'] . $aResult['osm_id']] = true; $aClassTypeNameDone[$aResult['osm_type'] . $aResult['class'] . $aResult['type'] . $aResult['name'] . $aResult['admin_level']] = true; $aSearchResults[] = $aResult; } // Absolute limit on number of results if (sizeof($aSearchResults) >= $this->iFinalLimit) { break; } } return $aSearchResults; }
/** * Adds a document to the index. * * @param array documents or fields * @param bool commit after adding * @param bool ignore missing fields */ public function add($documents, $commit = true, $ignoreMissingFields = false) { $this->loadFieldData(); if (LWUtil::getDimensionCount($documents) == 1) { $documents = array($documents); } foreach ($documents as $fields) { $document = new Zend_Search_Lucene_Document(); foreach ($this->fields as $fieldName => $fieldType) { if (!isset($fields[$fieldName])) { if (!$ignoreMissingFields) { var_Dump($fields); require_once WCF_DIR . 'lib/system/exception/SystemException.class.php'; throw new SystemException('missing field ' . $fieldName); } } $field = call_user_func_array(array('Zend_Search_Lucene_Field', $fieldType), array($fieldName, $fields[$fieldName])); $document->addField($field); } $this->getIndex()->addDocument($document); } if ($commit) { $this->getIndex()->commit(); } }
if ($bNamedOnly) { $sSQL .= ' and (name is not null)'; } $sSQL .= ' ORDER BY rank_address desc, ST_distance(' . $sPointSQL . ', centroid) ASC limit 1'; $iPlaceID = $oDB->getOne($sSQL); if (PEAR::IsError($iPlaceID)) { var_Dump($sSQL, $iPlaceID); exit; } } else { $sSQL = 'select place_id from location_point_' . ($iMaxRank + 1); $sSQL .= ' WHERE ST_DWithin(' . $sPointSQL . ', centroid, ' . $fSearchDiam . ') '; $sSQL .= ' ORDER BY rank_address desc, ST_distance(' . $sPointSQL . ', centroid) ASC limit 1'; $iPlaceID = $oDB->getOne($sSQL); if (PEAR::IsError($iPlaceID)) { var_Dump($sSQL, $iPlaceID); exit; } } } } if (!$iPlaceID && $aArea) { $iPlaceID = $aArea['place_id']; } } if ($iPlaceID) { $sSQL = "select placex.*,"; $sSQL .= " get_address_by_language(place_id, {$sLanguagePrefArraySQL}) as langaddress,"; $sSQL .= " get_name_by_language(name, {$sLanguagePrefArraySQL}) as placename,"; $sSQL .= " get_name_by_language(name, ARRAY['ref']) as ref"; $sSQL .= " from placex where place_id = {$iPlaceID} ";
function dumpTags() { /* * This function is used for debug. It will output all tag names inside * current templates */ echo "<pre>"; var_Dump(array_keys($this->tags)); echo "</pre>"; }
WOT Game is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WOT Game is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with WOT Game. If not, see <http://www.gnu.org/licenses/>. */ //fleetback.php /* define('INSIDE', true); $ugamela_root_path = '../'; include($ugamela_root_path . 'extension.inc'); include($ugamela_root_path . 'common.'.$phpEx); if(!check_user()){ header("Location: login.php"); die();}*/ define('WCF_DIR', 'G:\\workspace\\lw\\wcf\\'); require_once '../game/lib/util/LWUtil.class.php'; require_once '../game/lib/system/spec/Spec.class.php'; $a = array(1 => 2); $b = array(1 => 3); var_Dump(Spec::diff($a, $b)); var_Dump(array_diff_assoc($b, $a)); $data = '3:1~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'; $array = unserialize(LWUtil::unserialize($data)); var_dump($array);
function loadTemplateFromString($str) { $this->source = 'string'; $this->template = $this->tags = array(); if (!$str) { return; } /* First expand self-closing tags <?$tag?> -> <?tag?><?/tag?> */ $str = preg_replace('/<\\?\\$([\\w]+)\\?>/s', '<?\\1?><?/\\1?>', $str); var_Dump($str); /* Next fix short ending tag <?tag?> <?/?> -> <?tag?> <?/?> */ $x = preg_replace_callback('/<\\?([^\\/][^>]*)\\?>(?:(?:(?!<\\?\\/\\?>).)++|(?R))*<\\?\\/\\?>/s', function ($x) { var_Dump($x); /*return preg_replace('/(.*<\?([^\/][\w]+)\?>)(.*?)(<\?\/?\?>)/s','\1\3<?/\2?>',$x[0]); */ }, $str); var_Dump($str); /* Finally recursively build tag structure */ $this->recursiveParse($x); $this->tags['_top'][] =& $this->template; return $this; }
function dummy_users() { header('Content-type: text/html; charset=utf-8'); $to_save = $_POST; $i = 0; for ($i = 0; $i < 10; $i++) { $to_save = array(); $to_save['username'] = '******' . rand(); $to_save['first_name'] = 'first_name' . rand(); $to_save['last_name'] = 'last_name' . rand(); $to_save['password'] = '******'; $to_save['email'] = 'user_' . rand() . '@email.com'; $to_save['is_active'] = 'y'; $to_save['is_admin'] = 'n'; $to_save['is_verified'] = 'y'; CI::model('users')->saveUser($to_save); var_Dump($to_save); } print '<meta http-equiv="refresh" content="2">'; }
} $sSQL .= " limit {$iLimit}"; if (CONST_Debug) { var_dump($sSQL); } $aPlaceIDs = $oDB->getCol($sSQL); } } } } } if (PEAR::IsError($aPlaceIDs)) { failInternalError("Could not get place IDs from tokens.", $sSQL, $aPlaceIDs); } if (CONST_Debug) { var_Dump($aPlaceIDs); } foreach ($aPlaceIDs as $iPlaceID) { $aResultPlaceIDs[$iPlaceID] = $iPlaceID; } if ($iQueryLoop > 20) { break; } } //exit; if (sizeof($aResultPlaceIDs)) { break; } if ($iGroupLoop > 4) { break; }
/** [private] Recursively renders all views. Calls render() for all or for the one being cut */ function recursiveRender() { $cutting_here = false; $this->initTemplateTags(); if (isset($_GET['cut_object']) && ($_GET['cut_object'] == $this->name || $_GET['cut_object'] == $this->short_name)) { // If we are cutting here, render childs and then we are done unset($_GET['cut_object']); $cutting_here = true; } if (!isset($this->elements)) { var_Dump($this->elements); throw $this->exception('ops'); } foreach ($this->elements as $key => $obj) { if ($obj instanceof AbstractView) { $obj->recursiveRender(); $obj->moveJStoParent(); } } if (!isset($_GET['cut_object'])) { if (isset($_GET['cut_region'])) { $this->region_render(); } else { $this->render(); } } if ($cutting_here) { $result = $this->owner->template->cloneRegion($this->spot)->render(); if ($this->api->jquery) { $this->api->jquery->getJS($this); } throw new Exception_StopRender($result); } // if template wasn't cut, we move all JS chains to parent }
$sImportFile .= ".npi"; while (!file_exists($sImportFile) && !file_exists($sImportFile . '.bz2')) { echo "sleep (waiting for {$sImportFile})\n"; sleep(10); } if (file_exists($sImportFile . '.bz2')) { $sImportFile .= '.bz2'; } $iFileSize = filesize($sImportFile); // Import the file $fCMDStartTime = time(); $sCMDImport = $sCMDImportTemplate . $sImportFile; echo $sCMDImport . "\n"; exec($sCMDImport, $sJunk, $iErrorLevel); if ($iErrorLevel) { echo "Error: {$iErrorLevel}\n"; exit; } $sBatchEnd = $iNPIID; echo "Completed for {$sBatchEnd} in " . round((time() - $fCMDStartTime) / 60, 2) . " minutes\n"; $sSQL = "INSERT INTO import_npi_log values ({$iNPIID}, null, {$iFileSize},'" . date('Y-m-d H:i:s', $fCMDStartTime) . "','" . date('Y-m-d H:i:s') . "','import')"; var_Dump($sSQL); $oDB->query($sSQL); } } function getosmosistimestamp($sOsmosisConfigDirectory) { $sStateFile = file_get_contents($sOsmosisConfigDirectory . '/state.txt'); preg_match('#timestamp=(.+)#', $sStateFile, $aResult); return str_replace('\\:', ':', $aResult[1]); }
<?php $route = 'module/action/id'; $params['controller'] = 'mycontrol'; $against = 'article/something/10'; $keys = explode('/', $route); $values = explode('/', $against); $matches = array_combine($keys, $values); $matches = array_merge($matches, $params); var_Dump($matches);
/** * Get Geocordiantes for a given location * * This returns an array containing the keys 'lat' and 'lon' * * @param string $location * * @return array|bool */ protected function getLAtLonForLocation($location) { $ch = curl_init('http://nominatim.openstreetmap.org/search?format=json&q=' . urlencode($location)); curl_setopt($ch, CURLOPT_TIMEOUT, 2); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $info = curl_exec($ch); // get curl response curl_close($ch); try { $info = Json::decode($info, Json::TYPE_ARRAY); } catch (\Exception $e) { var_Dump($e->getMessage() . "\n\n" . $e->getTraceAsString()); return false; } if (!$info) { return false; } return array('lat' => $info[0]['lat'], 'lon' => $info[0]['lon']); }