<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class SDF_Controller extends CI_Controller{
protected $M = '' protected $C = '' protected $D = '' protected $table_name = '' protected $model_name = '' protected $data = array() protected $admin_user = array() protected $soft_id = 0 public function __construct() {
parent::__construct();
$this->_load_helper();
$this->output->set_header('Content-Type: text/html; charset=UTF-8');
$this->data['soft_id'] = $this->soft_id = $this->input->cookie('soft_id')?$this->input->cookie('soft_id'):0;
$this->C = $this->table_name = $this->router->fetch_class();
$this->M = $this->router->fetch_method();
$this->D = $this->router->fetch_directory();
#如果没有设置模型名字
if(empty($this->model_name))$this->model_name = $this->D.$this->C.'_model';
define('__URL__', base_url($this->D.$this->C))
$token = $this->input->cookie('token');
$this->load->library('Auth');
$this->data['admin_user'] = $this->admin_user = Auth::get_admin_user_by_token($token);
if(is_array($this->admin_user)) if(!(Auth::is_administrator($this->admin_user['username'])) and $this->check_auth()===false ) $this->_error('没有权限');
}
}else if(IS_AJAX) show_error('登录已超时!',301,'操作失败!');
return false;
}
redirect(site_url('login'), 'refresh');
}
$this->_write_log() }
private function _write_log(){
$this->load->model('admin/admin_log_model');
$modules = str_replace('/','',$this->D);
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$log_info = array(
'user_id'=> 1,
'modules'=> $modules,
'controller'=> $this->C,
'method'=> $this->M,
'log_info'=> json_encode($_REQUEST),
'ip_address'=> $this->input->ip_address(),
'url'=> $url,
'user'=>$this->admin_user['username'],
'create_time'=> time()
);
$this->admin_log_model->_write_log($log_info);
}
private function _load_helper(){
$this->load->helper('url');
$this->load->helper('form');
}
private function check_auth(){
$this->load->model('admin/admin_user_model');
$admin_user_auth = $this->admin_user_model->get_admin_user_auth($this->admin_user['id'],$this->soft_id,true) $admin_user_key = $this->D.$this->C.'/'.$this->M;
if(!empty($admin_user_key) and isset($admin_user_auth[$admin_user_key]) or Auth::is_administrator($this->admin_user['username'])){
return true;
}
return false;
}
public function _remap($method,$rsegments){
if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($this)))){
$this->_error('你请求的操作"'.$method.'"不存在!');return false;
}
call_user_func_array(array(&$this, $method), $rsegments);
}
protected function _error($message,$title='操作失败!'){
show_error($message,300,$title);
}
protected function _success($message,$title='操作成功!'){
show_error($message,200,$title);
}
public function index(){
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$this->data['list'] = $this->_list() $this->load->view($this->D.$this->C.'/'.$this->M,$this->data);
}
public function add(){
$this->load->view($this->D.$this->C.'/'.$this->M,$this->data);
}
public function insert(){
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$data = $this->input->post('DATA');
$id = $this->Model->_insert($data);
if(empty($id)){
$this->_error('添加失败!');
}
$this->_success('添加成功!');
}
public function edit($id){
if(!is_numeric($id)){
$this->_error('编辑的id不是一个整数。');return false;
}
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$_REQUEST['PK'] = $this->Model->_get_pk();
$row = $this->Model->_row(array($_REQUEST['PK']=>$id));
$this->data['DATA'] = $row;
$this->load->view($this->D.$this->C.'/'.$this->M,$this->data);
}
public function update(){
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$pk = $this->Model->_get_pk();
$pk_v = $this->input->post($pk);
if(!is_numeric($pk_v)){
$this->_error('更新的id不是一个整数。');return false;
}
$where=array($pk=>$pk_v);
$data = $this->input->post('DATA');
$affected_rows = $this->Model->_update($where,$data);
$this->_success('成功修改条【'.$affected_rows.'】数据!');
}
public function setField(){
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$pk = $this->Model->_get_pk();
$value = $this->input->get_post('value');
$name = $this->input->get_post('name');
$where=array($pk=>$this->input->get_post('id'));
$data = array(
$name=>$value
);
$affected_rows = $this->Model->_update($where,$data);
if($affected_rows === false){
log_message('debug','更新失败'.$this->Model->db->last_query());
$this->_error('更新失败'.$this->Model->db->last_query());
}else{
$this->_success('成功修改条【'.$affected_rows.'】数据!');
}
}
public function delete($ids){
$this->load->model($this->model_name,"Model");
$this->Model->_from($this->table_name);
$list_fields = $this->Model->_list_fields();
$affected_rows = $this->Model->_delete(array($list_fields[0]=>$ids));
$this->_success('成功,影响到行数为:'.$affected_rows);
}
protected function _list(){
$map = $this->_search() if (method_exists ( $this, '_filter' )) {
$map = $this->_filter($map) }
$_POST['pageNum'] = intval($this->input->get_post('pageNum'))>0?intval($this->input->get_post('pageNum')):1;
$_POST['numPerPage'] = intval($this->input->get_post('numPerPage'))>0?intval($this->input->get_post('numPerPage')):20
$_POST['orderField'] = $this->input->get_post('orderField')?$this->input->get_post('orderField'):$this->Model->_get_pk()
$_POST['orderDirection'] = in_array($this->input->get_post('orderDirection'),array('desc','asc'))?$this->input->get_post('orderDirection'):'desc'
$list = $this->Model->_map($map)->_limit($_POST['numPerPage'],($_POST['pageNum']-1)*$_POST['numPerPage'])->_order_by($_POST['orderField'],$_POST['orderDirection'])->_list();
#echo $this->Model->db->last_query();
$_POST['totalCount'] = $this->Model->_map($map)->_from($this->table_name)->_count() return $list;
}
protected function _filter($map){
return $map;
}
protected function _search() {
$map = array();
$list_fields = $this->Model->_list_fields();
foreach ($list_fields as $key ) {
$val = $this->input->get_post($key);#有参数,切不为'all'时
if ($val !== FALSE and strtoupper($val) !== ''){
$map['where'][$key] = $val;
}
}
return $map;
}
}