formguide_form.class.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. class formguide_form {
  3. var $formid;
  4. var $fields;
  5. var $id;
  6. var $formValidator;
  7. function __construct($formid, $no_allowed = 0) {
  8. $this->formid = $formid;
  9. $this->no_allowed = $no_allowed ? 'disabled=""' : '';
  10. $this->fields = getcache('formguide_field_'.$formid, 'model');
  11. $this->siteid = get_siteid();
  12. }
  13. function get($data = array()) {
  14. $_groupid = param::get_cookie('_groupid');
  15. $this->data = $data;
  16. if(isset($data['id'])) $this->id = $data['id'];
  17. $info = array();
  18. $info = array();
  19. if (is_array($this->fields)) {
  20. foreach($this->fields as $field=>$v) {
  21. $func = $v['formtype'];
  22. $value = isset($data[$field]) ? new_html_special_chars($data[$field]) : '';
  23. if($func=='pages' && isset($data['maxcharperpage'])) {
  24. $value = $data['paginationtype'].'|'.$data['maxcharperpage'];
  25. }
  26. if(!method_exists($this, $func)) continue;
  27. $form = $this->$func($field, $value, $v);
  28. if($form !== false) {
  29. $star = $v['minlength'] || $v['pattern'] ? 1 : 0;
  30. $info[$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'=>$star,'isomnipotent'=>$v['isomnipotent'],'formtype'=>$v['formtype']);
  31. }
  32. }
  33. }
  34. return $info;
  35. }
  36. function text($field, $value, $fieldinfo) {
  37. extract($fieldinfo);
  38. $setting = string2array($setting);
  39. $size = $setting['size'];
  40. if(!$value) $value = $defaultvalue;
  41. $type = $ispassword ? 'password' : 'text';
  42. $errortips = $this->fields[$field]['errortips'];
  43. $regexp = $pattern ? '.regexValidator({regexp:"'.substr($pattern,1,-1).'",onerror:"'.$errortips.'"})' : '';
  44. if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:'.$minlength.',max:'.$maxlength.',onerror:"'.$errortips.'"})'.$regexp.';';
  45. return '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" '.$this->no_allowed.' class="input-text" '.$formattribute.' '.$css.'>';
  46. }
  47. function textarea($field, $value, $fieldinfo) {
  48. extract($fieldinfo);
  49. $setting = string2array($setting);
  50. extract($setting);
  51. if(!$value) $value = $defaultvalue;
  52. $allow_empty = 'empty:true,';
  53. if($minlength || $pattern) $allow_empty = '';
  54. if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({'.$allow_empty.'onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  55. $value = empty($value) ? $setting['defaultvalue'] : $value;
  56. return "<textarea name='info[{$field}]' id='$field' style='width:{$width}%;height:{$height}px;' $formattribute $css $this->no_allowed>{$value}</textarea>";
  57. }
  58. function editor($field, $value, $fieldinfo) {
  59. //是否允许用户上传附件 ,后台管理员开启此功能
  60. extract($fieldinfo);
  61. extract(string2array($setting));
  62. $allowupload = defined('IN_ADMIN') ? 1 : 0;
  63. if(!$value) $value = $defaultvalue;
  64. if($minlength || $pattern) $allow_empty = '';
  65. if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({'.$allow_empty.'onshow:"",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  66. return "<div id='{$field}_tip'></div>".'<textarea name="info['.$field.']" id="'.$field.'" boxid="'.$field.'">'.$value.'</textarea>'.form::editor($field,$toolbar,'member','','',$allowupload,1,'',300);
  67. }
  68. function box($field, $value, $fieldinfo) {
  69. $setting = string2array($fieldinfo['setting']);
  70. if($value=='') $value = $this->fields[$field]['defaultvalue'];
  71. $options = explode("\n",$this->fields[$field]['options']);
  72. foreach($options as $_k) {
  73. $v = explode("|",$_k);
  74. $k = trim($v[1]);
  75. $option[$k] = $v[0];
  76. }
  77. $values = explode(',',$value);
  78. $value = array();
  79. foreach($values as $_k) {
  80. if($_k != '') $value[] = $_k;
  81. }
  82. $value = implode(',',$value);
  83. switch($this->fields[$field]['boxtype']) {
  84. case 'radio':
  85. $string = form::radio($option,$value,"name='info[$field]'",$setting['width'],$field);
  86. break;
  87. case 'checkbox':
  88. $string = form::checkbox($option,$value,"name='info[$field][]'",1,$setting['width'],$field);
  89. break;
  90. case 'select':
  91. $string = form::select($option,$value,"name='info[$field]' id='$field'");
  92. break;
  93. case 'multiple':
  94. $string = form::select($option,$value,"name='info[$field][]' id='$field' size=2 multiple='multiple' style='height:60px;'");
  95. break;
  96. }
  97. return $string;
  98. } function image($field, $value, $fieldinfo) {
  99. $setting = string2array($fieldinfo['setting']);
  100. extract($setting);
  101. if(!defined('IMAGES_INIT')) {
  102. $str = '<script type="text/javascript" src="'.JS_PATH.'swfupload/swf2ckeditor.js"></script><script language="javascript" type="text/javascript" src="'.JS_PATH.'content_addtop.js"></script>';
  103. define('IMAGES_INIT', 1);
  104. }
  105. $authkey = upload_key("1,$upload_allowext,$isselectimage,$images_width,$images_height");
  106. if($show_type) {
  107. $preview_img = $value ? $value : IMG_PATH.'icon/upload-pic.png';
  108. return $str."<div class='upload-pic img-wrap'><input type='hidden' name='info[$field]' id='$field' value='$value'>
  109. <a href='javascript:;' onclick=\"javascript:flashupload('{$field}_images', '".L('attachment_upload')."','{$field}',thumb_images,'1,$upload_allowext,$isselectimage,$images_width,$images_height','member','','{$authkey}')\">
  110. <img src='$preview_img' id='{$field}_preview' width='135' height='113' style='cursor:hand' /></a></div>";
  111. } else {
  112. return $str."<input type='text' name='info[$field]' id='$field' value='$value' size='$size' $this->no_allowed class='input-text' /> <input type='button' class='button' $this->no_allowed onclick=\"javascript:flashupload('{$field}_images', '".L('attachment_upload')."','{$field}',submit_images,'1,{$upload_allowext},$isselectimage,$images_width,$images_height','member','','{$authkey}')\"/ value='".L('image_upload')."'>";
  113. }
  114. }
  115. function images($field, $value, $fieldinfo) {
  116. extract($fieldinfo);
  117. $list_str = '';
  118. if($value) {
  119. $value = string2array(new_html_entity_decode($value));
  120. if(is_array($value)) {
  121. foreach($value as $_k=>$_v) {
  122. $list_str .= "<li id='image{$_k}' style='padding:1px'><input type='text' name='{$field}_url[]' value='{$_v[url]}' style='width:310px;' ondblclick='image_priview(this.value);' class='input-text'> <input type='text' name='{$field}_alt[]' value='{$_v[alt]}' style='width:160px;' class='input-text'> <a href=\"javascript:remove_div('image{$_k}')\">".L('remove')."</a></li>";
  123. }
  124. }
  125. } else {
  126. //$list_str .= "<input type='hidden' name='{$field}_url[]' value='0'>";
  127. $list_str .= "<center><div class='onShow' id='nameTip'>".L('max_upload_num')." <font color='red'>{$upload_number}</font> ".L('zhang')."</div></center>";
  128. }
  129. $string = '<input name="info['.$field.']" type="hidden" value="1">
  130. <fieldset class="blue pad-10">
  131. <legend>'.L('picutre_list').'</legend>';
  132. $string .= $list_str;
  133. $string .= '<ul id="'.$field.'" class="picList"></ul>
  134. </fieldset>
  135. <div class="bk10"></div>
  136. ';
  137. if(!defined('IMAGES_INIT')) {
  138. $str = '<script type="text/javascript" src="'.JS_PATH.'swfupload/swf2ckeditor.js"></script><script language="javascript" type="text/javascript" src="'.JS_PATH.'content_addtop.js"></script>';
  139. define('IMAGES_INIT', 1);
  140. } else {
  141. $str = '';
  142. }
  143. $authkey = upload_key("$upload_number,$upload_allowext,$isselectimage");
  144. $string .= $str."<div class='picBut cu'><a herf='javascript:void(0);' onclick=\"javascript:flashupload('{$field}_images', '".L('attachment_upload')."','{$field}',change_images,'{$upload_number},{$upload_allowext},{$isselectimage}','formguide','','{$authkey}')\"/> ".L('select_picture')." </a></div>";
  145. return $string;
  146. } function number($field, $value, $fieldinfo) {
  147. extract($fieldinfo);
  148. if(!$value) $value = $defaultvalue;
  149. $errortips = $this->fields[$field]['errortips'];
  150. if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:'.$minnumber.',max:'.$maxnumber.',onerror:"'.$errortips.'"}).regexValidator({regexp:"num",datatype:"enum",onerror:"'.$errortips.'"});';
  151. return "<input type='text' name='info[$field]' id='$field' value='$value' size='$size' $this->no_allowed class='input-text' {$formattribute} {$css}>";
  152. }
  153. function datetime($field, $value, $fieldinfo) {
  154. extract(string2array($fieldinfo['setting']));
  155. $isdatetime = 0;
  156. if($fieldtype=='int') {
  157. if(!$value) $value = SYS_TIME;
  158. $format_txt = $format == 'm-d' ? 'm-d' : $format;
  159. $value = date($format_txt,$value);
  160. $isdatetime = strlen($format) > 6 ? 1 : 0;
  161. } elseif($fieldtype=='datetime') {
  162. $isdatetime = 1;
  163. }
  164. return form::date("info[$field]",$value,$isdatetime,1);
  165. }
  166. function linkage($field, $value, $fieldinfo) {
  167. $setting = string2array($fieldinfo['setting']);
  168. $linkageid = $setting['linkageid'];
  169. return menu_linkage($linkageid,$field,$value);
  170. }
  171. }
  172. ?>