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());
 }
Example #2
0
 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');
 }
Example #4
0
 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/>';
     }
 }
Example #5
0
 function createFatalRedirectRequest(ezcMvcRequest $request, ezcMvcResult $result, Exception $response)
 {
     var_Dump($request);
     $req = clone $request;
     $req->uri = '/FATAL';
     return $req;
 }
Example #6
0
function tesdt()
{
    $tab = array('sdaf' => 'dsafad');
    $tab[] = 'safas';
    $tab[] = $tab;
    $tab['wtf'] = new KontoBankMillenium();
    var_Dump($tab);
}
Example #7
0
 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';
 }
Example #8
0
 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());
 }
Example #9
0
 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');
 }
Example #10
0
 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());
 }
Example #11
0
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;
}
Example #12
0
 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);
 }
Example #13
0
 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);
     }
 }
Example #14
0
    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');
    }
Example #15
0
 /**
  * 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}");
 }
Example #16
0
 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;
 }
Example #17
0
 public function conv()
 {
     var_Dump(44);
     exit;
 }
Example #18
0
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;
}
Example #19
0
 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;
 }
Example #20
0
 /**
  * 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();
     }
 }
Example #21
0
                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} ";
Example #22
0
 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>";
 }
Example #23
0
    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);
Example #24
0
 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;
 }
Example #25
0
 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">';
 }
Example #26
0
                         }
                         $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
 }
Example #28
0
        $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]);
}
Example #29
0
<?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);
Example #30
0
 /**
  * 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']);
 }