function get_config()
    {
        // Container for configuration info
        $arr = array();
        // Try to get the configuration data
        // from a cached config file
        //
        // Added a disable option in 1.2.1 - dpd
        $disable_cache = $this->config->item('br_disable_system_cache') === TRUE ? 1 : 0;
        if ($disable_cache == 0) {
            if ($str = read_from_cache('config')) {
                $arr = unserialize($str);
                return $arr;
            }
        }
        // Get the store config
        $this->EE->db->select('	s.*, 
								c.code as currency,
								c.currency_id,
								c.marker as currency_marker')->from('br_store s')->join('br_currencies c', 'c.currency_id = s.currency_id');
        $query = $this->EE->db->get();
        foreach ($query->result_array() as $row) {
            $arr["store"][$row["site_id"]] = $row;
        }
        // Get the config data for each item
        $this->EE->db->select('*')->from('br_config_data')->order_by('sort');
        $query = $this->EE->db->get();
        foreach ($query->result_array() as $row) {
            $data[$row['config_id']][] = $row;
        }
        // Get the items
        $this->EE->db->select('*')->from('br_config')->order_by('sort');
        $query = $this->EE->db->get();
        foreach ($query->result_array() as $row) {
            $arr[$row["type"]][$row["site_id"]][$row["code"]] = $row;
            if (isset($data[$row["config_id"]])) {
                $arr[$row["type"]][$row["site_id"]][$row["code"]]["config_data"] = $data[$row["config_id"]];
            }
        }
        // Save the new array to cache
        save_to_cache('config', serialize($arr));
        return $arr;
    }
    /**
     * Get products into an array
     *
     * The method attempts to get the products by individual cached files  
     *
     * @access	public
     * @param	int,int,int
     * @return	array of products
     */
    public function get_products($product_id = '', $disabled = '', $cat = '')
    {
        // Now try to get it from
        if ($product_id != '') {
            // Try and return it from session cache
            if (isset($this->session->cache['get_products'][$product_id])) {
                $this->EE->TMPL->log_item('BrilliantRetail: return product_id (' . $product_id . ') from session data ' . round(memory_get_usage() / 1024 / 1024, 2) . 'MB');
                return $this->session->cache['get_products'][$product_id];
            }
            // Try to return from cache	unless it is disabeled in the
            // configuration file.
            $disable_cache = $this->config->item('br_disable_product_cache') === TRUE ? 1 : 0;
            if ($disable_cache == 0) {
                if ($str = read_from_cache('product_' . $product_id)) {
                    $arr[0] = unserialize($str);
                    // only return enabled cached products
                    if ($arr[0]["enabled"] == 1) {
                        $this->session->cache['get_products'][$product_id] = $arr;
                        $this->EE->TMPL->log_item('BrilliantRetail: return product_id (' . $product_id . ') from cache file ' . round(memory_get_usage() / 1024 / 1024, 2) . 'MB');
                        return $arr;
                    }
                }
            }
            // Get the specific product id
            $this->EE->db->where('product_id', $product_id);
        }
        if ($disabled == '') {
            $this->EE->db->where('enabled >', 0);
        }
        $this->EE->db->from('br_product p');
        if ($cat != "") {
            $this->EE->db->join("br_product_category c", "p.product_id=c.product_id");
            $this->EE->db->where("c.category_id", $cat);
        }
        $this->EE->db->where('p.site_id', $this->config->item('site_id'));
        $this->EE->db->order_by('p.product_id', 'desc');
        $query = $this->EE->db->get();
        $products = array();
        $i = 0;
        foreach ($query->result_array() as $row) {
            // General Product Details
            $products[$i] = $row;
            // Get Product Entry Id (Experimental)
            $products[$i]["entry_id"] = $this->get_product_entry($row["product_id"]);
            // Get Product Price
            $products[$i]["price_matrix"] = $this->get_product_price($row["product_id"], 1);
            // Get Product Sale Price
            $products[$i]["sale_matrix"] = $this->get_product_price($row["product_id"], 2);
            // Product Categories
            $products[$i]["categories"] = $this->get_product_categories($row["product_id"]);
            // Product Attributes
            $attributes = $this->get_attributes($row["attribute_set_id"], $row["product_id"]);
            $products[$i]["attributes"] = '<div id="product_attributes">';
            $j = 0;
            foreach ($attributes as $attr) {
                $val = isset($attr["value"][0]) ? $attr["value"][0] : $attr["value"];
                $products[$i]["attributes"] .= ' 	<p class="label">' . $attr["title"] . '</p>
															<p>' . $val . '<p>';
                $products[$i]["attribute"][$j] = $attr;
                $products[$i]["attribute"][$j]["label"] = $attr["title"];
                $j++;
            }
            $products[$i]["attributes"] .= '</div>';
            // Product Images
            $img = $this->get_product_images($row["product_id"]);
            $k = 0;
            $products[$i]["image_large"] = '';
            $products[$i]["image_thumb"] = '';
            foreach ($img as $key => $val) {
                // Set the name based on the key
                // Integers are the individual images
                // Non-int's are the thumb and large files
                if (is_integer($key)) {
                    $products[$i]['images'][$k] = $val;
                    $k++;
                } else {
                    $products[$i][$key] = $val;
                }
            }
            // Product Images
            $img = $this->get_product_images($row["product_id"], false);
            $k = 0;
            foreach ($img as $key => $val) {
                if (is_integer($key)) {
                    if ($val["exclude"] == 1) {
                        $products[$i]['images_excluded'][$k] = $val;
                        $k++;
                    }
                }
            }
            // Product Addon
            $products[$i]["addon"] = '';
            #$this->get_product_addon($row["product_id"]);
            // Product Related
            $products[$i]["related"] = $this->get_product_related($row["product_id"]);
            // Product Options
            $products[$i]["options"] = $this->get_product_options($row["product_id"]);
            // Bundle Product Type
            if ($row["type_id"] == 2) {
                $products[$i]["bundle"] = $this->get_product_bundle($row["product_id"]);
            }
            // Configurable Product Type
            if ($row["type_id"] == 3) {
                $products[$i]["configurable"] = $this->get_product_configurable($row["product_id"]);
            }
            // Download Product Type
            if ($row["type_id"] == 4) {
                $products[$i]["download"] = $this->get_product_download($row["product_id"]);
            }
            // Donation Product Type
            if ($row["type_id"] == 7) {
                $products[$i]["donation"] = $this->get_product_donation($row["product_id"]);
            }
            save_to_cache('product_' . $row["product_id"], serialize($products[$i]));
            $i++;
        }
        // Save it to the session cache
        if ($product_id != '') {
            $this->session->cache['get_products'][$product_id] = $products;
        }
        $this->EE->TMPL->log_item('BrilliantRetail: return product_id (' . $product_id . ') from database ' . round(memory_get_usage() / 1024 / 1024, 2) . 'MB');
        return $products;
    }
 function search()
 {
     // Load native EE helper to sanitize search term
     $this->EE->load->helper('search');
     // Set the return location
     $return = $this->EE->TMPL->fetch_param('return') ? $this->EE->TMPL->fetch_param('return') : 'catalog/result';
     // Get the product search collection
     $term = $this->EE->TMPL->fetch_param('term') ? $this->EE->TMPL->fetch_param('term') : $this->EE->input->post('search', TRUE);
     $term = sanitize_search_terms($term);
     $hits = $this->_search_index($term);
     $hash = sha1(time() . $term);
     $i = 0;
     $product = array();
     foreach ($hits as $hit) {
         $tmp = $this->EE->product_model->get_products($hit["product_id"]);
         // Check to make sure that a product is returned
         if (isset($tmp[0])) {
             if ($tmp[0]["site_id"] == $this->site_id) {
                 $product[$i] = $tmp[0];
                 $product[$i]["score"] = round(100 * $hit["score"], 2);
                 $product[$i]["row_count"] = $i + 1;
                 $i++;
             }
         }
     }
     // Count the products but set
     // a reasonable search result
     // limit
     $count = count($product);
     if ($count > $this->_config["result_limit"]) {
         $lim = $count - 1;
         for ($i = $this->_config["result_limit"]; $i <= $count; $i++) {
             unset($product[$i]);
         }
         $count = $this->_config["result_limit"];
     }
     $vars[0] = array('search_hash' => $hash, 'search_term' => $term, 'total_results' => count($product), 'results' => $product, 'no_results' => array(), 'result_filter_set' => '');
     save_to_cache('search_' . $hash, serialize($vars));
     $this->EE->product_model->log_search($term, $hash, count($product), $this->EE->session->userdata["member_id"]);
     $this->EE->functions->redirect($this->EE->functions->create_url($return . '/id/' . $hash));
 }
    ####################################################################################
    # BEGIN: Cache related stuff, PART 2
    # Hidden feature: remove object from cache, if 'nocache' parameter found in URL
    if ($site->fdat['nocache'] && is_numeric($site->fdat['id'])) {
        $sql = $site->db->prepare("DELETE FROM cache WHERE objekt_id=?", $site->fdat['id']);
        $sth = new SQL($sql);
        $site->debug->msg($sth->debug->get_msgs());
    }
    ##############################################
    # If vead on nahtav, siis ei salvesta cache!
    if (!$CMS_SETTINGS['cache_inserted'] && $CMS_SETTINGS['cache_expired'] && $CMS_SETTINGS['cache_enabled']) {
        $cache_data = ob_get_contents();
        ob_end_clean();
        if ($cache_data) {
            # if found smth to save
            save_to_cache(array('data' => $cache_data, 'objekt_id' => $_GET['id'], 'url' => $site->fullself, 'site_id' => $leht->objekt->all['keel']));
        }
    }
    ############## PRINT CACHE to screen:
    echo $cache_data;
}
# / 2. OR START saving page info
# / SHOW cached page or START SAVING cache info
##########################
##########################
# SHOW "speed_debug" message
if ($speed_debug) {
    $loppaeg = mygetmicrotime();
    $itog = $loppaeg - $startaeg;
    $sth = new SQL("SELECT count(*) FROM cache");
    $total_in_cache = $sth->fetchsingle();
Exemple #5
0
 function get_sites_table()
 {
     $this->_secure(5);
     $grid_method = get_grid_method_from_page();
     $result = array();
     $user = $this->session->all_userdata();
     $this->load->model('model_sites');
     $this->load->model('model_client_attributes');
     $this->load->model('model_client_attribute_values');
     $url_params = $this->uri->uri_to_assoc(3);
     $post_data = $_POST;
     $client_tab_id = 0;
     $cache_key = '';
     $site_data = array();
     $total_stats = array();
     if (USE_CACHE && !empty($post_data)) {
         $cache_post_key = $post_data;
         if (isset($cache_post_key['sEcho'])) {
             unset($cache_post_key['sEcho']);
         }
         if (isset($cache_post_key['iDisplayStart'])) {
             unset($cache_post_key['iDisplayStart']);
         }
         if (isset($cache_post_key['iDisplayLength'])) {
             unset($cache_post_key['iDisplayLength']);
         }
         if (isset($cache_post_key['_search'])) {
             unset($cache_post_key['_search']);
         }
         if (isset($cache_post_key['page'])) {
             unset($cache_post_key['page']);
         }
         if (isset($cache_post_key['rows'])) {
             unset($cache_post_key['rows']);
         }
         if (isset($cache_post_key['nd'])) {
             unset($cache_post_key['nd']);
         }
         $cache_key = md5(serialize($cache_post_key));
         $site_data = from_cache($user['user_id'], 'site_data', $cache_key);
         $total_stats = from_cache($user['user_id'], 'total_stats', $cache_key);
         $all_site_ids = from_cache($user['user_id'], 'all_site_ids', $cache_key);
     }
     $total_visits = 0;
     $total_new_visits = 0;
     $total_visitors = 0;
     $total_page_views = 0;
     $total_bounces = 0;
     if (isset($url_params['client_tab_id'])) {
         $client_tab_id = $url_params['client_tab_id'];
     }
     $filters = array();
     $filters['client_id'] = $user['client_id'];
     $filters['user_id'] = $user['user_id'];
     if (isset($url_params['site_displayed_flag']) && $url_params['site_displayed_flag'] != '') {
         $filters['site_displayed_flag'] = $url_params['site_displayed_flag'];
     }
     if (isset($post_data['attribute_filter_count']) && $post_data['attribute_filter_count'] > 0) {
         $attribute_values = array();
         for ($i = 0; $i < $post_data['attribute_filter_count']; $i++) {
             $attribute_filter = $post_data['attribute_filter_' . ($i + 1)];
             $attribute_filter_parts = explode('-', $attribute_filter);
             $filter_name = $attribute_filter_parts[0];
             $filter_value = $attribute_filter_parts[1];
             if (isset($attribute_values[$filter_name])) {
                 $attribute_values[$filter_name][] = $filter_value;
             } else {
                 $attribute_values[$filter_name] = array($filter_value);
             }
         }
         $filters['attribute_values'] = $attribute_values;
     }
     if ($client_tab_id == '0') {
         $filters['user_site_type'] = 'M';
     } else {
         $filters['user_site_type'] = 'V';
     }
     $start_date = 0;
     $end_date = 0;
     if (isset($post_data['end_date'])) {
         $end_date = to_unixtime($post_data['end_date']);
         if (isset($post_data['interval'])) {
             $start_date = strtotime('-' . $post_data['interval'], $end_date);
         }
     }
     if (isset($post_data['start_date'])) {
         $start_date = to_unixtime($post_data['start_date']);
         if (isset($post_data['interval'])) {
             $end_date = strtotime('+' . $post_data['interval'], $start_date);
         }
     }
     if (isset($post_data['empty_google_sites'])) {
         $filters['empty_google_sites'] = $post_data['empty_google_sites'];
     }
     if (isset($post_data['google_sites'])) {
         $filters['google_sites'] = $post_data['google_sites'];
     }
     if (empty($site_data) || empty($total_stats)) {
         $client_attribute_filters = array();
         $client_attribute_filters['client_id'] = $user['client_id'];
         $client_attribute_filters['select_sql'] = '1';
         if ($client_tab_id == '0') {
             $filters['select'] = array('sites.site_id', 'sites.site_title', 'sites.site_notes', 'sites.site_displayed_flag');
             $client_attribute_filters['attribute_group_type'] = array('P', 'U');
             $client_attribute_filters['not_empty'] = '1';
         } else {
             $filters['select'] = array('sites.site_id', 'sites.site_title', 'sites.site_notes', 'sites.site_displayed_flag', 'sites.google_site_id');
             $client_attribute_filters['attribute_value_type'] = array('D', 'F', 'HS', 'I', 'M', 'PC', 'PT', 'SF', 'T', 'U');
         }
         $client_attributes = $this->model_client_attributes->get_records($client_attribute_filters, false, true);
         // Attribute fields
         if (!empty($client_attributes)) {
             foreach ($client_attributes as $client_attribute) {
                 $filters['select'][] = $client_attribute['select_sql'];
             }
         }
         $sites = $this->model_sites->get_records($filters, false, false);
         $all_site_ids = array();
         if (!empty($sites)) {
             $client_tab_columns = $this->_get_tab_columns();
             $site_data = $this->_get_dataset($sites, $all_site_ids, $client_tab_id, $client_tab_id == '0' ? $client_attributes : $client_tab_columns, $start_date, $end_date, $total_stats);
         }
         if (!empty($site_data) && isset($post_data['sSearch']) && !empty($post_data['sSearch'])) {
             $new_site_data = array();
             for ($i = 0; $i < sizeof($site_data); $i++) {
                 $matched = false;
                 for ($j = 0; $j < $post_data['iColumns']; $j++) {
                     if ($post_data['bSearchable_' . $j] == 'true') {
                         if (stristr(strip_tags($site_data[$i][$j]), $post_data['sSearch'])) {
                             $matched = true;
                             break;
                         }
                     }
                 }
                 if ($matched) {
                     $new_site_data[] = $site_data[$i];
                 }
             }
             $site_data = $new_site_data;
         } elseif (!empty($site_data) && isset($post_data['search']) && !empty($post_data['search'])) {
             $new_site_data = array();
             if ($client_tab_id == '0') {
                 for ($i = 0; $i < 3; $i++) {
                     $columns[] = $i;
                 }
                 if (!empty($client_attributes)) {
                     $counter = 2;
                     foreach ($client_attributes as $client_attribute) {
                         $columns[] = ++$counter;
                     }
                 }
             } else {
                 $columns = $client_tab_columns['columns'];
             }
             foreach ($site_data as $i => $site) {
                 $matched = false;
                 foreach ($columns as $column) {
                     if (stristr(strip_tags($site[$column]), $post_data['search'])) {
                         $matched = true;
                         break;
                     }
                 }
                 if ($matched) {
                     $new_site_data[] = $site;
                 }
             }
             $site_data = $new_site_data;
         }
         // Sorting for tab columns - all need to be in sync
         if (!empty($site_data) && isset($post_data['sColumns']) && isset($post_data['sort_column']) && isset($post_data['sort_direction'])) {
             $columns = explode(',', $post_data['sColumns']);
             $column_sort = array();
             $column_sort_index = -1;
             $column_sort_direction = null;
             for ($i = 0; $i < sizeof($columns); $i++) {
                 if ($columns[$i] == $post_data['sort_column']) {
                     $column_sort_index = $i + 1;
                     // Add 1 for the site_id (removed later)
                     break;
                 }
             }
             if ($column_sort_index != -1) {
                 for ($i = 0; $i < sizeof($site_data); $i++) {
                     $column_value = trim(strip_tags($site_data[$i][$column_sort_index]));
                     if (is_date($column_value)) {
                         $column_sort[] = to_unixtime($column_value);
                     } else {
                         $column_sort[] = strtolower($column_value);
                     }
                     if ($post_data['sort_direction'] == 'asc') {
                         $column_sort_direction = SORT_ASC;
                     } else {
                         $column_sort_direction = SORT_DESC;
                     }
                 }
             }
             if (!empty($column_sort)) {
                 array_multisort($column_sort, $column_sort_direction, SORT_REGULAR, $site_data);
             }
         } elseif (!empty($site_data) && isset($post_data['iSortingCols']) && !empty($post_data['iSortingCols'])) {
             // Original sort, using default functionality
             $column_sorts = array();
             $column_sort_index = 0;
             $column_sort_directions = array();
             for ($i = 0; $i < $post_data['iSortingCols']; $i++) {
                 if (isset($post_data['iSortCol_' . $i])) {
                     $column_sorts[$column_sort_index] = array();
                     for ($j = 0; $j < sizeof($site_data); $j++) {
                         $column_value = trim(strip_tags($site_data[$j][$post_data['iSortCol_' . $i]]));
                         if (is_date($column_value)) {
                             $column_sorts[$column_sort_index][] = to_unixtime($column_value);
                         } else {
                             $column_sorts[$column_sort_index][] = strtolower($column_value);
                         }
                     }
                     $column_sort_directions[$column_sort_index] = 'SORT_' . strtoupper($post_data['sSortDir_' . $i]);
                     $column_sort_index++;
                 }
             }
             if (!empty($column_sorts)) {
                 $eval = 'array_multisort(';
                 for ($i = 0; $i < sizeof($column_sorts); $i++) {
                     $eval .= ($i > 0 ? ',' : '') . '$column_sorts[' . $i . '],' . $column_sort_directions[$i] . ',SORT_REGULAR';
                 }
                 $eval .= ',$site_data);';
                 eval($eval);
             }
         } elseif (!empty($site_data) && isset($post_data['sidx']) && isset($post_data['sord'])) {
             if ($grid_method == 'jqgrid') {
                 $columns = $client_tab_columns['columns'];
                 $column_sort = array();
                 $column_sort_index = -1;
                 $column_sort_direction = null;
                 for ($i = 0; $i < sizeof($columns); $i++) {
                     if ($columns[$i]['name'] == $post_data['sidx']) {
                         $column_sort_index = $i + 1;
                         // Add 1 for the site_id (removed later)
                         break;
                     }
                 }
                 if ($column_sort_index != -1) {
                     foreach ($site_data as $i => $site) {
                         $column_value = trim(strip_tags($site[$column_sort_index]));
                         if (is_date($column_value)) {
                             $column_sort[] = to_unixtime($column_value);
                         } else {
                             $column_sort[] = strtolower($column_value);
                         }
                         if ($post_data['sord'] == 'asc') {
                             $column_sort_direction = SORT_ASC;
                         } else {
                             $column_sort_direction = SORT_DESC;
                         }
                     }
                 }
                 if (!empty($column_sort)) {
                     array_multisort($column_sort, $column_sort_direction, SORT_REGULAR, $site_data);
                 }
             } elseif ($grid_method == 'slick') {
                 $column_sort = array();
                 $column_sort_direction = null;
                 foreach ($site_data as $i => $site) {
                     $column_value = trim(strip_tags($site[$post_data['sidx']]));
                     if (is_date($column_value)) {
                         $column_sort[] = to_unixtime($column_value);
                     } else {
                         $column_sort[] = strtolower($column_value);
                     }
                     if ($post_data['sord'] == 'asc') {
                         $column_sort_direction = SORT_ASC;
                     } else {
                         $column_sort_direction = SORT_DESC;
                     }
                 }
                 if (!empty($column_sort)) {
                     array_multisort($column_sort, $column_sort_direction, SORT_REGULAR, $site_data);
                 }
             }
         }
         if (USE_CACHE) {
             save_to_cache($site_data, 0, $user['user_id'], 'site_data', $cache_key);
             save_to_cache($total_stats, 0, $user['user_id'], 'total_stats', $cache_key);
             save_to_cache($all_site_ids, 0, $user['user_id'], 'all_site_ids', $cache_key);
         }
     }
     if (!empty($total_stats)) {
         foreach ($total_stats as $total_stat) {
             $total_visits += $total_stat['visits'];
             $total_new_visits += $total_stat['new_visits'];
             $total_visitors += $total_stat['visitors'];
             $total_page_views += $total_stat['page_views'];
             $total_bounces += $total_stat['bounces'];
         }
     }
     // We need to clear out the sites we don't need here, otherwise things go awry!
     if (!empty($site_data) && isset($post_data['site_ids']) && !empty($post_data['site_ids'])) {
         $new_site_data = array();
         $all_site_ids = $post_data['site_ids'];
         if (!is_array($all_site_ids)) {
             $all_site_ids = explode(',', $all_site_ids);
         }
         foreach ($site_data as $i => $site) {
             if (isset($site['id'])) {
                 $site_id = $site['id'];
             } else {
                 $site_id = $site[0];
             }
             if (in_array($site_id, $all_site_ids)) {
                 $new_site_data[] = $site;
             }
         }
         $site_data = $new_site_data;
     }
     // Now we need to define the formats we need to send back to the client
     if ($grid_method == 'jqgrid' || $grid_method == 'slick') {
         if ($grid_method == 'jqgrid') {
             if (!empty($site_data)) {
                 foreach ($site_data as $i => $site) {
                     $site_data[$i] = array('id' => $site[0], 'cell' => array_slice($site, 1));
                 }
             }
         }
         if ($post_data['rows'] != 'All') {
             $result['total'] = ceil(sizeof($site_data) / $post_data['rows']);
         } else {
             $result['total'] = 1;
         }
         $result['rows'] = isset($post_data['rows']) ? $post_data['rows'] : '15';
         $result['page'] = isset($post_data['page']) ? $post_data['page'] : '1';
         $result['records'] = sizeof($site_data);
         $result['recCount'] = sizeof($site_data);
         $result['search'] = isset($post_data['search']) ? $post_data['search'] : '';
         $result['start_date'] = date('d/m/Y', $start_date);
         $result['end_date'] = date('d/m/Y', $end_date);
         $result['total_visits'] = number_format($total_visits);
         $result['total_new_visits'] = number_format($total_new_visits);
         $result['total_visitors'] = number_format($total_visitors);
         $result['total_page_views'] = number_format($total_page_views);
         if ($total_visits > 0) {
             $result['total_bounce_rate'] = number_format(round($total_bounces / $total_visits * 100, 2), 2, '.', '');
         } else {
             $result['total_bounce_rate'] = '0';
         }
         $result['site_ids'] = $all_site_ids;
         if (isset($post_data['rows']) && isset($post_data['page'])) {
             if ($post_data['rows'] != 'All') {
                 $start_index = ($post_data['page'] - 1) * $post_data['rows'];
                 $result['sites'] = array_slice($site_data, $start_index, $post_data['rows']);
             } else {
                 $result['sites'] = $site_data;
             }
         } else {
             $result['sites'] = $site_data;
         }
     } else {
         // Okay, we put the site_id into the array temporarily, so we could get it out here - now we need to store the values and remove the column
         if (!empty($site_data)) {
             foreach ($site_data as $i => $site) {
                 $site_ids[] = $site[0];
                 // Now we take off the site_id
                 $site_data[$i] = array_slice($site, 1);
             }
         }
         $result['sEcho'] = isset($post_data['sEcho']) ? $post_data['sEcho'] : '';
         $result['iTotalRecords'] = sizeof($site_data);
         $result['iTotalDisplayRecords'] = sizeof($site_data);
         $result['start_date'] = date('d/m/Y', $start_date);
         $result['end_date'] = date('d/m/Y', $end_date);
         $result['total_visits'] = number_format($total_visits);
         $result['total_new_visits'] = number_format($total_new_visits);
         $result['total_visitors'] = number_format($total_visitors);
         $result['total_page_views'] = number_format($total_page_views);
         if ($total_visits > 0) {
             $result['total_bounce_rate'] = number_format(round($total_bounces / $total_visits * 100, 2), 2, '.', '');
         } else {
             $result['total_bounce_rate'] = '0';
         }
         $result['site_ids'] = $all_site_ids;
         if (!empty($site_data) && isset($post_data['iDisplayStart']) && isset($post_data['iDisplayLength'])) {
             if ($post_data['iDisplayLength'] == -1) {
                 $result['aaData'] = array_slice($site_data, $post_data['iDisplayStart']);
             } else {
                 $result['aaData'] = array_slice($site_data, $post_data['iDisplayStart'], $post_data['iDisplayLength']);
             }
         } else {
             $result['aaData'] = $site_data;
         }
     }
     $data = array();
     $data['any'] = json_encode($result);
     $data['action_view'] = 'misc/any';
     $this->load->view('layouts/blank', $data);
 }
<?php

$service_doc['lugar|place'] = array('en' => array('patron' => '/ubigeo/place/DEPARTMENT[/PROVINCE[/DISTRICT]]', 'description' => 'Searches for the ubigeo codes (reniec, inei) for the place given as ' . '/DEPARTMENT[/PROVINCE[/DISTRICT]] (the last 2 parameters are optional)'), 'es' => array('patron' => '/ubigeo/lugar/DEPARTAMENTO[/PROVINCIA[/DISTRITO]]', 'descripción' => 'Busca los códigos de ubigeo (reniec, inei) para el lugar indicado por ' . 'el /DEPARTAMENTO/PROVINCIA/DISTRITO (los últimos dos parámetros son opcionales)'));
$flugar = function ($dpt, $prov = '', $dist = '') use($app, $db) {
    $key = strtoupper("{$dpt}/{$prov}/{$dist}");
    $res = get_from_cache($key);
    if ($res === false) {
        $stm = $db->prepare('select * from ubigeo where nombreCompleto = :lugar');
        $stm->bindValue(':lugar', $key, PDO::PARAM_STR);
        $stm->execute();
        $res = $stm->fetchAll();
        save_to_cache($key, $res);
    }
    if (count($res) === 0) {
        $app->getLog()->error('3:badlocation:' . $dpt . '/' . $prov . '/' . $dist);
        $res = array('error' => 3, 'msg' => 'no existe el lugar que ha indicado');
    }
    echo json_encode(array($app->request()->getResourceUri() => $res));
};
$app->get('/ubigeo/lugar/:dpt(/:prov(/:dist))', $flugar)->name('lugar');
$app->get('/ubigeo/place/:dpt(/:prov(/:dist))', $flugar)->name('place');
            $sql = 'select * from ubigeo where ';
            switch ($source) {
                case 'reniec':
                    $sql .= ' reniec = :codigo';
                    break;
                case 'inei':
                    $sql .= ' inei = :codigo';
                    break;
                case 'cualquiera':
                case 'any':
                    $sql .= ' inei = :codigo or reniec = :codigo';
                    break;
            }
            $stm = $db->prepare($sql);
            $stm->bindValue(':codigo', $ucode, PDO::PARAM_STR);
            $stm->execute();
            $res = $stm->fetchAll();
            save_to_cache($ucode . $source, $res);
        }
        if (empty($res)) {
            $app->getLog()->error('1:badcode:' . $ucode . ':' . $source);
            $res = array('error' => 1, 'msg' => 'no existe el código de ubigeo que ha indicado');
        }
    } else {
        $app->getLog()->error('2:badsource:' . $ucode . ':' . $source);
        $res = array('error' => 2, 'msg' => 'fuente de código no permitida, usar: reniec, inei, cualquiera');
    }
    echo json_encode(array($app->request()->getResourceUri() => $res));
};
$app->get('/ubigeo/codigo/:ucode(/:source)', $fcode)->conditions(array('ucode' => '\\d{6}'))->name('codigo');
$app->get('/ubigeo/code/:ucode(/:source)', $fcode)->conditions(array('ucode' => '\\d{6}'))->name('code');
 function _get_sidebar_help()
 {
     // set a flag for returning from cache
     $use_cache = 0;
     if ($resp = read_from_cache('dashboard_help')) {
         $a = explode('|', $resp);
         $life = $this->EE->localize->now - $a[0];
         if ($life < 60 * 60 * 24 * 30) {
             $response = ltrim($resp, $a[0] . '|');
             $use_cache = 1;
         }
     }
     if ($use_cache == 0) {
         $post = array('host' => $_SERVER["HTTP_HOST"], 'license' => $this->_config["store"][$this->site_id]["license"]);
         $post_str = '';
         foreach ($post as $key => $val) {
             $post_str .= $key . '=' . $val . '&';
         }
         $post_str = rtrim($post_str, '$');
         $ch = curl_init('http://www.brilliantretail.com/dashboard_help.php');
         curl_setopt($ch, CURLOPT_HEADER, 0);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
         $response = urldecode(curl_exec($ch));
         save_to_cache('dashboard_help', $this->EE->localize->now . '|' . $response);
     }
     return json_decode($response, true);
 }
