member_form.class.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <?php
  2. class member_form {
  3. var $modelid;
  4. var $fields;
  5. var $id;
  6. var $formValidator;
  7. function __construct($modelid) {
  8. $this->modelid = $modelid;
  9. $this->fields = getcache('model_field_'.$modelid,'model');
  10. }
  11. function get($data = array()) {
  12. $_roleid = param::get_cookie('_roleid');
  13. $_groupid = param::get_cookie('_groupid');
  14. $this->data = $data;
  15. if(isset($data['id'])) $this->id = $data['id'];
  16. $info = array();
  17. foreach($this->fields as $field=>$v) {
  18. if(defined('IN_ADMIN')) {
  19. if($v['disabled'] || $v['iscore'] || check_in($_roleid, $v['unsetroleids']) || check_in($_groupid, $v['unsetgroupids'])) continue;
  20. } else {
  21. if($v['disabled'] || $v['iscore'] || !$v['isadd'] || check_in($_roleid, $v['unsetroleids']) || check_in($_groupid, $v['unsetgroupids'])) continue;
  22. }
  23. $func = $v['formtype'];
  24. $value = isset($data[$field]) ? new_html_special_chars($data[$field]) : '';
  25. if($func=='pages' && isset($data['maxcharperpage'])) {
  26. $value = $data['paginationtype'].'|'.$data['maxcharperpage'];
  27. }
  28. if(!method_exists($this, $func)) continue;
  29. $form = $this->$func($field, $value, $v);
  30. if($form !== false) {
  31. $star = $v['minlength'] || $v['pattern'] ? 1 : 0;
  32. $info[$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'=>$star, 'isbase'=>$v['isbase'],'isomnipotent'=>$v['isomnipotent'],'formtype'=>$v['formtype']);
  33. }
  34. }
  35. return $info;
  36. }
  37. function text($field, $value, $fieldinfo) {
  38. extract($fieldinfo);
  39. $setting = string2array($setting);
  40. $size = $setting['size'];
  41. if(!$value) $value = $defaultvalue;
  42. $type = $ispassword ? 'password' : 'text';
  43. $errortips = $this->fields[$field]['errortips'];
  44. $regexp = $pattern ? '.regexValidator({regexp:"'.substr($pattern,1,-1).'",onerror:"'.$errortips.'"})' : '';
  45. if($errortips && $this->fields[$field]['isbase']) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:'.$minlength.',max:'.$maxlength.',onerror:"'.$errortips.'"})'.$regexp.';';
  46. return '<input type="text" name="info['.$field.']" id="'.$field.'" size="'.$size.'" value="'.$value.'" class="input-text" '.$formattribute.' '.$css.'>';
  47. }
  48. function textarea($field, $value, $fieldinfo) {
  49. extract($fieldinfo);
  50. $setting = string2array($setting);
  51. extract($setting);
  52. if(!$value) $value = $defaultvalue;
  53. $allow_empty = 'empty:true,';
  54. if($minlength || $pattern) $allow_empty = '';
  55. if($errortips && $this->fields[$field]['isbase']) $this->formValidator .= '$("#'.$field.'").formValidator({'.$allow_empty.'onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  56. $value = empty($value) ? $setting['defaultvalue'] : $value;
  57. return "<textarea name='info[{$field}]' id='$field' style='width:{$width}%;height:{$height}px;' $formattribute $css>{$value}</textarea>";
  58. }
  59. function editor($field, $value, $fieldinfo) {
  60. //是否允许用户上传附件 ,后台管理员开启此功能
  61. extract($fieldinfo);
  62. extract(string2array($setting));
  63. $allowupload = defined('IN_ADMIN') || $allowupload ? 1 : 0;
  64. if(!$value) $value = $defaultvalue;
  65. if($minlength || $pattern) $allow_empty = '';
  66. if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({'.$allow_empty.'onshow:"",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  67. return "<div id='{$field}_tip'></div>".'<textarea name="info['.$field.']" id="'.$field.'" boxid="'.$field.'">'.$value.'</textarea>'.form::editor($field,$toolbar,'member','','',$allowupload,1,'',300);
  68. }
  69. function box($field, $value, $fieldinfo) {
  70. $setting = string2array($fieldinfo['setting']);
  71. if($value=='') $value = $this->fields[$field]['defaultvalue'];
  72. $options = explode("\n",$this->fields[$field]['options']);
  73. foreach($options as $_k) {
  74. $v = explode("|",$_k);
  75. $k = trim($v[1]);
  76. $option[$k] = $v[0];
  77. }
  78. $values = explode(',',$value);
  79. $value = array();
  80. foreach($values as $_k) {
  81. if($_k != '') $value[] = $_k;
  82. }
  83. $value = implode(',',$value);
  84. switch($this->fields[$field]['boxtype']) {
  85. case 'radio':
  86. $string = form::radio($option,$value,"name='info[$field]'",$setting['width'],$field);
  87. break;
  88. case 'checkbox':
  89. $string = form::checkbox($option,$value,"name='info[$field][]'",1,$setting['width'],$field);
  90. break;
  91. case 'select':
  92. $string = form::select($option,$value,"name='info[$field]' id='$field'");
  93. break;
  94. case 'multiple':
  95. $string = form::select($option,$value,"name='info[$field][]' id='$field' size=2 multiple='multiple' style='height:60px;'");
  96. break;
  97. }
  98. return $string;
  99. }
  100. function image($field, $value, $fieldinfo) {
  101. $setting = string2array($fieldinfo['setting']);
  102. extract($setting);
  103. if(!defined('IMAGES_INIT')) {
  104. $str = '<script type="text/javascript" src="statics/js/swfupload/swf2ckeditor.js"></script>';
  105. define('IMAGES_INIT', 1);
  106. }
  107. $authkey = upload_key("1,$upload_allowext,$isselectimage,$images_width,$images_height");
  108. if($show_type) {
  109. $preview_img = $value ? $value : IMG_PATH.'icon/upload-pic.png';
  110. return $str."<div class='upload-pic img-wrap'><input type='hidden' name='info[$field]' id='$field' value='$value'>
  111. <a href='javascript:;' onclick=\"javascript:flashupload('{$field}_images', '".L('attachment_upload')."','{$field}',thumb_images,'1,$upload_allowext,$isselectimage,$images_width,$images_height','member','','{$authkey}')\">
  112. <img src='$preview_img' id='{$field}_preview' width='135' height='113' style='cursor:hand' /></a></div>";
  113. } else {
  114. return $str."<input type='text' name='info[$field]' id='$field' value='$value' size='$size' class='input-text' /> <input type='button' class='button' 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')."'>";
  115. }
  116. }
  117. function images($field, $value, $fieldinfo) {
  118. extract($fieldinfo);
  119. $list_str = '';
  120. if($value) {
  121. $value = string2array(new_html_entity_decode($value));
  122. if(is_array($value)) {
  123. foreach($value as $_k=>$_v) {
  124. $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>";
  125. }
  126. }
  127. } else {
  128. //$list_str .= "<input type='hidden' name='{$field}_url[]' value='0'>";
  129. $list_str .= "<center><div class='onShow' id='nameTip'>".L('max_upload_num')." <font color='red'>{$upload_number}</font> ".L('zhang')."</div></center>";
  130. }
  131. $string = '<input name="info['.$field.']" type="hidden" value="1">
  132. <fieldset class="blue pad-10">
  133. <legend>'.L('picutre_list').'</legend>';
  134. $string .= $list_str;
  135. $string .= '<ul id="'.$field.'" class="picList"></ul>
  136. </fieldset>
  137. <div class="bk10"></div>
  138. ';
  139. if(!defined('IMAGES_INIT')) {
  140. $str = '<script type="text/javascript" src="statics/js/swfupload/swf2ckeditor.js"></script>';
  141. define('IMAGES_INIT', 1);
  142. } else {
  143. $str = '';
  144. }
  145. $authkey = upload_key("$upload_number,$upload_allowext,$isselectimage");
  146. $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}','member','','{$authkey}')\"/> ".L('select_picture')." </a></div>";
  147. return $string;
  148. }
  149. function number($field, $value, $fieldinfo) {
  150. extract($fieldinfo);
  151. if(!$value) $value = $defaultvalue;
  152. $errortips = $this->fields[$field]['errortips'];
  153. $min = $minnumber ? ",min:$minnumber" : '';
  154. $max = $maxnumber ? ",max:$maxnumber" : '';
  155. if($errortips && $this->fields[$field]['isbase']) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({type:"number"'.$min.$max.',onerror:"'.$errortips.'"}).regexValidator({regexp:"num",datatype:"enum",onerror:"'.$errortips.'"});';
  156. return "<input type='text' name='info[$field]' id='$field' value='$value' size='$size' class='input-text' {$formattribute} {$css}>";
  157. }
  158. function datetime($field, $value, $fieldinfo) {
  159. extract(string2array($fieldinfo['setting']));
  160. $isdatetime = 0;
  161. $timesystem = 0;
  162. if($fieldtype=='int') {
  163. if(!$value) $value = SYS_TIME;
  164. $format_txt = $format == 'm-d' ? 'm-d' : $format;
  165. if($format == 'Y-m-d Ah:i:s') $format_txt = 'Y-m-d h:i:s';
  166. $value = date($format_txt,$value);
  167. $isdatetime = strlen($format) > 6 ? 1 : 0;
  168. if($format == 'Y-m-d Ah:i:s') {
  169. $timesystem = 0;
  170. } else {
  171. $timesystem = 1;
  172. }
  173. } elseif($fieldtype=='datetime') {
  174. $isdatetime = 1;
  175. $timesystem = 1;
  176. } elseif($fieldtype=='datetime_a') {
  177. $isdatetime = 1;
  178. $timesystem = 0;
  179. }
  180. return form::date("info[$field]",$value,$isdatetime,1,'true',$timesystem);
  181. }
  182. function linkage($field, $value, $fieldinfo) {
  183. $setting = string2array($fieldinfo['setting']);
  184. $linkageid = $setting['linkageid'];
  185. return menu_linkage($linkageid,$field,$value);
  186. }
  187. function omnipotent($field, $value, $fieldinfo) {
  188. extract($fieldinfo);
  189. $formtext = str_replace('{FIELD_VALUE}',$value,$formtext);
  190. $formtext = str_replace('{MODELID}',$this->modelid,$formtext);
  191. $id = $this->id ? $this->id : 0;
  192. $formtext = str_replace('{ID}',$id,$formtext);
  193. $errortips = $this->fields[$field]['errortips'];
  194. if($errortips && $this->fields[$field]['isbase']) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  195. return $formtext;
  196. }
  197. function checkmobile($field, $value, $fieldinfo) {
  198. $errortips = L('please_input_mobile');
  199. if(defined('IN_ADMIN')) {
  200. $string = "<div id='mobile_div'><input type='text' name='info[mobile]' id='mobile' value='".$value."' size='36' class='input-text'></div>";
  201. $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  202. } elseif($value && ROUTE_A!='register') {
  203. $string = "<div id='mobile_div'>".$value."</div>";
  204. } else {
  205. $string = "<div id='mobile_div'><input type='text' name='info[mobile]' id='mobile' value='' size='36' class='input-text' title='".L('sms_tips')."'>
  206. <div class='submit'><button onclick='get_verify()' type='button' class='hqyz'>".L('get_sms_code')."</button></div> <div id='mobileTip' class='onShow'></div>
  207. <br>
  208. </div><div id='mobile_send_div' style='display:none'>".L('sms_checkcode_send_to')."<span id='mobile_send'></span>,<span id='edit_mobile' style='display:none'><a href='javascript:void();' onclick='edit_mobile()'>".L('sms_edit_mobile')."</a>,</span> ".L('repeat_send')."<br><br>
  209. <div class='submit'><button type='button' id='GetVerify' onclick='get_verify()' class='hqyz'>".L('repeat_sms_code')."</button></div> <BR><BR></div>".L('receive_sms_code')."<input type='text' name='mobile_verify' id='mobile_verify' value='' size='14' class='input-text'>";
  210. $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
  211. $errortips = L('input_receive_sms_code');
  212. $this->formValidator .= '$("#mobile_verify").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"}).ajaxValidator({
  213. type : "get",
  214. url : "api.php",
  215. data :"op=sms_idcheck&action=id_code",
  216. datatype : "html",
  217. getdata:{mobile:"mobile"},
  218. async:"false",
  219. success : function(data){
  220. if( data == "1" ) {
  221. return true;
  222. } else {
  223. return false;
  224. }
  225. },
  226. buttons: $("#dosubmit"),
  227. onerror : "'.L('checkcode_wrong').'",
  228. onwait : "'.L('connecting_please_wait').'"
  229. });';
  230. }
  231. $string .= '
  232. <SCRIPT LANGUAGE="JavaScript">
  233. <!--
  234. var times = 90;
  235. var isinerval;
  236. function get_verify() {
  237. var mobile = $("#mobile").val();
  238. var partten = /^1[3-9]\d{9}$/;
  239. if(!partten.test(mobile)){
  240. alert("'.L('input_right_mobile').'");
  241. return false;
  242. }
  243. $.get("api.php?op=sms",{ mobile: mobile,random:Math.random()}, function(data){
  244. if(data=="0") {
  245. $("#mobile_send").html(mobile);
  246. $("#mobile_div").css("display","none");
  247. $("#mobile_send_div").css("display","");
  248. times = 90;
  249. $("#GetVerify").attr("disabled", true);
  250. isinerval = setInterval("CountDown()", 1000);
  251. } else if(data=="-1") {
  252. alert("'.L('sms_have_reached_the_limit').'");
  253. } else {
  254. alert("'.L('sms_send_fail').'");
  255. }
  256. });
  257. }
  258. function CountDown() {
  259. if (times < 1) {
  260. $("#GetVerify").html("'.L('get_sms_code').'").attr("disabled", false);
  261. $("#edit_mobile").css("display","");
  262. clearInterval(isinerval);
  263. return;
  264. }
  265. $("#GetVerify").html(times+"'.L('wait_second_repeat_sms_code').'");
  266. times--;
  267. }
  268. function edit_mobile() {
  269. $("#mobile_div").css("display","");
  270. $("#mobile_send_div").css("display","none");
  271. }
  272. //-->
  273. </SCRIPT>
  274. ';
  275. return $string;
  276. }
  277. }
  278. ?>