How to make this PHP code more object oriented and less scripted-Collection of common programming errors

I am utilizing CodeIgniter’s Pagination Class to implement pagination in the project. In this project, there are 3 modules: Event,Business & Parts. Each Module has same “view” for pagination. I have written pagination code for the event module, which has 3 types of pagination depending on the condition (received from end user).

Pagination ScreenShot: http://i.stack.imgur.com/twM3e.png

Following is the code for the event module. The controller:

class Event extends CI_Controller{
      public function event_list($sort_by = 'Description', $sort_order = 'asc', $limit =         3,$offset = 0,$search = false,$category = false){
    $config = array();
        if($category){

                $third_term = $this->uri->segment(3);
                if(is_numeric($sort_by)){
                    if(is_numeric($third_term)){
                        $sort_by = 'Description';
                    }else{
                        $sort_by = 'Price';
                    }
                }
                 $config['base_url'] = site_url("event/categories/$sort_by/$sort_order/$limit");

        }

        elseif($search || $_POST){
            if($_POST){
                $search_data = array(
                    'search_term' => '',
                    'search_category' => '',
                );
                $this->session->unset_userdata($search_data);
                $search_term = $this->input->post('search',TRUE);
                $search_category = $this->input->post('select-search',TRUE);
                $this->session->set_flashdata('search_term',$search_term);
                $this->session->set_flashdata('search_category',$this->input->post('select-search',TRUE));
                $config['base_url'] = site_url("event/search_list/$sort_by/$sort_order/$limit");
            }
            else{
                $this->session->keep_flashdata('search_term');
                $this->session->keep_flashdata('search_category');
                $search_term = $this->session->flashdata('search_term');
                $search_category = $this->session->flashdata('search_category');

                $config['base_url'] = site_url("event/search_list/$sort_by/$sort_order/$limit");


            }
        }else{
            $config['base_url'] = site_url("event/event_list/$sort_by/$sort_order/$limit");
        }

        $data['fields'] = array(
            'Description' => 'Description',
            'Price' => 'Price'

        );

        $config['per_page'] = $limit;

        $this->load->model('event_model');
        $results = $this->event_model->search($limit, $offset, $sort_by, $sort_order,$search,$category);
        $data['num_results'] = $results['num_rows'];
        $data['events'] = $results['rows'];
        $this->load->library('pagination');
        $config['total_rows'] = $data['num_results'];
        $config['uri_segment'] = 6;
        $this->config->load('pagination');          
        //$this->pagination->initialize($config);
        $data['pagination'] = $this->pagination->create_links();
        $data['sort_by'] = $sort_by;
        $data['sort_order'] = $sort_order;
        $data['page_no'] = ceil($this->uri->segment(6)/ $limit) + 1;
        $total_pages = ceil($config['total_rows'] / $limit);
        if($total_pages > 1){
            $data['total_pages'] = $total_pages;
        }
        $config['use_page_numbers'] = TRUE;

        $data['limit'] = $limit;//echo '
'.print_r($config);exit();
        $this->load->view('templates/event/event-list',$data);      
    }

       public function search_list($sort_by = 'Description', $sort_order = 'asc', $limit = 3,$offset = 0,$search = true,$category = false){
         $this->event_list($sort_by,$sort_order,$limit,$offset,$search);
    }

       public function categories($sort_by = 'Description', $sort_order = 'asc', $limit = 3,$offset = 0,$search = false,$category = true){

        $search_category = $this->uri->segment(3);

        $in_flash =  $this->session->flashdata('search_category');
        if(($in_flash == $search_category) && (!is_numeric($search_category))){
            $this->session->keep_flashdata('search_category');
        }else{
            $search_data = array(
                    'search_term' => '',
                    'search_category' => '',
            );
            $this->session->unset_userdata($search_data);
            $this->session->set_flashdata('search_category',$search_category);
        }

        $this->event_list($sort_by,$sort_order,$limit,$offset,$search=false,$category = true);
    }
}

The Model:

class event_model extends CI_Model{


function search($limit, $offset, $sort_by, $sort_order,$search,$category) {

    $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
    $sort_columns = array('Description', 'Price');
    $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'Description';

    if($search){

        $search_term = "'%".$this->input->post('search',TRUE)."%'";
        $search_category = $this->input->post('select-search',TRUE);

        $query =  sprintf('SELECT *,a.id AS eid,(SELECT Url from oc_storage where Object_Id = a.id and Object = "event" and type= "thumb.normal" limit 0,1 ) as thumb FROM oc_event a,oc_event_type b,oc_address c WHERE  b.id = %s AND a.Event_Type = b.id AND c.Object_type = "event" AND c.Object_Id = a.id AND a.Description like "%s" ORDER BY a.%s %s LIMIT %s ,%s',$search_category,$search_term,$sort_by, $sort_order,$offset,$limit);

        $count = "Select Count(*)FROM oc_event a,oc_event_type b,oc_address c WHERE  a.Event_Type = b.id AND c.Object_type = 'event' AND c.Object_Id = a.id AND a.Description like $search_term";

    }

    if($category){

         $search_category = $this->session->flashdata('search_category');       

        $query =  sprintf('SELECT *,a.id AS eid,(SELECT Url from oc_storage where Object_Id = a.id and Object = "event" and type= "thumb.normal" limit 0,1 ) as thumb FROM oc_event a,oc_event_type b,oc_address c WHERE  b.id = %s AND c.Object_type = "event" AND c.Object_Id = a.id ORDER BY a.%s %s LIMIT %s ,%s',$search_category,$sort_by, $sort_order,$offset,$limit);

         $count = "Select Count(*)FROM oc_event a,oc_event_type b,oc_address c WHERE  a.Event_Type = $search_category AND c.Object_type = 'event' AND c.Object_Id = a.id";
    }
    else{

        $query = sprintf('SELECT *,a.id AS eid,(SELECT Url from oc_storage where Object_Id = a.id and Object = "event" and type= "thumb.normal" limit 0,1 ) as thumb FROM oc_event a,oc_event_type b,oc_address c WHERE  a.Event_Type = b.id AND c.Object_type = "event" AND c.Object_Id = a.id ORDER BY a.%s %s LIMIT %s ,%s',$sort_by, $sort_order,$offset,$limit);

        $count = "Select Count(*)FROM oc_event a,oc_event_type b,oc_address c WHERE  a.Event_Type = b.id AND c.Object_type = 'event' AND c.Object_Id = a.id ";
    }

    $stmt = $this->db->conn_id->prepare($query); 
    $stmt->execute();                   
    $ret['rows']  = $stmt->fetchAll( PDO::FETCH_ASSOC ) ;

    $ret['num_rows'] = $this->db->conn_id->query($count)->fetchColumn();

    return $ret;

}

The view : “Including only whats required”;

Originally posted 2013-11-09 22:40:30.