<?php

$service_doc['distritos|districts'] = array('en' => array('pattern' => '/ubigeo/districts/DEPARTMENT/PROVINCE', 'description' => 'Lists the ubigeo codes for all districts for a PROVINCE in a DEPARTMENT'), 'es' => array('patron' => '/ubigeo/distritos/DEPARTAMENTO/PROVINCIA', 'descripción' => 'Lista los códigos de ubigeo de los distritos en la PROVINCIA del DEPARTAMENTO'));
$fdist = function ($dpt, $prov) use($app, $db) {
    $dpto = strtoupper($dpt);
    $prov = strtoupper($prov);
    $res = get_from_cache("{$dpto}/{$prov}/distritos");
    if ($res === false) {
        $rows = $db->query("select reniec from ubigeo where nombreCompleto = '{$dpto}/{$prov}/'");
        $dpres = $rows->fetchAll();
        if (count($dpres) > 0) {
            $dpcode = $dpres[0]['reniec'];
            preg_match('/(\\d{4})\\d\\d/', $dpcode, $reg);
            $prefix = $reg[1];
            $stmnt = $db->query("select * from ubigeo where reniec like '{$prefix}%' and reniec <> '{$dpcode}'");
            $res = $stmnt->fetchAll();
            save_to_cache("{$dpto}/{$prov}/distritos", $res);
        } else {
            $app->getLog()->error('6:badprov:' . $dpto . ':' . $prov);
            $res = array('error' => 6, 'msg' => 'no existe una provincia de departamento con nombre ' . $dpto . '/' . $prov);
        }
    }
    echo json_encode(array($app->request()->getResourceUri() => $res));
};
$app->get('/ubigeo/distritos/:dpt/:prov', $fdist)->name('distritos');
$app->get('/ubigeo/districts/:dpt/:prov', $fdist)->name('districts');
if ($site->fdat['nocache'] && is_numeric($site->fdat['id'])){
	$sql = $site->db->prepare("DELETE FROM cache WHERE objekt_id=?", $site->fdat['id']);
	$sth = new SQL($sql);
	$site->debug->msg($sth->debug->get_msgs());
}

