PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/system/engine/engine_library/formtools.enginelib.php

https://bitbucket.org/threetopia/thtech
PHP | 731 lines | 673 code | 20 blank | 38 comment | 66 complexity | 65370e1cbfaa147189de22bf56b04252 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. /*
  3. * File name : formtool.enignelib.php
  4. * Author : Tri Hartanto
  5. * Site : trihartanto.com
  6. * Framework : thtech
  7. * Library type : Engine Library
  8. * Version : 1.6
  9. * License : GPL
  10. * Create Date : 11 Dec 2013
  11. * Modified Date : 29 Jan 2014
  12. * File Description : This file contains formtools class to be used by the framework and CMS system.
  13. *
  14. * For more license information please kindly open and read LICENSE.txt file
  15. */
  16. class FormTools_EngineLibrary extends Systems
  17. {
  18. /*
  19. * Form creation and validation method
  20. */
  21. public $result = '';
  22. private function formvalidation_process($val=NULL,$key=NULL,$method=NULL)
  23. {
  24. /*
  25. * Validation for form
  26. */
  27. $validation = (isset($val['validation']))?$val['validation']:array();
  28. $isvalid = array();
  29. $message = '';
  30. $output = '';
  31. $result = false;
  32. $typeuserange = array('select','radio','checkbox');
  33. $method = ($val['type']=='file')?'_FILES':$method;
  34. $source = ($method==='_FILES' and !empty($_FILES))?$_FILES:(($method==='_POST' and !empty($_POST))?$_POST:(($method==='_GET' and !empty($_GET))?$_GET:array()));
  35. $value = (isset($val['option']))?$val['option']:((!empty($val['value']))?$val['value']:NULL);
  36. if(!isset($validation['isvalid']))
  37. {
  38. if(isset($val) and $val['type']=='email')
  39. {
  40. $validation[] = 'email';
  41. }
  42. if(isset($val) and $val['type']=='date')
  43. {
  44. $validation[] = 'date';
  45. }
  46. if(isset($val['disabled']))
  47. {
  48. if(is_array($val['disabled']))
  49. {
  50. $validation['disabled'] = $val['disabled'];
  51. }
  52. else
  53. {
  54. $validation[] = 'disabled';
  55. }
  56. }
  57. if(isset($val) and $val['type']=='recaptcha')
  58. {
  59. $validation[] = 'required';
  60. $validation[] = 'recaptcha';
  61. $val['name'] = 'recaptcha_response_field';
  62. }
  63. if(isset($val) and in_array($val['type'],$typeuserange) and ((empty($val['checked']) and empty($val['selected'])) and empty($_POST[$val['name']])))
  64. {
  65. $value = array();
  66. }
  67. if(isset($val) and in_array($val['type'],$typeuserange) and !empty($_POST[$val['name']]))
  68. {
  69. $validation[] = 'range';
  70. }
  71. $maxvalue = (!empty($val['max']))?$val['max']:((!empty($validation['max']))?$validation['max']:NULL);
  72. if(!empty($maxvalue) and !empty($_POST[$val['name']]))
  73. {
  74. $validation['max'] = $maxvalue;
  75. }
  76. $minvalue = (!empty($val['min']))?$val['min']:((!empty($validation['min']))?$validation['min']:NULL);
  77. if(!empty($minvalue) and !empty($_POST[$val['name']]))
  78. {
  79. $validation['min'] = $minvalue;
  80. }
  81. if(isset($val['maxlength']))
  82. {
  83. $validation['maxlength'] = $val['maxlength'];
  84. }
  85. if(isset($val['minlength']))
  86. {
  87. $validation['minlength'] = $val['minlength'];
  88. }
  89. $filtered = $this->_SysEngine->inputtools->filter($val['name'],array($val['name']=>$value),$validation,array($val['name']=>$key),$method);
  90. $isvalid = (isset($filtered['validation'][$val['name']]))?array($filtered['validation'][$val['name']]):array(true);
  91. $message = (isset($filtered['message'][$val['name']]))?$filtered['message'][$val['name']]:'';
  92. $result = (!empty($source) and isset($filtered['result'][$val['name']]))?$filtered['result'][$val['name']]:NULL;
  93. }
  94. else
  95. {
  96. $isvalid[] = $validation['isvalid'];//overwrite by manual value provide from input
  97. if($validation['isvalid']==false and !empty($validation['invalid_message']))
  98. {
  99. $message = $validation['invalid_message'];
  100. }
  101. else
  102. {
  103. $message = ((!is_numeric($key))?$key:$val['name']).'is invalid';
  104. }
  105. }
  106. /*
  107. * Validation end here
  108. */
  109. $isvalid = (is_array($isvalid) and in_array(false,$isvalid))?false:true;
  110. return array('isvalid'=>$isvalid,'result'=>$result,'message'=>$message);
  111. }
  112. public function createform($data=NULL)
  113. {
  114. $_SysEngine = $this->_SysEngine;
  115. $_AppData = $this->_AppData;
  116. $_URLDecode = $this->_URLDecode;
  117. $validation = (!empty($data['validation']))?$data['validation']:array();
  118. $result = (!empty($data['result']))?$data['result']:array();
  119. $rowdeep = (!empty($data['rowdeep']))?$data['rowdeep']:1;
  120. $method = (!empty($data['form']['method']))?'_'.strtoupper($data['form']['method']):'_POST';
  121. $hash = array();
  122. $html = '';
  123. if(!empty($data['form']))
  124. {
  125. $html .= '<form';
  126. foreach($data['form'] as $key=>$val)
  127. {
  128. $key = strtolower($key);
  129. if($key=='action' and empty($val))
  130. {
  131. $val = $this->_SysEngine->urltools->createurl(array('URLApp'=>$_AppData[0]['uprgm_name'],'URLLink'=>$_URLDecode['URLLink'],'URLString'=>$_URLDecode['URLString']));
  132. }
  133. $html .= ' '.$key.'="'.$val.'" ';
  134. }
  135. $html .= '>';
  136. }
  137. $html .= '<table';
  138. if(!empty($data['table']))
  139. {
  140. foreach($data['table'] as $key=>$val)
  141. {
  142. $key = strtolower($key);
  143. $html .= ' '.$key.'="'.$val.'"'.' ';
  144. }
  145. }
  146. $html .= '>';
  147. if($rowdeep>1)
  148. {
  149. $html .= '<tr>';
  150. }
  151. if(!empty($data['input']))
  152. {
  153. foreach($data['input'] as $key=>$val)
  154. {
  155. if(isset($val['form']))
  156. {
  157. $formdata = (!empty($data['form']))?$data['form']:NULL;
  158. }
  159. if($rowdeep<=1)
  160. {
  161. $html .= '<tr>';
  162. }
  163. $html .= ' <td>'.((!is_numeric($key) and !empty($key))?$key:'').'</td>';
  164. $html .= ' <td>'.((!is_numeric($key) and !empty($key))?'&nbsp;:&nbsp;':'').'</td>';
  165. $html .= ' <td>';
  166. if(is_array($val) and (is_array($val[key($val)]) and is_numeric(key($val))))
  167. {
  168. $tabledata = (isset($val['tabledata']))?$val['tabledata']:array('class'=>'table_subform');unset($val['tabledata']);
  169. $formcreate_formrow = $this->createform(array('input'=>$val,'validation'=>$validation,'result'=>$result,'table'=>$tabledata,'rowdeep'=>$rowdeep+1));
  170. $validation = array_merge($validation,$formcreate_formrow['validation']);
  171. $result = array_merge($result,$formcreate_formrow['result']);
  172. $html .= $formcreate_formrow['html'];
  173. $hash = array_merge($hash,$formcreate_formrow['hash']);
  174. }
  175. elseif(is_array($val) and isset($val['name']))
  176. {
  177. $validationdata = $this->formvalidation_process($val,$key,$method/*array('val'=>$val,'key'=>$key,'method'=>$method)*/);
  178. $val['validationdata'][$val['name']] = $validationdata;
  179. $validation[$val['name']] = $validationdata['isvalid'];
  180. ($validationdata['result']===false)?NULL:$result[$val['name']] = $validationdata['result'];
  181. $html .= ' '.$this->formcreate_formattrib($val);
  182. $hash[] = $val['name'];
  183. }
  184. else
  185. {
  186. $html .= ' '.$this->formcreate_formattrib($val);
  187. }
  188. $html .= ' </td>';
  189. if($rowdeep<=1)
  190. {
  191. $html .= '</tr>';
  192. }
  193. }
  194. }
  195. if($rowdeep>1)
  196. {
  197. $html .= '</tr>';
  198. }
  199. else
  200. {
  201. $time = time();
  202. if(in_array('recaptcha',$hash))
  203. {
  204. $hash[] = 'recaptcha_challenge_field';
  205. $hash[] = 'recaptcha_response_field';
  206. unset($hash['recaptcha']);
  207. }
  208. asort($hash);
  209. $input = $_SysEngine->inputtools->filter(NULL,array(),array(),array(),$method);
  210. $inputkeys = array_keys($input['result']);
  211. asort($inputkeys);
  212. //print_r($inputkeys);echo '<br>';print_r($hash);echo '<br>';
  213. $resulthash = hash('sha1',(implode('',$inputkeys).SYSTEMHASH.$time));
  214. $hash = hash('sha1',(implode('',array_intersect($inputkeys,$hash)).SYSTEMHASH.$time));
  215. //$html .= '<input type="hidden" name="_formhash" value="'.$hash.'">';
  216. $validation['_formhash'] = ($resulthash===$hash)?true:false;
  217. }
  218. $html .= '</table>';
  219. if(isset($data['form']))
  220. {
  221. $html .= '</form>';
  222. }
  223. return array('html'=>$html,'validation'=>$validation,'result'=>$result,'hash'=>$hash);
  224. }
  225. private function formcreate_formattrib($data=NULL)
  226. {
  227. $InputType = array(/*'button','checkbox',*/'color',/*'date','datetime','file',*/'datetime-local','email','hidden','image','month','number','password',/*'radio',*/'range','reset','search'/*,'submit'*/,'tel','text','time','url','week');
  228. $html = '';
  229. $method = (isset($data['type']))?'formcreate_'.$data['type']:'';
  230. if(!is_array($data))
  231. {
  232. $html = $data;
  233. }
  234. else if(isset($data['type']) and in_array($data['type'],$InputType))
  235. {
  236. ksort($data);
  237. $html = $this->formcreate_input($data);
  238. }
  239. else if($method!='' and method_exists($this,$method))
  240. {
  241. ksort($data);
  242. $html = $this->$method($data);
  243. }
  244. return $html;
  245. }
  246. private function formcreate_submit($data=NULL)
  247. {
  248. return $this->formcreate_button($data);
  249. }
  250. private function formcreate_button($data=NULL)
  251. {
  252. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  253. $data['value'] = (isset($data['value']))?$data['value']:NULL;
  254. $clear = (isset($data['clear']))?$data['clear']:NULL;
  255. unset($data['validation'],$data['validationdata'],$data['back_title'],$data['clear']);
  256. $html = '';
  257. if(!empty($data))
  258. {
  259. $title = (array_key_exists('title', $data))?$data['title']:$data['value'];
  260. $html .= '<div class="buttonform input'.$data['name'].'">';
  261. $html .= '<button';
  262. foreach($data as $key=>$val)
  263. {
  264. $key = strtolower($key);
  265. if($key!='separator' and $key!='title')
  266. {
  267. (isset($validationdata['result']) and $key=='value' and $clear!='clear')?$val = $validationdata['result']:NULL;
  268. $html .= ' '.$key.'="'.$val.'"';
  269. }
  270. }
  271. $html .= '/>';
  272. $html .= $title;
  273. $html .= '</button>';
  274. $html .= '</div>';
  275. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  276. {
  277. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  278. }
  279. }
  280. return $html;
  281. }
  282. private function formcreate_radio($data=NULL)
  283. {
  284. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  285. $value = (isset($data['value']))?$data['value']:NULL;
  286. $checked = (isset($data['checked']))?$data['checked']:NULL;
  287. $clear = (isset($data['clear']))?$data['clear']:NULL;
  288. unset($data['validation'],$data['validationdata'],$data['back_title'],$data['value'],$data['checked'],$data['clear']);
  289. $html = '';
  290. if(!empty($data))
  291. {
  292. $this->_SysEngine->addhtmlhead(array('style'=>array('.radioform{width:13px;}')));
  293. $loop = 0;
  294. $html .= '<div class="radioform radio'.$data['name'].'">';
  295. $html .= ' <ul>';
  296. foreach($value as $key0=>$val0)
  297. {
  298. $html .= ' <li>';
  299. if(!empty($val0))
  300. {
  301. $data['class'] = 'radioform'.((!empty($data['class']))?' '.$data['class']:'');
  302. $html .= '<input';
  303. foreach($data as $key1=>$val1)
  304. {
  305. $key1 = strtolower($key1);
  306. $html .= ' '.$key1.'="'.$val1.'"';
  307. }
  308. $html .= ' value="'.$key0.'" ';
  309. $html .= ((!empty($checked) and !isset($validationdata['result']) and $clear!='clear')?(in_array($key0,$checked)):((isset($validationdata['result']) and $clear!='clear')?$validationdata['result']==$key0:false))?'checked="checked"':'';
  310. $html .= '/>';
  311. }
  312. $html .= ' '.$val0.' ';
  313. $html .= ' </li>';
  314. $loop++;
  315. }
  316. $html .= ' </ul>';
  317. $html .= '</div>';
  318. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  319. {
  320. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  321. }
  322. }
  323. return $html;
  324. }
  325. private function formcreate_checkbox($data=NULL)
  326. {
  327. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  328. $value = (isset($data['value']))?$data['value']:NULL;
  329. $checked = (isset($data['checked']))?$data['checked']:NULL;
  330. $clear = (isset($data['clear']))?$data['clear']:NULL;
  331. $class = (isset($data['class']))?$data['class']:NULL;
  332. $id = (isset($data['id']))?$data['id']:NULL;
  333. unset($data['validation'],$data['validationdata'],$data['back_title'],$data['value'],$data['checked'],$data['clear']);
  334. $html = '';
  335. $validationdata['result'] = (isset($validationdata['result']))?$validationdata['result']:false;
  336. if(!empty($value))
  337. {
  338. $loop1=1;
  339. $this->_SysEngine->addhtmlhead(array('style'=>array('.checkboxinput{width:13px;}')));
  340. $html .= '<div class="checkboxform checkbox'.$data['name'].'">';
  341. $html .= ' <ul>';
  342. foreach($value as $key0=>$val0)
  343. {
  344. $html .= '<li>';
  345. if(!empty($data))
  346. {
  347. $label = '';
  348. $data['class'] = 'checkboxinput'.((!empty($data['class']))?' '.$class:'');
  349. $data['id'] = ((!empty($id))?$id.' ':'').$data['name'].'_checkbox';
  350. $html .= '<input';
  351. foreach($data as $key1=>$val1)
  352. {
  353. $key1 = strtolower($key1);
  354. if($key1=='name')
  355. {
  356. $val1 = $val1.'[]';
  357. }
  358. if($key1=='id')
  359. {
  360. $val1 = $val1.$loop1;
  361. $label = $val1;
  362. }
  363. $val1 = ((is_array($val1) and in_array($key0,$val1)))?$key1:$val1;
  364. $html .= (!is_array($val1))?' '.$key1.'="'.$val1.'" ':'';
  365. }
  366. $html .= ' value="'.$key0.'" ';
  367. $html .= (($validationdata['result']!==false and is_array($validationdata['result']) and $clear!='clear')?(in_array($key0,$validationdata['result'])):(($validationdata['result']!==false and !is_array($validationdata['result']) and $clear!='clear')?($validationdata['result']==$key0):(($validationdata['result']===false and !empty($checked) and $clear!='clear')?(in_array($key0,$checked)):false)))?' checked="checked"':'';
  368. $html .= '/>';
  369. $loop1++;
  370. }
  371. $html .= '<label for="'.$label.'">'.$val0.'</label>';
  372. $html .= '</li>';
  373. }
  374. $html .= ' </ul>';
  375. $html .= '</div>';
  376. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  377. {
  378. //$html .= '<tr>';
  379. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  380. //$html .= '</tr>';
  381. }
  382. }
  383. return $html;
  384. }
  385. private function formcreate_input($data=NULL)
  386. {
  387. //print_r($data);
  388. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  389. $data['value'] = (isset($data['value']))?$data['value']:NULL;
  390. $clear = (isset($data['clear']))?$data['clear']:NULL;
  391. unset($data['validation'],$data['validationdata'],$data['back_title'],$data['clear']);
  392. $html = '';
  393. if(!empty($data))
  394. {
  395. $html .= '<div class="inputform input'.$data['name'].'">';
  396. $html .= '<input';
  397. foreach($data as $key=>$val)
  398. {
  399. $key = strtolower($key);
  400. if($key!='separator' and $key!='title')
  401. {
  402. (!empty($validationdata['result']) and $key=='value' and $clear!='clear')?$val = $validationdata['result']:NULL;
  403. $html .= ' '.$key.'="'.$val.'" ';
  404. }
  405. }
  406. $html .= '/>';
  407. $html .= '</div>';
  408. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  409. {
  410. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  411. }
  412. }
  413. return $html;
  414. }
  415. private function formcreate_date($data=NULL)
  416. {
  417. $browser = $this->_SysEngine->browsertools->getinfo();
  418. if(in_array($browser['browser'],array('Firefox','Internet Explorer')))
  419. {
  420. $addhtmlhead = array(
  421. "link"=>array(
  422. array('rel'=>"stylesheet",'href'=>"http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css"),
  423. array('rel'=>"stylesheet",'href'=>"http://jqueryui.com/jquery-wp-content/themes/jqueryui.com/style.css")
  424. ),
  425. "script"=>array(
  426. array("src"=>"http://code.jquery.com/jquery-1.11.0.min.js"),
  427. array("src"=>"http://code.jquery.com/ui/1.11.2/jquery-ui.js"),
  428. '$(function(){$("#'.((!empty($data['id']))?$data['id']:$data['name']).'").datepicker();});'
  429. )
  430. );
  431. $this->_SysEngine->addhtmlhead(array('html_head'=>$addhtmlhead));
  432. $data['id'] = ((!empty($data['id']))?$data['id']:$data['name']);
  433. }
  434. return $this->formcreate_input($data);
  435. }
  436. private function formcreate_file($data=NULL)
  437. {
  438. $html = '';
  439. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  440. $multiple = (isset($data['multiple']))?true:false;
  441. unset($data['multiple']);
  442. $data['name'] = (strpos($data['name'],'[]')===false)?$data['name'].'[]':$data['name'];
  443. $input = $this->formcreate_input($data);
  444. for($i=0;$i<((!empty($validationdata['result']['name']))?count($validationdata['result']['name']):1);$i++)
  445. {
  446. $html .= $input;
  447. }
  448. if($multiple===true)
  449. {
  450. $html .= $this->formcreate_button(array('name'=>'addmorefiles','class'=>'add_more_files','value'=>'Add More Files'));
  451. $addhtmlhead = array(
  452. "script"=>array(
  453. '$(document).ready(function(){$(\'.add_more_files\').click(function(e){e.preventDefault();$(this).before(\''.$input.'\');});});'
  454. )
  455. );
  456. $this->_SysEngine->addhtmlhead(array('html_head'=>$addhtmlhead));
  457. }
  458. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  459. {
  460. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  461. }
  462. return $html;
  463. }
  464. private function formcreate_select($data=NULL)
  465. {
  466. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  467. $option = $data['option'];
  468. $selected = (isset($data['selected']))?$data['selected']:NULL;
  469. $disabled = NULL;
  470. if(!empty($data['disabled']) and is_array($data['disabled']))
  471. {
  472. $disabled = $data['disabled'];
  473. unset($data['disabled']);
  474. }
  475. $clear = (isset($data['clear']))?$data['clear']:NULL;
  476. unset($data['validation'],$data['selected'],$data['option'],$data['validationdata'],$data['clear']);
  477. $html = '';
  478. if(!empty($data))
  479. {
  480. $html .= '<div class="selectform select'.$data['name'].'">';
  481. $html .= '<select';
  482. foreach($data as $key=>$val)
  483. {
  484. $key = strtolower($key);
  485. if($key!='separator' and $key!='option')
  486. {
  487. if($key=='name' and isset($data['multiple']))
  488. {
  489. $val = $val.'[]';
  490. }
  491. $html .= ' '.$key.'="'.$val.'" ';
  492. }
  493. }
  494. $html .= '>';
  495. if(!empty($option))
  496. {
  497. foreach($option as $key=>$val)
  498. {
  499. $html .= '<option value="'.$key.'"';
  500. //$html .= ((!isset($_POST[$data['name']]) and !empty($selected))?in_array($key,$selected):((isset($_POST[$data['name']]) and is_array($_POST[$data['name']]))?in_array($key,$_POST[$data['name']]):((isset($_POST[$data['name']]))?$_POST[$data['name']]==$key:false)))?' selected="selected"':'';
  501. $html .= ((isset($validationdata['result']) and is_array($validationdata['result']) and $clear!='clear')?in_array($key,$validationdata['result']):((isset($validationdata['result']) and $clear!='clear')?$validationdata['result']==$key:((!isset($validationdata['result']) and !empty($selected) and $clear!='clear')?in_array($key,$selected):false)))?' selected="selected"':'';
  502. $html .= (is_array($disabled) and in_array($key,$disabled))?' disabled="disabled"':'';
  503. $html .= '>';
  504. $html .= ''.$val.'';
  505. $html .= '</option>';
  506. }
  507. }
  508. $html .= '</select>';
  509. $html .= '</div>';
  510. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  511. {
  512. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  513. }
  514. }
  515. return $html;
  516. }
  517. private function formcreate_textarea($data=NULL)
  518. {
  519. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  520. $clear = (isset($data['clear']))?$data['clear']:NULL;
  521. $value = ((!empty($validationdata['result']) and $clear!='clear')?$validationdata['result']:((isset($data['value']) and !empty($data['value']) and $clear!='clear')?$data['value']:NULL));
  522. unset($data['value'],$data['validation'],$data['type'],$data['validationdata'],$data['clear']);
  523. $html = '';
  524. if(!empty($data))
  525. {
  526. $html .= '<div class="inputform input'.$data['name'].'">';
  527. $html .= '<textarea';
  528. foreach($data as $key=>$val)
  529. {
  530. $key = strtolower($key);
  531. $html .= ' '.$key.'="'.$val.'" ';
  532. }
  533. $html .= '/>';
  534. $html .= $value;
  535. $html .= '</textarea>';
  536. $html .= '</div>';
  537. }
  538. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  539. {
  540. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  541. }
  542. return $html;
  543. }
  544. private function formcreate_ckeditor($data=NULL)
  545. {
  546. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  547. $data['id'] = (!empty($data['id']))?$data['id']:$data['name'];
  548. $version = ((!empty($data['version']))?$data['version']:'basic');
  549. unset($data['version']);
  550. $html = $this->formcreate_textarea($data);
  551. $html .= '<script>CKEDITOR.replace(\''.$data['name'].'\');</script>';
  552. $addhtmlhead = array(
  553. "script"=>array(
  554. array("src"=>"http://cdn.ckeditor.com/4.4.4/".$version."/ckeditor.js")
  555. )
  556. );
  557. $this->_SysEngine->addhtmlhead(array('html_head'=>$addhtmlhead));
  558. return $html;
  559. }
  560. private function formcreate_recaptcha($data=NULL)
  561. {
  562. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  563. $data['value'] = (isset($data['value']))?$data['value']:NULL;
  564. $clear = (isset($data['clear']))?$data['clear']:NULL;
  565. $html = '';
  566. if(!empty($data))
  567. {
  568. $html .= $this->_SysEngine->recaptchatools->gethtml();
  569. if(isset($validationdata['isvalid']) and $validationdata['isvalid']==false)
  570. {
  571. $html .= '<span class="input_error" id="'.$data['name'].'_input_error">'.$validationdata['message'].'</span>';
  572. }
  573. }
  574. return $html;
  575. }
  576. private function formcreate_autocomplete($data=NULL)
  577. {
  578. $validationdata = (!empty($data['validationdata'][$data['name']]))?$data['validationdata'][$data['name']]:array();
  579. $data['value'] = (isset($validationdata[$data['name']]['result']))?$validationdata[$data['name']]['result']:((!empty($data['value']))?$data['value']:NULL);
  580. $clear = (isset($data['clear']))?$data['clear']:NULL;
  581. $acoption = (!empty($data['acoption']))?$data['acoption']:"";
  582. unset($data['acoption']);
  583. $html = '';
  584. if(!empty($data))
  585. {
  586. $data['type'] = 'text';
  587. $data['id'] = (!empty($data['id']))?$data['id']:'autocomplete'.$data['name'];
  588. $this->_SysEngine->addhtmlhead(
  589. array(
  590. 'script'=>array(
  591. array("src"=>"http://code.jquery.com/jquery-1.11.0.min.js"),
  592. file_get_contents(dirname(__FILE__).'/formtools/autocomplete/jquery.autocomplete.js'),
  593. "var options, a;jQuery(function(){options = {".$acoption."};a = $('#".$data['id']."').autocomplete(options);});"
  594. ),
  595. 'style'=>array(
  596. file_get_contents(dirname(__FILE__).'/formtools/autocomplete/style.css')
  597. )
  598. )
  599. );
  600. $html .= $this->formcreate_formattrib($data);
  601. }
  602. return $html;
  603. }
  604. /*
  605. * End of form creation method
  606. */
  607. /*
  608. * Form creation and validation method
  609. */
  610. public function createlist($data=NULL)
  611. {
  612. $caption = (!empty($data['caption']))?$data['caption']:array();
  613. $thead = (!empty($data['thead']))?$data['thead']:((!empty($data['input']))?$data['input']:array());
  614. $tbody = (!empty($data['tbody']))?$data['tbody']:((!empty($data['rawdata']))?$data['rawdata']:array());
  615. $tfoot = (!empty($data['tfoot']))?$data['tfoot']:array();
  616. $html = '';
  617. if(!empty($data['form']))
  618. {
  619. $html .= '<form';
  620. foreach($data['form'] as $key=>$val)
  621. {
  622. $val = ($key=='action' and is_array($val))?$this->_SysEngine->urltools->createurl($val):$val;
  623. $html .= ' '.$key.'="'.$val.'"';
  624. }
  625. $html .= '>';
  626. }
  627. $html .= '<table';
  628. if(!empty($data['table']))
  629. {
  630. foreach($data['table'] as $key=>$val)
  631. {
  632. $html .= ' '.$key.'="'.$val.'" ';
  633. }
  634. }
  635. $html .= '>';
  636. if(!empty($tbody) and !empty($thead))
  637. {
  638. $loop = 0;
  639. $html .= '<thead>';
  640. $html .= ' <tr class="listhead">';
  641. foreach($thead as $k_head=>$v_head)
  642. {
  643. $html .= '<td>';
  644. $html .= $k_head;
  645. $html .= '</td>';
  646. }
  647. $html .= ' </tr>';
  648. $html .= '</thead>';
  649. $html .= '<tbody>';
  650. foreach($tbody as $k_body=>$v_body)
  651. {
  652. $loop++;
  653. $rowmodulo = $loop%2;
  654. $html .= '<tr class="listcontent listcontent_'.$rowmodulo.'">';
  655. foreach($thead as $k_rowhead=>$v_rowhead)
  656. {
  657. $class = str_replace(' ','',strtolower($k_rowhead));
  658. $html .= '<td class="list_'.$class.' list_'.$class.'_'.$rowmodulo.'">';
  659. $html .= $this->createlist_replacefilter($v_body,$v_rowhead);
  660. $html .= '</td>';
  661. }
  662. $html .= '</tr>';
  663. }
  664. $html .= '</tbody>';
  665. }
  666. if(!empty($tfoot))
  667. {
  668. $html .= '<thead>';
  669. $html .= ' <tr class="listfoot">';
  670. foreach($tfoot as $k_foot=>$v_foot)
  671. {
  672. $html .= '<td>';
  673. $html .= $k_foot;
  674. $html .= '</td>';
  675. }
  676. $html .= ' </tr>';
  677. $html .= '</thead>';
  678. }
  679. $html .= '</table>';
  680. if(!empty($data['form']))
  681. {
  682. $html .= '</form>';
  683. }
  684. $html = html_entity_decode($html);
  685. return array('html'=>$html);
  686. }
  687. private $replacefilter_list = array('input','urllink','anchor');
  688. private function createlist_replacefilter($v_body=array(),$v_rowhead='')
  689. {
  690. $replace = (array_key_exists($v_rowhead, $v_body))?$v_body[$v_rowhead]:str_replace(array_keys($v_body),array_values($v_body),$v_rowhead);
  691. $html = '';
  692. foreach($this->replacefilter_list as $filter)
  693. {
  694. $pattern = "/<$filter>(.*?)<\/$filter>/";
  695. preg_match_all($pattern, $replace, $matches);
  696. if(!empty($matches[1]))
  697. {
  698. for($i=0;$i<count($matches[1]);$i++)
  699. {
  700. $val = ($filter=='input')?$this->formcreate_formattrib(json_decode($matches[1][$i],true)):(($filter=='anchor')?$this->_SysEngine->urltools->createanchor(json_decode($matches[1][$i],true)):'');
  701. $html .= str_replace("<$filter>".$matches[1][$i]."</$filter>",$val,$replace);
  702. }
  703. }
  704. }
  705. return (!empty($html))?$html:$replace;
  706. }
  707. /*
  708. * End of form creation method
  709. */
  710. }
  711. ?>