<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin_node_model extends SDF_Model
{
var $title = '';
var $content = '';
var $date = '';
private static $admin_node_data = array();
private static $admin_node_tree = array();
private static $nodes = array();
private static $admin_node_all = array();#所有节点列表
function __construct()
{
$this->load->database();
parent::__construct();
}
private $option = array();
private $ref = null;
public function _update($where,$data){
if(isset($data['node_groupid']) and empty($data['node_groupid'])){
$data['node_groupid'] = null;
}
$this->db->where($where);
if($this->db->update($this->_table,$data)){
return $this->db->affected_rows();
}else{
return false;
}
}
public function get_scrap_nodes(){
$file_node_list = $this->get_file_nodes();
$node_list = $this->get_admin_node_all();
$scrap_list = array_diff_key($node_list,$file_node_list);
return $scrap_list;
}
public function get_new_nodes(){
$file_node_list = $this->get_file_nodes();
$node_list = $this->get_admin_node_all();
$new_list = array_diff_key($file_node_list,$node_list);
return $new_list;
}
public function _insert($data){
if(isset($data['modules']) and isset($data['controller']) and isset($data['method']) and empty($data['node_groupid'])){
$this->load->model('admin/admin_node_group_model');
if($data['method']=='index'){
$data['status'] = 1;
}
$controller_title = empty($data['controller_title'])?$data['title']:$data['controller_title'];
$data['node_groupid'] = $this->admin_node_group_model->get_group_id($data['modules'],$data['controller'],$controller_title);
if($this->db->insert('admin_node', $data)){
return $this->db->insert_id();
}
}
return false;
}
private function get_file_nodes(){
if(!empty(self::$nodes)){
return self::$nodes;
}
$controllers_files = $this->get_controllers_files();
foreach($controllers_files as $controllers_file){
require_once($controllers_file);
$controller = strtolower(basename($controllers_file,".php"));
$modules = str_replace(array('/', '.'), '', str_replace(APPPATH.'controllers','',dirname($controllers_file))).'/';
if(!class_exists(ucfirst($controller))){
continue;
}
$ref = new ReflectionClass(ucfirst($controller));
foreach($ref->getMethods() as $m_obj){
$method = $m_obj->getName();
if($m_obj->isPublic() and $method !='__construct' and $method != '_remap' and $method != 'get_instance'){
$remark = $m_obj->getDocComment();
$title = $this->get_doc_comment_title($remark);
self::$nodes[$modules.$controller.'/'.$method] = array(
'modules' =>$modules,
'controller' =>$controller,
'method' =>$method,
'title' =>empty($title)?$method:$title,
'controller_title'=>$this->get_doc_comment_title($ref->getDocComment()),
'remark' =>$remark
);
}
}
unset($ref);
}
return self::$nodes;
}
private function get_doc_comment_title($doc_comment){
$doc_comment = explode(' ',trim(str_replace(array('/','*',"\r","\n"),' ',$doc_comment)));
return $doc_comment[0];
}
private function get_controllers_files(){
$file_names = array_merge(glob(APPPATH.'controllers*.php'));
return $file_names;
}
public function get_admin_node_all(){
return $this->get_admin_node('all');
}
public function get_admin_node_menu(){
return $this->get_admin_node(1);
}
private function get_admin_node($status){
if(isset(self::$admin_node_all[$status])){
return self::$admin_node_all[$status];
}
if($status !=='all'){
$this->db->where('status',$status);
}
$this->db->select('id,modules,controller,method,title,node_groupid,remark');
$query = $this->db->get('admin_node');
if(!empty($query)){
$list = $query->result_array();
foreach ($list as $v){
self::$admin_node_all[$status][$v['modules'].$v['controller'].'/'.$v['method']] = $v;
}
unset($list);
}
return isset(self::$admin_node_all[$status])?self::$admin_node_all[$status]:array();
}
}