PageRenderTime 25ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/application/core/ADMIN_Core_controller.php

https://bitbucket.org/onebamboo/prode2018
PHP | 328 lines | 270 code | 47 blank | 11 comment | 42 complexity | a4c1751f9e28bc9f3d9b9a613a3201d0 MD5 | raw file
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. class ADMIN_core_controller extends CI_Controller
  3. {
  4. public $breadcrumb_array = array();
  5. public $data = array();
  6. public $class_name = '';
  7. public $user_data;
  8. public function __construct()
  9. {
  10. parent::__construct();
  11. $this->class_name = strtolower(get_class($this));
  12. $this->data['class_name'] = $this->class_name;
  13. $config = $this->config->item('modules');
  14. if(is_array($this->load_config))
  15. {
  16. $configs = array();
  17. foreach($this->load_config as $module)
  18. {
  19. $configs = array_merge($configs,$config[$module]);
  20. }
  21. $this->data = array_merge($configs, $config[$this->class_name]);
  22. }
  23. else
  24. {
  25. $this->data = $config[$this->class_name];
  26. }
  27. $this->restrictions = explode("|",$this->data['restrictions']);
  28. $site_config = $this->config->item('general');
  29. $this->data['site_config'] = $site_config[$this->uri->segment(1)];
  30. $this->load->model($this->data['main_model'], 'main_model');
  31. if($this->data['parent_main_model'])
  32. {
  33. $this->load->model($this->data['parent_main_model'], 'parent_main_model');
  34. }
  35. $this->ini_condition = $this->data['list_condition'] ? $this->data['list_condition'] : $this->data['ini_condition'];
  36. $this->admin_override = $this->data['admin_override'];
  37. $this->main_model_tabs = $config[ $this->class_name ]['main_model_tabs'];
  38. $this->datatable_actions = $config[ $this->class_name ]['datatable_actions'];
  39. $this->user_data = $this->session->userdata($this->data['site_config']['user_session']);
  40. // redirect if not logged in, only if url is different from the user login page.
  41. $this->session->set_userdata('user_id',$this->bitauth->user_id);
  42. if($this->uri->segment(2) == 'generame-la-clave')
  43. {
  44. $uri_string = $this->uri->segment(1)."/".$this->uri->segment(2);
  45. }
  46. else
  47. {
  48. $uri_string = $this->uri->uri_string();
  49. }
  50. $allowed_pages = array('admin/user/login','admin/user/forgot_password','admin/olvide-la-clave','admin/generame-la-clave');
  51. if(!in_array($uri_string,$allowed_pages))
  52. {
  53. if(!$this->bitauth->logged_in() && (!$this->bitauth->is_admin() || $this->bitauth->is_in_group(2)))
  54. {
  55. $this->session->set_userdata('user_id',$this->bitauth->user_id);
  56. $this->session->set_userdata('username',$this->bitauth->username);
  57. redirect($this->data['site_config']['login_page'], 'refresh');
  58. }
  59. }
  60. $sql2 = "SET @@session.sql_mode='';";
  61. $this->db->query($sql2);
  62. $this->split_fields();
  63. $this->get_parent_methods();
  64. }
  65. public function has_permission($perm)
  66. {
  67. if($this->bitauth->is_admin()) return true;
  68. return !in_array($perm,$this->restrictions);
  69. }
  70. public function user_content_only()
  71. {
  72. if($this->bitauth->is_admin()) return false;
  73. return in_array('own_content',$this->restrictions);
  74. }
  75. public function make_breadcrumb($current_method, $id='', $model=NULL)
  76. {
  77. if(is_array($this->data['parent_index_route']))
  78. {
  79. $this->breadcrumb_array[$this->data['parent_index_route']['label']] = '#'.$this->data['parent_index_route']['url'];
  80. }
  81. if($id!='undefined') // show list should be the only method without main_model id. therefore parent is taken from main_model
  82. {
  83. if(!in_array($current_method,$this->data['parent_methods']))
  84. {
  85. $this->main_model->get($id);
  86. if($this->data['parent_main_model'] && $this->parent_main_model->get($this->main_model->get_parent_id()))
  87. {
  88. $this->breadcrumb_array[$this->parent_main_model->get_label()] = '#'.$this->data['parent_description_route'].$this->parent_main_model->get_id();
  89. $parent_id = $this->parent_main_model->get_id();
  90. }
  91. }
  92. else
  93. {
  94. if($this->data['parent_main_model'] && $this->parent_main_model->get($id))
  95. {
  96. $this->breadcrumb_array[$this->parent_main_model->get_label()] = '#'.$this->data['parent_description_route'].$this->parent_main_model->get_id();
  97. $parent_id = $this->parent_main_model->get_id();
  98. }
  99. }
  100. }
  101. $module_url = $this->data['module_url'] ? $this->data['module_url'] : '#'.$this->class_name.'/show_list/'.$parent_id;
  102. if(!$this->main_model)
  103. {
  104. $this->breadcrumb_array = array();
  105. }
  106. else
  107. {
  108. switch($current_method)
  109. {
  110. case 'create':
  111. $this->breadcrumb_array[$this->data['module_label']] = $module_url;
  112. $this->breadcrumb_array["Agregar ".$this->unit_label] = '#'.$this->class_name.'/create/'.$parent_id;
  113. break;
  114. case 'relation':
  115. //$this->main_model->get_relation($model, $id);
  116. $this->breadcrumb_array[$this->data['module_label']] = $module_url;
  117. $this->breadcrumb_array[$this->main_model->get_label()] = '#'.$this->class_name.'/details/'.$this->main_model->get_id();
  118. $this->breadcrumb_array['Relaci&oacute;n'] = '#'.$this->class_name.'/relation/user/'.$this->main_model->get_id();
  119. default:
  120. $this->breadcrumb_array[$this->data['module_label']] = $module_url;
  121. $this->breadcrumb_array[$this->main_model->get_label()] = '#'.$this->class_name.'/details/'.$this->main_model->get_id();
  122. break;
  123. }
  124. }
  125. $this->load_breadcrumb();
  126. }
  127. public function load_breadcrumb($breadcrumb=NULL)
  128. {
  129. $bc = ($breadcrumb==NULL)?$this->breadcrumb_array:$breadcrumb;
  130. if(is_array($bc) && count($bc) > 0 )
  131. {
  132. $this->breadcrumb->clear();
  133. $this->breadcrumb->push_as_array($bc);
  134. echo $this->breadcrumb->get();
  135. }
  136. }
  137. protected function get_parent_methods()
  138. {
  139. if(is_array($this->data['top_menu_actions']))
  140. {
  141. foreach($this->data['top_menu_actions'] as $action_id => $details)
  142. {
  143. if($this->has_permission($action_id))
  144. $this->data['parent_methods'][] = $details['method'];
  145. }
  146. }
  147. }
  148. public function top_menu_actions($current_method = '', $id = '')
  149. {
  150. //example: $this->data['top_menu_actions'] = array( 'add_user' => array('method' => 'save', 'icon' => "ui-icon-circle-plus", 'label' => "Agregar Usuario"));
  151. if($id!='undefined') // show list should be the only method without main_model id. therefore parent is taken from main_model
  152. {
  153. if(!in_array($current_method,$this->data['parent_methods']))
  154. {
  155. $this->main_model->get($id);
  156. if($this->data['parent_main_model'] && $this->parent_main_model->get($this->main_model->get_parent_id()))
  157. {
  158. $this->top_menu_data['parent_id'] = $this->parent_main_model->get_id();
  159. }
  160. }
  161. else
  162. {
  163. if($this->data['parent_main_model'] && $this->parent_main_model->get($id))
  164. {
  165. $this->top_menu_data['parent_id'] = $this->parent_main_model->get_id();
  166. }
  167. }
  168. }
  169. $this->top_menu_data['current_method'] =$current_method;
  170. $this->load->view("admin/common/inc.top.menu.actions.php", $this->top_menu_data);
  171. }
  172. /*
  173. Splits the fields array into page_fields[$visible_page][field_id][field_attributes]
  174. */
  175. protected function set_field_attrs($field,$attr,$value)
  176. {
  177. if($this->data['fields'][$field])
  178. {
  179. $this->data['fields'][$field][$attr] = $value;
  180. if($this->data['fields'][$field]['visibility'])
  181. {
  182. $visibilities = explode("|", $this->data['fields'][$field]['visibility']);
  183. foreach($visibilities as $visibility)
  184. {
  185. $displays = explode(":",$visibility);
  186. $attrs['display'] = $displays[1] ? $displays[1] : "left";
  187. $this->data['page_fields'][$displays[0]][$field][$attr] = $value;
  188. }
  189. }
  190. }
  191. }
  192. protected function split_fields()
  193. {
  194. if(!is_array($this->data['fields'])) return 0;
  195. $file_types = array('image','image_gallery','video','archive','file');
  196. $this->data['page_fields'] = array();
  197. $this->data['page_displays'] = array();
  198. foreach($this->data['fields'] as $field_id => $attrs)
  199. {
  200. if($attrs['visibility'])
  201. {
  202. $visibilities = explode("|", $attrs['visibility']);
  203. foreach($visibilities as $visibility)
  204. {
  205. $displays = explode(":",$visibility);
  206. $attrs['display'] = $displays[1] ? $displays[1] : "left";
  207. if($displays[0] == 'save')
  208. {
  209. $this->data['page_fields']['create'][$field_id] = $attrs;
  210. $this->data['page_displays']['create'][$attrs['display']][] = $field_id;
  211. $this->data['page_fields']['edit'][$field_id] = $attrs;
  212. $this->data['page_displays']['edit'][$attrs['display']][] = $field_id;
  213. }
  214. else
  215. {
  216. $this->data['page_fields'][$displays[0]][$field_id] = $attrs;
  217. $this->data['page_displays'][$displays[0]][$attrs['display']][] = $field_id;
  218. }
  219. }
  220. }
  221. if($attrs['list_visibility'] == 'expanded')
  222. {
  223. $this->data['datatable_details'] = true;
  224. }
  225. if($attrs['list_editable'])
  226. {
  227. $this->data['list_editable_fields'][$field_id] = $attrs;
  228. }
  229. // insert file fields;
  230. if(in_array($attrs['type'],$file_types))
  231. {
  232. $this->file_fields[$field_id] = $attrs;
  233. }
  234. }
  235. $this->split_relation_fields();
  236. }
  237. /*
  238. Splits the relation fields array into data['relation'][$model]['page_fields'][$visible_page][$field_id][$field_attributes]
  239. */
  240. protected function split_relation_fields()
  241. {
  242. if(!is_array($this->data['relation'])) return 0;
  243. $file_types = array('image','video','archive');
  244. foreach($this->data['relation'] as $model => $model_attrs)
  245. {
  246. $this->data['relation'][$model]['page_fields'] = array();
  247. foreach($model_attrs['fields'] as $field_id => $attrs)
  248. {
  249. if($attrs['visibility'])
  250. {
  251. $visibilities = explode("|", $attrs['visibility']);
  252. foreach($visibilities as $visibility)
  253. {
  254. $this->data['relation'][$model]['page_fields'][$visibility][$field_id] = $attrs;
  255. }
  256. }
  257. }
  258. }
  259. }
  260. protected function replace_vars(&$field)
  261. {
  262. // '$this->var' is replaced by [[var]]
  263. $var = get_text_between_tags("[[","]]",$field);
  264. if($var)
  265. {
  266. $vars = explode("->",$var);
  267. switch(count($vars))
  268. {
  269. case 1: $var = $this->$vars[0];
  270. break;
  271. case 2: $var = $this->$vars[0]->$vars[1];
  272. break;
  273. case 3: $var = $this->$vars[0]->$vars[1]->$vars[2];
  274. break;
  275. case 4: $var = $this->$vars[0]->$vars[1]->$vars[2]->$vars[3];
  276. }
  277. $field = replace_text_between_tags("[[","]]" ,$var, $field, true);
  278. }
  279. }
  280. }
  281. ?>