<?php class MY_Model extends CI_Model { protected $_table; protected $_primary_key = 'id'; protected $_active_key = 'is_active'; function __construct() { parent::__construct(); $this->_table = strtolower(get_class($this)); } function get_count($factors = FALSE) { if ($factors) { $this->db->where($factors); } return $this->db-> count_all_results($this->_table); } function get_item($id) { $id = intval($id); if ( ! $id) { return FALSE; } return $this->db-> where('id',$id)-> get($this->_table)-> row(); } function get_item_by($factors) // by some parameters { if ( ! $factors) { return FALSE; } return $this->db-> where($factors)-> get($this->_table)-> row(); } /** * Get list of items * * $all_items = $this->get_list(FALSE); * $all_active_items = $this->get_list(); * $all_active_items_by_pages = $this->get_list(TRUE,$from,$limit); * $all_deleted_items = $this->get_list('deleted'); * $some_items = $this->get_list(array( 'is_active' => TRUE, 'counter >=' => 10 ), $from, FALSE, 'created', 'desc' ); */ function get_list($factors = array('is_active' => 1),$from = FALSE, $limit = FALSE,$order = FALSE,$direction = 'asc') { if ( ! is_array($factors)) { if (TRUE === $factors) { $this->db->where($this->_active_key,1); } elseif ('deleted' == $factors) { $this->db->where($this->_active_key,NULL); } elseif ('active' == $factors) { $this->db->where($this->_active_key,1); } } elseif ($factors) { $this->db->where($factors); } if ($order) { $this->db-> order_by($order,$direction); } if ($limit == FALSE) { return $this->db-> get($this->_table)-> result(); } else { return $this->db-> get($this->_table, $limit, $from)-> result(); } } // Get active elements function get_active($from = FALSE, $limit = FALSE,$order = FALSE,$direction = 'asc') { return $this->get_list(TRUE,$from,$limit,$order,$direction); } // Get deleted elements function get_deleted($from = FALSE, $limit = FALSE,$order = FALSE,$direction = 'asc') { return $this->get_list('deleted',$from,$limit,$order,$direction); } // add item from post data function add($fields,$data = FALSE) { foreach ($fields as $field) { $this->db->set($field['field'],$this->input->post($field['field'])); } $this->accordion('add'); return $this->insert($data); } // data insert function insert($data = FALSE) { if ($data) { $this->db->set($data); } $this->db->insert($this->_table); return $this->db->insert_id(); } // edit record function edit($id,$fields,$data = FALSE) { foreach ($fields as $field) { $this->db->set($field['field'],$this->input->post($field['field'])); } $this->accordion('edit'); $this->update($id,$data); } // update record function update($id,$data = FALSE) // found by ID { $id = intval($id); if ( ! $id) { return FALSE; } if ($data) { $this->db-> where($this->_primary_key,$id)-> update($this->_table, $data); } else { $this->db-> where($this->_primary_key,$id)-> update($this->_table); } } // set records parameter function set_property($id, $key, $value) { $this->db-> where($this->_primary_key, $id)-> set($key, $value)-> update($this->_table); } // enable item function enable($item) { $active_key = $this->_active_key; if ($item->$active_key) { return; } $primary_key = $this->_primary_key; $this->set_property($item->$primary_key,$active_key,1); } // delete item function disable($item) { $active_key = $this->_active_key; if ( ! $item->$active_key) { return; } $primary_key = $this->_primary_key; $this->set_property($item->$primary_key,$active_key,NULL); } // related items var $list = array(); function set_related($data,$key = 'uid') { if ( ! $data) { return; } if (is_array($data)) { if (isset($data[$key])) { $this->list[$data[$key]] = FALSE; return; } foreach ($data as $row) { if (is_object($row)) { if (isset($row->$key)) { $this->list[$row->$key] = FALSE; } } elseif (is_array($row)) { if (isset($row[$key])) { $this->list[$row[$key]] = FALSE; } } elseif (is_numeric($row)) { $this->list[$row] = FALSE; } } } elseif (is_object($data)) { if (isset($data->$key)) { $this->list[$data->$key] = FALSE; } } elseif (is_numeric($data)) { $this->list[(int)$data] = FALSE; } } // load list data function load_related($list = FALSE,$key = 'uid') { if ($list) { $this->set_related($list,$key); } if (empty($this->list)) { return; } $keys = array_keys($this->list); $listing = $this->db-> where_in($this->_primary_key,$keys)-> get($this->_table)-> result(); if ( ! $listing) { return; } foreach ($listing as $record) { $this->list[$record->id] = $record; } } // returns related items function related($list = FALSE,$key = 'uid') { $this->load_related($list,$key); return $this->list; } // set or update standart fields function accordion($action = 'add') { if ( ! in_array($action,array('add','edit'))) { // dont knew what to do return; } // get table // found acquaintance fields // make some actions $this->config->load('tables/'.$this->_table,TRUE); $fields = config_item('tables/'.$this->_table); if ($action == 'add') { if (array_key_exists('created',$fields)) { $this->db->set('created',time()); } if (array_key_exists($this->_active_key,$fields)) { $this->db->set($this->_active_key,1); } if (array_key_exists('uid',$fields)) { if ($this->user) { $this->db->set('uid',$this->user->profile['id']); } } } elseif ($action == 'edit') { if (array_key_exists('created',$fields)) { if (array_key_exists('updated',$fields)) { $this->db->set('updated',time()); } } if (array_key_exists('changed',$fields)) { $this->db->set('changed',time()); } } } // counter increment function increment($id,$field) { $this->db-> set($field,$field.' + 1',FALSE)-> where($this->_primary_key,$id)-> update($this->_table); } // counter decrement function decrement($id,$field) { $this->db-> set($field,$field . ' - 1 ',FALSE)-> where($this->_primary_key,$id)-> update($this->_table); } // move item up function move_up($item,$sortorder = 'sortorder') { $active_key = $this->_active_key; $prev = $this->db-> where('`'.$sortorder.'` < '.$item->$sortorder)-> where($active_key,$item->$active_key)-> order_by($sortorder,'DESC')-> get($this->_table)-> row(); if ($prev) { $primary_key = $this->_primary_key; $this->db-> set($sortorder,$prev->$sortorder)-> where($primary_key,$item->$primary_key)-> update($this->_table); $this->db-> set($sortorder,$item->$sortorder)-> where($primary_key,$prev->$primary_key)-> update($this->_table); } } // move item down function move_down($item,$sortorder = 'sortorder') { $active_key = $this->_active_key; $prev = $this->db-> where('`'.$sortorder.'` > '.$item->sortorder)-> where($active_key,$item->is_active)-> order_by($sortorder)-> get($this->_table)-> row(); if ($prev) { $primary_key = $this->_primary_key; $this->db-> set($sortorder,$prev->$sortorder)-> where($primary_key,$item->$primary_key)-> update($this->_table); $this->db-> set($sortorder,$item->$sortorder)-> where($primary_key,$prev->$primary_key)-> update($this->_table); } } }
function design($view,$data = FALSE) { $CI =& get_instance(); return $CI->load->view($view,$data,TRUE); }
Source: https://habr.com/ru/post/167857/
All Articles