PageRenderTime 57ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 1ms

/application/admin/models/newform.php

http://f-engine.googlecode.com/
PHP | 690 lines | 453 code | 192 blank | 45 comment | 98 complexity | cd6432f78bbc3fd57132ba3d8b992a1c MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. class newform extends Model {
  3. private $post;
  4. private $fe;
  5. private $apppath;
  6. private $public_data;
  7. private $foldername;
  8. private $filename;
  9. private $assets;
  10. private $masterview;
  11. public $insert;
  12. private $insert_vars;
  13. public $update;
  14. private $update_vars;
  15. public $datagrid;
  16. private $datagrid_vars;
  17. public $delete;
  18. private $delete_vars;
  19. public $model;
  20. private $model_vars;
  21. private $template_folder;
  22. private $files;
  23. function newform() {
  24. parent::Model();
  25. }
  26. function init($data) {
  27. $this->post = $data;
  28. $this->assets = array();
  29. $this->insert = array();
  30. $this->insert_vars = array();
  31. $this->update = array();
  32. $this->update_vars = array();
  33. $this->datagrid = array();
  34. $this->datagrid_vars = array();
  35. $this->delete = array();
  36. $this->delete_vars = array();
  37. $this->model = array();
  38. $this->model_vars = array();
  39. if(isset($this->post["model"]) and $this->post["model"] == 1) {
  40. $this->template_folder = $this->post["template"]."/model";
  41. } else {
  42. $this->template_folder = $this->post["template"]."/controller";
  43. }
  44. $this->files = array();
  45. //f-engine instance
  46. $this->fe =& get_instance();
  47. /**
  48. * set apppath and public_data
  49. */
  50. if( isset($_SESSION['project']) ) {
  51. $apppath = explode("/",str_replace("\\","/", APPPATH));
  52. $apppath[count($apppath)-2] = $_SESSION['project'];
  53. $this->apppath = implode("/",$apppath);
  54. $this->public_data = $this->apppath.'public_data/';
  55. } else {
  56. $this->apppath = APPPATH;
  57. $this->public_data = PUBLIC_DATA;
  58. }
  59. /**
  60. * set foldername and filename
  61. */
  62. $path = explode('/',$this->post['url']) ? explode('/',$this->post['url']) : array($this->post['url']);
  63. if( trim($path[count($path)-1]) == "")
  64. unset($path[count($path)-1]);
  65. $vpath = $path[0];
  66. $this->filename = $path[count($path)-1];
  67. $this->foldername = $this->post['url'];
  68. if($this->filename == '')
  69. $this->filename = "unnamed";
  70. if($this->foldername == '')
  71. $this->foldername = "unnamed";
  72. /*
  73. * parse input data and set al required var values
  74. */
  75. $this->set_assets();
  76. $this->set_insert_vars();
  77. $this->set_update_vars();
  78. $this->set_datagrid_vars();
  79. $this->set_delete_vars();
  80. if(isset($this->post["model"]) and $this->post["model"] == 1) {
  81. $this->set_model_vars();
  82. }
  83. /*
  84. * Parse form templates
  85. */
  86. $this->parse_templates();
  87. $this->debug(false,false,false);
  88. }
  89. function create_folders() {
  90. if(!file_exists($this->apppath.'controllers/'.$this->foldername)) {
  91. mkdir($this->apppath.'controllers/'.$this->foldername, 0777, true);
  92. chmod($this->apppath.'controllers/'.$this->foldername, 0777);
  93. }
  94. if(!file_exists($this->apppath.'views/'.$this->foldername)) {
  95. mkdir($this->apppath.'views/'.$this->foldername, 0777, true);
  96. chmod($this->apppath.'views/'.$this->foldername, 0777);
  97. }
  98. }
  99. function set_files() {
  100. $default_name = $this->filename;
  101. if(isset($this->datagrid["form"])) {
  102. $this->files["controllers"][$this->foldername.'/'.$default_name.EXT] = $this->datagrid["form"];
  103. $this->files["views"][$this->foldername.'/datagrid_view'.EXT] = $this->datagrid["view"];
  104. unset($default_name);
  105. }
  106. if( isset($this->insert_vars["form"]) ) {
  107. if(isset($default_name)) {
  108. $filename = $default_name;
  109. unset($default_name);
  110. } else {
  111. $filename = 'insert';
  112. }
  113. $this->files["controllers"][$this->foldername.'/'.$filename.EXT] = $this->insert["form"];
  114. $this->files["controllers"][$this->foldername.'/save'.EXT] = $this->insert["controller"];
  115. $this->files["views"][$this->foldername.'/insert_view'.EXT] = $this->insert["view"];
  116. }
  117. if( isset($this->update_vars["form"]) ) {
  118. if(isset($default_name)) {
  119. $filename = $default_name;
  120. unset($default_name);
  121. } else {
  122. $filename = 'edit';
  123. }
  124. $this->files["controllers"][$this->foldername.'/'.$filename.EXT] = $this->update["form"];
  125. $this->files["controllers"][$this->foldername.'/update'.EXT] = $this->update["controller"];
  126. $this->files["views"][$this->foldername.'/edit_view'.EXT] = $this->update["view"];
  127. }
  128. if( count($this->delete_vars) > 0 ) {
  129. $this->files["controllers"][$this->foldername.'/delete'.EXT] = $this->delete;
  130. }
  131. if( count($this->model_vars) > 0 and $this->model_vars["modelname"] != "" ) {
  132. $this->files["models"][$this->model_vars["modelname"].EXT] = $this->model;
  133. }
  134. }
  135. function get_files () {
  136. return $this->files;
  137. }
  138. function write_files() {
  139. $this->set_files();
  140. foreach($this->files["controllers"] as $filename => $data) {
  141. if (!$handler = fopen($this->apppath.'controllers/'.$filename, 'w+')) {
  142. show_error("No se pudo abrir el archivo ".$this->apppath.'controllers/'.$filename);
  143. }
  144. if (fwrite($handler, '<?'.$data.'?>') === FALSE) {
  145. show_error("No se pudo escribir al archivo ".$this->apppath.'controllers/'.$filename);
  146. }
  147. fclose($handler);
  148. chmod($this->apppath.'controllers/'.$filename, 0777);
  149. }
  150. foreach($this->files["views"] as $filename => $data) {
  151. if (!$handler = fopen($this->apppath.'views/'.$filename, 'w+')) {
  152. show_error("No se pudo abrir el archivo ".$this->apppath.'views/'.$filename);
  153. }
  154. if (fwrite($handler, $data) === FALSE) {
  155. show_error("No se pudo escribir al archivo ".$this->apppath.'views/'.$filename);
  156. }
  157. fclose($handler);
  158. chmod($this->apppath.'views/'.$filename, 0777);
  159. }
  160. if(isset($this->files["models"])) {
  161. foreach($this->files["models"] as $filename => $data) {
  162. if (!$handler = fopen($this->apppath.'models/'.$filename, 'w+')) {
  163. show_error("No se pudo abrir el archivo ".$this->apppath.'models/'.$filename);
  164. }
  165. if (fwrite($handler, '<?'.$data) === FALSE) {
  166. show_error("No se pudo escribir al archivo ".$this->apppath.'models/'.$filename);
  167. }
  168. fclose($handler);
  169. chmod($this->apppath.'models/'.$filename, 0777);
  170. }
  171. }
  172. }
  173. function parse_templates() {
  174. /*
  175. * Filename / classname integrity check
  176. */
  177. $default_classname = $this->filename;
  178. if(isset($this->datagrid_vars["form"])) {
  179. $this->datagrid_vars["form"]["classname"] = $default_classname;
  180. unset($default_classname);
  181. }
  182. if( isset($this->insert_vars["form"]) && isset($default_classname) ) {
  183. $this->insert_vars["form"]["classname"] = $default_classname;
  184. unset($default_classname);
  185. }
  186. if( isset($this->update_vars["form"]) && isset($default_classname) ) {
  187. $this->update_vars["form"]["classname"] = $default_classname;
  188. }
  189. //datagrid
  190. if( isset($this->datagrid_vars["form"]) )
  191. $this->datagrid["form"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/resumecontroller',$this->datagrid_vars["form"],true);
  192. if( isset($this->datagrid_vars["view"]) )
  193. $this->datagrid["view"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/resume',$this->datagrid_vars["view"],true);
  194. //new record
  195. if( isset($this->insert_vars["view"]) )
  196. $this->insert["view"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/insert',$this->insert_vars["view"],true);
  197. if( isset($this->insert_vars["form"]) )
  198. $this->insert["form"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/controller',$this->insert_vars["form"],true);
  199. if( isset($this->insert_vars["controller"]) )
  200. $this->insert["controller"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/save',$this->insert_vars["controller"],true);
  201. // edit and update
  202. if( isset($this->update_vars["view"]) )
  203. $this->update["view"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/form',$this->update_vars["view"],true);
  204. if( isset($this->update_vars["form"]) )
  205. $this->update["form"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/savecontroller',$this->update_vars["form"],true);
  206. if( isset($this->update_vars["controller"]) )
  207. $this->update["controller"] = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/update',$this->update_vars["controller"],true);
  208. //delete
  209. if( count($this->delete_vars) > 0 )
  210. $this->delete = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/delete',$this->delete_vars,true);
  211. //model
  212. if( count($this->model_vars) > 0 )
  213. $this->model = $this->fe->load->view('tools/newcontroller/templates/'.$this->template_folder.'/model',$this->model_vars,true);
  214. }
  215. function set_assets() {
  216. if( isset($this->post['js']) )
  217. $this->assets['js'] = "'".implode("','",$this->post['js'])."'";
  218. if( isset($this->post['css']) )
  219. $this->assets['css'] = "'".implode("','",$this->post['css'])."'";
  220. if( isset($this->post['header']) )
  221. $this->assets['header'] = str_replace("_view.php","","'header/".implode("','",$this->post['header'])."'");
  222. if( isset($this->post['footer']) )
  223. $this->assets['footer'] = str_replace("_view.php","","'footer/".implode("','",$this->post['footer'])."'");
  224. if( isset($this->post['masterview']) )
  225. $this->masterview = trim($this->post['masterview']);
  226. }
  227. function set_datagrid_vars() {
  228. if(isset($this->post["resume_form_fields"]) && count($this->post["resume_form_fields"]) > 0) {
  229. /**
  230. * set datagrid form controller vars
  231. */
  232. $databases = array();
  233. foreach($this->post['resume_form_fields'] as $item) {
  234. $databases[] = substr($item,0,strpos($item,'.'));
  235. }
  236. $databases = array_unique($databases);
  237. if(count($databases) > 1 && isset($this->post['resume_rel_field1'])) {
  238. $where = array();
  239. for($i = 0; $i < count($this->post['resume_rel_field1']); $i++) {
  240. $where[] = "'".$this->post['resume_rel_field1'][$i]." = ".$this->post['resume_rel_field2'][$i]."'";
  241. }
  242. $where = 'array('.implode($where,",").');';
  243. } else {
  244. $where = 'array();';
  245. }
  246. $data = array('fields' => $this->post['resume_field_names'],'data' => array(),
  247. 'classname'=>$this->foldername,'vpath'=> $this->foldername,
  248. 'dbs' => $databases, 'where' => $where);
  249. if(isset($this->post['resume_form_fields'])) $data['data'] = array_unique(array_merge($data['data'], $this->post['resume_form_fields']));
  250. if(isset($this->post['edit_id_fields'])) $data['data'] = array_unique(array_merge($data['data'],$this->post['edit_id_fields']));
  251. if(isset($this->post['insert_field_names'])) $data['edit'] = true;
  252. if(isset($this->post['edit_field_names'])) $data['new'] = true;
  253. $data["assets"] = $this->assets;
  254. $data["masterview"] = $this->masterview;
  255. $i=0;
  256. foreach( $data["data"] as $key => $val) {
  257. if( !isset($data["fields"][$i]) || $data["fields"][$i] != array_pop(explode(".", $data['data'][$key])) ) {
  258. if(isset($data["fields"][$i]))
  259. $data['data'][$key] = $data['data'][$key]." as ".$data['fields'][$i];
  260. else
  261. $data['data'][$key] = $data['data'][$key]." as ".array_pop(explode(".",$data['data'][$key]));
  262. }
  263. $i++;
  264. }
  265. $this->datagrid_vars["form"] = $data;
  266. unset($data);
  267. /**
  268. * set datagrid view controller vars
  269. */
  270. $data = array(
  271. 'fields' => isset($this->post['resume_field_names']) ? $this->post['resume_field_names'] : array(),
  272. 'data' => isset($this->post['resume_form_fields']) ? $this->post['resume_form_fields'] : array(),
  273. 'identifiers' => isset($this->post['edit_id_fields']) ? $this->post['edit_id_fields'] : array(),
  274. 'delete_ids' => isset($this->post['remove_id_fields']) ? $this->post['remove_id_fields'] : array(),
  275. 'uri' => $_POST['url'],
  276. 'delete' => isset($this->post['delete']) ? true : false,
  277. 'edit' => isset($this->post['edit_field_names']) ? true : false,
  278. 'new' => isset($this->post['insert_field_names']) ? true : false,
  279. 'path' => $this->foldername
  280. );
  281. $this->datagrid_vars["view"] = $data;
  282. }
  283. }
  284. function set_insert_vars() {
  285. if(isset($this->post["insert_form_fields"]) && count($this->post["insert_form_fields"]) > 0) {
  286. /**
  287. * set insert form controller vars
  288. */
  289. $this->insert_vars["form"] = array(
  290. 'classname' => 'insert',
  291. 'view' => $this->foldername.'/insert',
  292. 'assets' => $this->assets
  293. );
  294. /**
  295. * set view vars
  296. */
  297. $view = array(
  298. 'target' => 'save',
  299. 'path' => $this->foldername,
  300. 'styles' => $this->post['insertform_style']
  301. );
  302. $view['field_names'] = array();
  303. if(isset($this->post['insert_field_names'])) {
  304. $view['field_names'] = $this->post['insert_field_names'];
  305. }
  306. $this->insert_vars["view"] = $view;
  307. unset($view);
  308. /**
  309. * set save controller vars
  310. */
  311. $databases = array();
  312. if(isset($this->post['insert_form_fields'])) {
  313. foreach($this->post['insert_form_fields'] as $item) {
  314. $databases[] = substr($item,0,strpos($item,'.'));
  315. }
  316. $data = array(
  317. 'fields' => $this->post['insert_field_names'],
  318. 'data' => $this->post['insert_form_fields'],
  319. 'path'=> $this->foldername,
  320. 'dbs' => array_unique($databases)
  321. );
  322. $i = 0;
  323. $data['rules'] = array();
  324. foreach($this->post['insert_form_fields'] as $item) {
  325. $data['rules'][$this->post['insert_field_names'][$i]] = $this->post['insert_validation_rules'][$i++];
  326. }
  327. $data['ignore'] = array();
  328. if(isset($this->post['insert_ignoreInDB'])) {
  329. $data['ignore'] = $this->post['insert_ignoreInDB'];
  330. }
  331. $data['styles'] = $this->post['insertform_style'];
  332. $this->insert_vars["controller"] = $data;
  333. } else {
  334. $this->insert_vars["controller"] = array();
  335. }
  336. }
  337. }
  338. function set_update_vars() {
  339. if(isset($this->post["edit_form_fields"]) && count($this->post["edit_form_fields"]) > 0) {
  340. /*
  341. * set edit form controller vars
  342. */
  343. $databases = array();
  344. foreach($this->post['edit_form_fields'] as $item) {
  345. $databases[] = substr($item,0,strpos($item,'.'));
  346. }
  347. $data = array(
  348. 'classname'=>'edit',
  349. 'path'=> site_url().$this->foldername,
  350. 'dbs' => array_unique($databases),
  351. 'view' => $this->foldername.'/'.'edit',
  352. 'uripos' => 1,
  353. 'assets' => $this->assets
  354. );
  355. $data['indexes'] = array();
  356. if(isset($this->post['edit_id_fields'])) {
  357. $data['indexes'] = $this->post['edit_id_fields'];
  358. }
  359. if(isset($_POST['edit_field_names']))
  360. $data = array_merge($data,array('field_names' => $this->post['edit_field_names']));
  361. else
  362. $data['field_names'] = array();
  363. if(isset($_POST['edit_form_fields']))
  364. $data = array_merge($data,array('form_names' => $this->post['edit_form_fields']));
  365. else
  366. $data['form_names'] = array();
  367. array_merge($data, array('data' => $this->post['edit_id_fields']) );
  368. $this->update_vars["form"] = $data;
  369. unset($data);
  370. /*
  371. * set edit form view vars
  372. */
  373. $uripos = 1;
  374. $target = '/';
  375. if(isset($this->post['edit_id_fields']))
  376. foreach($this->post['edit_id_fields'] as $item) {
  377. $target .= '".$this->uri->param('.$uripos++.')."';
  378. }
  379. $data = array('target' => 'update'.$target, 'path' => $this->foldername);
  380. if(isset($_POST['edit_field_names']))
  381. $data = array_merge($data,array('field_names' => $this->post['edit_field_names']));
  382. else
  383. $data['field_names'] = array();
  384. if(isset($_POST['edit_form_fields']))
  385. $data = array_merge($data,array('form_names' => $this->post['edit_form_fields']));
  386. else
  387. $data['form_names'] = array();
  388. $data['styles'] = $this->post['editform_style'];
  389. $this->update_vars["view"] = $data;
  390. unset($data);
  391. /*
  392. * set update controller vars
  393. */
  394. $uripos = 1;
  395. $databases = array();
  396. if(isset($this->post['edit_form_fields']))
  397. foreach($this->post['edit_form_fields'] as $item) {
  398. $databases[] = substr($item,0,strpos($item,'.'));
  399. }
  400. $data = array(
  401. 'path'=> $this->foldername,
  402. 'dbs' => array_unique($databases),
  403. 'uripos' => $uripos,
  404. 'view' => $this->foldername.'/edit'
  405. );
  406. if(isset($this->post['edit_form_fields']))
  407. $data = array_merge($data,array('fields' => $this->post['edit_field_names'],'data' => $this->post['edit_form_fields']));
  408. else {
  409. $data['edit_field_names'] = array();
  410. $data['edit_form_fields'] = array();
  411. }
  412. if(isset($this->post['edit_form_fields']))
  413. $data = array_merge($data, array('indexes' => $this->post['edit_id_fields']));
  414. $i = 0;
  415. $data['rules'] = array();
  416. if(isset($this->post['edit_form_fields'])) {
  417. foreach($this->post['edit_form_fields'] as $item) {
  418. $data['rules'][$this->post['edit_field_names'][$i]] = $this->post['edit_validation_rules'][$i++];
  419. }
  420. }
  421. $data['ignore'] = array();
  422. if(isset($this->post['edit_ignoreInDB'])) {
  423. $data['ignore'] = $this->post['edit_ignoreInDB'];
  424. }
  425. if(isset($this->post['edit_id_fields']))
  426. $data['indexes'] = $this->post['edit_id_fields'];
  427. else
  428. $data['indexes'] = array();
  429. $data['styles'] = $this->post['editform_style'];
  430. $this->update_vars["controller"] = $data;
  431. }
  432. }
  433. function set_delete_vars() {
  434. if(isset($this->post["delete"]) && isset($this->post["remove_id_fields"]) && count($this->post["remove_id_fields"]) > 0) {
  435. $this->delete_vars = array(
  436. 'path' => $this->foldername,
  437. 'table' => array_shift(explode(".",$this->post['remove_id_fields'][0])),
  438. 'field' => $this->post['remove_id_fields'][0]
  439. );
  440. }
  441. }
  442. function set_model_vars() {
  443. $this->model_vars["modelname"] = strtolower($this->post["modelname"]);
  444. if(isset($this->datagrid_vars["form"])) {
  445. $this->model_vars["datagrid"] = $this->datagrid_vars["form"];
  446. $this->datagrid_vars["form"]["modelname"] = $this->post["modelname"];
  447. }
  448. if(isset($this->insert_vars["form"])) {
  449. $this->model_vars["insert"] = $this->insert_vars["controller"];
  450. $this->insert_vars["form"]["modelname"] = $this->post["modelname"];
  451. }
  452. if(isset($this->update_vars["form"])) {
  453. $this->model_vars["update"] = $this->update_vars["controller"];
  454. $this->update_vars["form"]["modelname"] = $this->post["modelname"];
  455. }
  456. if(count($this->delete_vars) > 0) {
  457. $this->model_vars["delete"] = $this->delete_vars;
  458. $this->delete_vars["form"]["modelname"] = $this->post["modelname"];
  459. }
  460. if(false) {
  461. echo "<pre>";
  462. print_r($this->model_vars);
  463. die;
  464. }
  465. }
  466. function debug ($input = false, $output = false, $die = true) {
  467. if($input) {
  468. echo 'Apppath: '.$this->apppath.'<br />';
  469. echo 'Public_data: '.$this->public_data.'<br />';
  470. echo 'Foldername: '.$this->foldername.'<br />';
  471. echo "<pre>";
  472. print_r($this->post);
  473. echo "@@@@@@@@@@@@@@@@@";
  474. echo "<br />######### insert ###########<br />";
  475. print_r($this->insert_vars);
  476. echo "<br />######### update ###########<br />";
  477. print_r($this->update_vars);
  478. echo "<br />######### datagrid ###########<br />";
  479. print_r($this->datagrid_vars);
  480. echo "<br />######### delete ###########<br />";
  481. print_r($this->delete_vars);
  482. echo "</pre>";
  483. }
  484. if($output) {
  485. echo "<pre>";
  486. echo "########## datagrid ##########";
  487. print_r($this->datagrid);
  488. echo "########## insert ##########";
  489. print_r($this->insert);
  490. echo "########## update ##########";
  491. print_r($this->update);
  492. echo "</pre>";
  493. }
  494. if($die)
  495. die;
  496. }
  497. }
  498. ?>