##############################################
# If vead on nahtav, siis ei salvesta cache!

if (!$CMS_SETTINGS['cache_inserted'] && $CMS_SETTINGS['cache_expired'] && $CMS_SETTINGS['cache_enabled'] /*&& is_numeric($_GET['id'])*/){
	$cache_data = ob_get_contents();
	ob_end_clean();
	if ($cache_data){ # if found smth to save
		save_to_cache(Array(
			'data' => $cache_data,
			'objekt_id' => $_GET['id'], # oldstyle, optional
			'url' => $site->fullself,
			'site_id' => $leht->objekt->all['keel'],
		));
	}
}

############## PRINT CACHE to screen:
	echo $cache_data;
	

} # / 2. OR START saving page info

# / SHOW cached page or START SAVING cache info
##########################

<?php

$service_doc['provincias|provinces'] = array('en' => array('pattern' => '/ubigeo/provinces/DEPARTMENT', 'description' => 'Lists the ubigeo codes for all provinces in DEPARTMENT'), 'es' => array('patron' => '/ubigeo/provincias/DEPARTAMENTO', 'descripción' => 'Lista los códigos de ubigeo de las provincias en DEPARTAMENTO'));
$fprovs = function ($dpt) use($app, $db) {
    $dpto = strtoupper($dpt);
    $res = get_from_cache($dpto . '/provincias');
    if ($res === false) {
        $rows = $db->query("select reniec from ubigeo where nombreCompleto = '{$dpto}//'");
        $dptores = $rows->fetchAll();
        if (count($dptores) > 0) {
            $dptocode = $dptores[0]['reniec'];
            preg_match('/(\\d\\d)\\d{4}/', $dptocode, $reg);
            $prefix = $reg[1];
            $stmt = $db->query("select * from ubigeo where reniec like '{$prefix}%00' and reniec <> '{$dptocode}'");
            $res = $stmt->fetchAll();
            save_to_cache($dpto . '/provincias', $res);
        } else {
            $app->getLog()->error('5:baddpto:' . $dpto);
            $res = array('error' => 5, 'msg' => 'no existe un departamento con nombre ' . $dpto);
        }
    }
    echo json_encode(array($app->request()->getResourceUri() => $res));
};
$app->get('/ubigeo/provincias/:dpt', $fprovs)->name('provincias');
$app->get('/ubigeo/provinces/:dpt', $fprovs)->name('provinces');
<?php

$service_doc['departamentos|departments'] = array('en' => array('pattern' => '/ubigeo/departments', 'description' => 'Lists the ubigeo codes for all departments'), 'es' => array('patron' => '/ubigeo/departamentos', 'descripción' => 'Lista los códigos de ubigeo de todos los departamentos'));
$fdepas = function () use($app, $db) {
    $res = get_from_cache('departamentos');
    if ($res === false) {
        $stmt = $db->query("select * from ubigeo where nombreCompleto like '%//'");
        $res = $stmt->fetchAll();
        save_to_cache('departamentos', $res);
    }
    echo json_encode(array($app->request()->getResourceUri() => $res));
};
$app->get('/ubigeo/departamentos', $fdepas)->name('departamentos');
$app->get('/ubigeo/departments', $fdepas)->name('departments');