search implementation completed; video ordering feature when browsing by category...
[living-lab-site.git] / application / controllers / catalog.php
index 4966152..95a6908 100644 (file)
@@ -86,7 +86,7 @@ class Catalog extends CI_Controller {
                $this->load->view('html_end');
        }
        
-       public function category($category_name, $offset = 0)
+       public function category($category_name, $ordering = 'hottest', $offset = 0)
        {
                // **
                // ** LOADING MODEL
@@ -98,12 +98,14 @@ class Catalog extends CI_Controller {
                $this->load->model('videos_model');
                $vs_data['videos'] = $this->videos_model->get_videos_summary(
                        $vs_data['category_id'], intval($offset),
-                       $this->config->item('videos_per_page'));
+                       $this->config->item('videos_per_page'), $ordering);
+               
+               $vs_data['ordering'] = $ordering;
                
                // Pagination
                $this->load->library('pagination');
-               $pg_config['base_url'] = site_url("catalog/category/$category_name/");
-               $pg_config['uri_segment'] = 4;
+               $pg_config['base_url'] = site_url("catalog/category/$category_name/$ordering/");
+               $pg_config['uri_segment'] = 5;
                $pg_config['total_rows'] = $this->videos_model->get_videos_count(
                        $vs_data['category_id']);
                $pg_config['per_page'] = $this->config->item('videos_per_page');
@@ -127,7 +129,10 @@ class Catalog extends CI_Controller {
                // ** LOADING VIEWS
                // **
                $this->load->view('html_begin', $this->html_head_params);
-               $this->load->view('header');
+               $this->load->view('header', array(
+                       'search_category_name'=>$vs_data['category_name'],
+                       'search_category_title'=>$vs_data['category_title']
+               ));
                
 //             $main_params['content'] = $this->load->view('catalog/category_view', $data, TRUE);
                $main_params['content'] = 
@@ -146,28 +151,43 @@ class Catalog extends CI_Controller {
                $str_post_search = $this->input->post('search', TRUE);
                if ($search_query === "" && $str_post_search !== FALSE) 
                        redirect('catalog/search/'. $this->input->post('search', TRUE));
+
+               $this->load->model('videos_model');
                
                // **
                // ** LOADING MODEL
                // **
+               // Search query is encoded for URL and must be decoded.
+               $enc_search_query = $search_query;
+               $search_query = $this->videos_model->decode_search_query($search_query);
+               $results_data['search_query'] = $search_query;
+
                // Category
                $results_data = $this->_get_category_data($category_name);
                if ($results_data === NULL)
                        $results_data = array('category_id'=>NULL);
                
-               $results_data['search_query'] = $search_query;
+               // Page header data
+               $header_data['search_query'] = $search_query;
+               if ($category_name !== NULL)
+               {
+                       $header_data['search_category_name'] = $results_data['category_name'];
+                       $header_data['search_category_title'] = $results_data['category_title'];
+               }
                
                // Check if search string is valid.
                if (strlen($search_query) < 4)
                {
-                       $results_data['videos'] = NULL;
+                       //$results_data['videos'] = NULL;
+                       $this->error($this->lang->line('error_search_query_too_short'),
+                               $header_data);
+                       return;
                }
                else
                {
                        // Retrieve search results.
-                       $this->load->model('videos_model');
                        $results_data['count'] = $this->videos_model->search_videos(
-                               $search_query);
+                               $search_query, 0, 0, $results_data['category_id']);
                        $results_data['videos'] = $this->videos_model->search_videos(
                                $search_query, intval($offset),
                                $this->config->item('search_results_per_page'),
@@ -177,7 +197,7 @@ class Catalog extends CI_Controller {
        
                        // Pagination
                        $this->load->library('pagination');
-                       $pg_config['base_url'] = site_url("catalog/search/$search_query/");
+                       $pg_config['base_url'] = site_url("catalog/search/$enc_search_query/");
                        $pg_config['uri_segment'] = 4;
                        $pg_config['total_rows'] = $results_data['count'];
                        $pg_config['per_page'] =
@@ -185,7 +205,8 @@ class Catalog extends CI_Controller {
                        $this->pagination->initialize($pg_config);
                        $results_data['pagination'] = $this->pagination->create_links();
                }
-                       
+               
+               // HTML head parameters
                $params = array(        'title' => $this->config->item('site_name'),
                                                        'css' => array(
                                                                'catalog.css'
@@ -199,7 +220,7 @@ class Catalog extends CI_Controller {
                // ** LOADING VIEWS
                // **
                $this->load->view('html_begin', $this->html_head_params);
-               $this->load->view('header');
+               $this->load->view('header', $header_data);
                
                // Search Results
                $main_params['content'] = 
@@ -212,6 +233,29 @@ class Catalog extends CI_Controller {
                $this->load->view('html_end');
        }
        
+       public function error($msg, $header_data)
+       {
+               $params = array(        'title' => 'Error - '. $this->config->item('site_name'),
+                       //'css' => array(),
+                       //'js' => array(),
+                       //'metas' => array('description'=>'','keywords'=>'')
+               );
+               $this->load->library('html_head_params', $params);
+               
+               // **
+               // ** LOADING VIEWS
+               // **
+               $this->load->view('html_begin', $this->html_head_params);
+               $this->load->view('header', $header_data);
+               
+               $main_params['content'] = $this->load->view('error_view', array('msg'=>$msg), TRUE);
+               $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
+               $this->load->view('main', $main_params);
+               
+               $this->load->view('footer');
+               $this->load->view('html_end');
+       }
+       
        public function _get_category_data($category_name)
        {
                if ($category_name === NULL)