/**
  * Return uuid for current transaction group. Will generate a new uuid if required.
  *
  * @return string
  */
 public function getTransactionUUID()
 {
     if (!$this->ops_transaction_uuid) {
         $this->ops_transaction_uuid = caGenerateGUID();
     }
     return $this->ops_transaction_uuid;
 }
Esempio n. 2
0
 /**
  * Perform sort
  * 
  * @param array $pa_hits
  * @param array $pa_sortable_values
  * @param string $ps_direction 
  * @param array $pa_options
  *
  * @return array
  */
 private function _doSort(&$pa_hits, $pa_sortable_values, $ps_direction = 'asc', $pa_options = null)
 {
     if (!in_array($ps_direction = strtolower($ps_direction), array('asc', 'desc'))) {
         $ps_direction = 'asc';
     }
     $va_sorted_rows = array();
     if (sizeof($pa_hits) < 1000000) {
         //
         // Perform sort in-memory
         //
         $va_sort_buffer = array();
         foreach ($pa_hits as $vn_hit) {
             $vs_key = '';
             foreach ($pa_sortable_values as $vn_i => $va_sortable_values) {
                 $vs_v = preg_replace("![^\\w_]+!", " ", $va_sortable_values[$vn_hit]);
                 $vs_key .= str_pad(substr($vs_v, 0, 150), 150, ' ', is_numeric($vs_v) ? STR_PAD_LEFT : STR_PAD_RIGHT);
             }
             $va_sort_buffer[$vs_key . str_pad($vn_hit, 12, ' ', STR_PAD_LEFT)] = $vn_hit;
         }
         ksort($va_sort_buffer, SORT_FLAG_CASE | SORT_NATURAL);
         $va_sort_buffer = array_values($va_sort_buffer);
         if ($ps_direction == 'desc') {
             $va_sort_buffer = array_reverse($va_sort_buffer);
         }
         return $va_sort_buffer;
     } else {
         //
         // Use mysql memory-based table to do sorting
         //
         $vs_sort_tmp_table = $this->loadListIntoTemporaryResultTable($pa_hits, caGenerateGUID(), array('sortableValues' => $pa_sortable_values));
         $vs_sql = "\n\t\t\t\t\tSELECT row_id\n\t\t\t\t\tFROM {$vs_sort_tmp_table}\n\t\t\t\t\tORDER BY sort_key1 {$ps_direction}, sort_key2 {$ps_direction}, sort_key3 {$ps_direction}, row_id\n\t\t\t\t";
         $qr_sort = $this->opo_db->query($vs_sql, array());
         $va_sorted_rows = $qr_sort->getAllFieldValues('row_id');
         $this->cleanupTemporaryResultTable();
     }
     return $va_sorted_rows;
 }
Esempio n. 3
0
 /**
  * Returns client's session_id. 
  */
 public function getSessionID()
 {
     if (isset($_COOKIE[$this->name]) && $_COOKIE[$this->name]) {
         return $_COOKIE[$this->name];
     }
     // If client doesn't support cookies and connects repeatedly then we'll end up creating a session for
     // each connection. GoogleSearch appliances do this.
     //
     // To avoid this we keep track of connections by IP address and if it connects without a session cookie
     // too many times in a given period we force it to a fixed session key
     if (!is_array($va_ip_list = ExternalCache::fetch('ipList', 'SessionVars'))) {
         $va_ip_list = array();
     }
     if (!is_array($va_ip_last_seen = ExternalCache::fetch('ipLastSeen', 'SessionVars'))) {
         $va_ip_last_seen = array();
     }
     if (!is_array($va_ip_session_keys = ExternalCache::fetch('ipSessionKeys', 'SessionVars'))) {
         $va_ip_session_keys = array();
     }
     if (isset($va_ip_last_seen[$_SERVER['REMOTE_ADDR']]) && time() - $va_ip_last_seen[$_SERVER['REMOTE_ADDR']] > 60 * 60 * 4) {
         // 4 hour window
         $va_ip_list[$_SERVER['REMOTE_ADDR']] = 0;
     }
     $va_ip_list[$_SERVER['REMOTE_ADDR']]++;
     $va_ip_last_seen[$_SERVER['REMOTE_ADDR']] = time();
     if ($vs_key && $va_ip_list[$_SERVER['REMOTE_ADDR']] > 5) {
         $va_ip_session_keys[$_SERVER['REMOTE_ADDR']] = caGenerateGUID();
     }
     ExternalCache::save('ipList', $va_ip_list, 'SessionVars', 60 * 60 * 24);
     // ip lists persist for 24 hours
     ExternalCache::save('ipLastSeen', $va_ip_last_seen, 'SessionVars', 60 * 60 * 24);
     ExternalCache::save('ipSessionKeys', $va_ip_session_keys, 'SessionVars', 60 * 60 * 24);
     return isset($va_ip_session_keys[$_SERVER['REMOTE_ADDR']]) && $va_ip_session_keys[$_SERVER['REMOTE_ADDR']] ? $va_ip_session_keys[$_SERVER['REMOTE_ADDR']] : null;
 }