FieldAction.class.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?php
  2. /**
  3. *
  4. * Module(模型管理)
  5. *
  6. */
  7. if(!defined("Ainaphp")) exit("Access Denied");
  8. class FieldAction extends AdminbaseAction {
  9. protected $dao,$moduleid;
  10. function _initialize()
  11. {
  12. parent::_initialize();
  13. $this->moduleid = $moduleid=intval($_REQUEST ['moduleid']);
  14. $this->assign('moduleid', $moduleid);
  15. $this->dao=D('Admin/field');
  16. $field_pattern = array(
  17. '0'=> L(please_chose),
  18. 'email' => L(pattern_email),
  19. 'url' => L(pattern_url),
  20. 'date' => L(pattern_date),
  21. 'number'=> L(pattern_number),
  22. 'digits'=> L(pattern_digits),
  23. 'creditcard'=> L(pattern_creditcard),
  24. 'equalTo'=> L(pattern_equalTo),
  25. 'ip4'=> L(pattern_ip4),
  26. 'mobile'=> L(pattern_mobile),
  27. 'zipcode'=> L(pattern_zipcode),
  28. 'qq'=> L(pattern_qq),
  29. 'idcard'=> L(pattern_idcard),
  30. 'chinese'=> L(pattern_chinese),
  31. 'cn_username'=> L(pattern_cn_username),
  32. 'tel'=> L(pattern_tel),
  33. 'english'=> L(pattern_english),
  34. 'en_num'=> L(pattern_en_num),
  35. );
  36. $this->assign('field_pattern', $field_pattern);
  37. $this->assign ( 'options', array(1=>L('yes'),0=>L('no')));
  38. $role =F('Role');
  39. foreach((array)$role as $key=>$c){
  40. $usergroup[$key]=$c['name'];
  41. }
  42. $this->assign ( 'usergroup', $usergroup);
  43. }
  44. public function index(){
  45. $this->assign('sysfield',array('catid','userid','username','title','thumb','keywords','description','posid','status','createtime','url'));
  46. $this->assign('nodostatus',array('catid','title','status','createtime'));
  47. $list = $this->dao->where("moduleid=".$this->moduleid)->order('listorder ASC')->select();
  48. $this->assign('list', $list);
  49. $this->display();
  50. }
  51. public function _before_add(){
  52. if(empty($this->moduleid))$this->error(L('do_empty'));
  53. if($_GET['isajax']){
  54. $this->assign($_GET);
  55. $this->assign($_POST);
  56. $this->display('type');
  57. exit;
  58. }
  59. }
  60. function delete() {
  61. $id=intval($_GET['id']);
  62. $r = $this->dao->find($id);
  63. if(empty($r)) $this->error (L('do_empty'));
  64. $this->dao->delete($id);
  65. $moduleid = $r['moduleid'];
  66. $field = $r['field'];
  67. $tablename=C('DB_PREFIX').$this->module[$moduleid]['name'];;
  68. $this->dao->execute("ALTER TABLE `$tablename` DROP `$field`");
  69. savecache(MODULE_NAME,$moduleid);
  70. $this->success (L('delete_ok'));
  71. }
  72. public function status(){
  73. $id =intval($_GET['id']);
  74. if($this->dao->save($_GET)){
  75. $r = $this->dao->find($id);
  76. savecache(MODULE_NAME,$r['moduleid']);
  77. $this->success(L('do_ok'));
  78. }else{
  79. $this->error(L('do_error'));
  80. }
  81. }
  82. function insert() {
  83. if($_GET['isajax']){//检测字段是否已经存在
  84. $name=$_GET['field'];
  85. $moduleid=intval($_GET['moduleid']);
  86. $tablename=C('DB_PREFIX').$this->module[$moduleid]['name'];
  87. $db=D('');
  88. $db = DB::getInstance();
  89. $tables = $db->getTables();
  90. $Fields=$db->getFields($tablename);
  91. foreach ( $Fields as $key =>$r){
  92. if($key==$name) $ishave=1;
  93. }
  94. if($ishave) { echo 'false';}else{echo 'true';}
  95. exit;
  96. }
  97. $addfieldsql =$this->get_tablesql($_POST,'add');
  98. if($_POST['setup']) $_POST['setup']=array2string($_POST['setup']);
  99. $_POST['unpostgroup'] = $_POST['unpostgroup'] ? implode(',',$_POST['unpostgroup']) : '';
  100. $_POST['status'] =1;
  101. $name = MODULE_NAME;
  102. $model = D ($name);
  103. if (false === $model->create ()) {
  104. $this->error ( $model->getError () );
  105. }
  106. if ($model->add() !==false) {
  107. savecache(MODULE_NAME,$_POST['moduleid']);
  108. if(is_array($addfieldsql)){
  109. foreach($addfieldsql as $sql){
  110. $model->execute($sql);
  111. }
  112. }else{
  113. if($addfieldsql)$model->execute($addfieldsql);
  114. }
  115. $this->assign ( 'jumpUrl', U(MODULE_NAME.'/index',array('moduleid' => $this->moduleid))) ;
  116. $this->success (L('add_ok'));
  117. } else {
  118. $this->error (L('add_error').': '.$model->getDbError());
  119. }
  120. }
  121. function update() {
  122. $editfieldsql =$this->get_tablesql($_POST,'edit');
  123. if($_POST['setup']) $_POST['setup']=array2string($_POST['setup']);
  124. $_POST['unpostgroup'] = $_POST['unpostgroup'] ? implode(',',$_POST['unpostgroup']) : '';
  125. $name = MODULE_NAME;
  126. $model = D ( $name );
  127. if (false === $model->create ()) {
  128. $this->error ( $model->getError () );
  129. }
  130. if (false !== $model->save ()) {
  131. savecache(MODULE_NAME,$_POST['moduleid']);
  132. if(is_array($editfieldsql)){
  133. foreach($editfieldsql as $sql){
  134. $model->execute($sql);
  135. }
  136. }else{
  137. $r=$model->execute($editfieldsql);
  138. }
  139. $this->success (L('edit_ok'));
  140. } else {
  141. $this->success (L('edit_error').': '.$model->getDbError());
  142. }
  143. }
  144. public function _before_edit(){
  145. if(empty($this->moduleid))$this->error(L('do_empty'));
  146. }
  147. public function get_tablesql($info,$do){
  148. $fieldtype = $info['type'];
  149. if($info['setup']['fieldtype']){
  150. $fieldtype=$info['setup']['fieldtype'];
  151. }
  152. $moduleid = $info['moduleid'];
  153. $default=$info['setup']['default'];
  154. $field = $info['field'];
  155. $tablename=C('DB_PREFIX').strtolower($this->module[$moduleid]['name']);
  156. $maxlength = intval($info['maxlength']);
  157. $minlength = intval($info['minlength']);
  158. $numbertype = $info['setup']['numbertype'];
  159. $oldfield = $info['oldfield'];
  160. if($do=='add'){ $do = ' ADD ';}else{$do = " CHANGE `$oldfield` ";}
  161. switch($fieldtype) {
  162. case 'varchar':
  163. if(!$maxlength) $maxlength = 255;
  164. $maxlength = min($maxlength, 255);
  165. $sql = "ALTER TABLE `$tablename` $do `$field` VARCHAR( $maxlength ) NOT NULL DEFAULT '$default'";
  166. break;
  167. case 'title':
  168. if(!$maxlength) $maxlength = 255;
  169. $maxlength = min($maxlength, 255);
  170. $sql[] = "ALTER TABLE `$tablename` $do `title` VARCHAR( $maxlength ) NOT NULL DEFAULT '$default'";
  171. $sql[] = "ALTER TABLE `$tablename` $do `title_style` VARCHAR( 40 ) NOT NULL DEFAULT ''";
  172. $sql[] = "ALTER TABLE `$tablename` $do `thumb` VARCHAR( 100 ) NOT NULL DEFAULT ''";
  173. break;
  174. case 'catid':
  175. $sql = "ALTER TABLE `$tablename` $do `$field` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0'";
  176. break;
  177. case 'number':
  178. $decimaldigits = $info['setup']['decimaldigits'];
  179. $default = $decimaldigits == 0 ? intval($default) : floatval($default);
  180. $sql = "ALTER TABLE `$tablename` $do `$field` ".($decimaldigits == 0 ? 'INT' : 'decimal( 10,'.$decimaldigits.' )')." ".($numbertype ==1 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default'";
  181. break;
  182. case 'tinyint':
  183. if(!$maxlength) $maxlength = 3;
  184. $maxlength = min($maxlength,3);
  185. $default = intval($default);
  186. $sql = "ALTER TABLE `$tablename` $do `$field` TINYINT( $maxlength ) ".($numbertype ==1 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default'";
  187. break;
  188. case 'smallint':
  189. $default = intval($default);
  190. if(!$maxlength) $maxlength = 8;
  191. $maxlength = min($maxlength,8);
  192. $sql = "ALTER TABLE `$tablename` $do `$field` SMALLINT( $maxlength ) ".($numbertype ==1 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default'";
  193. break;
  194. case 'int':
  195. $default = intval($default);
  196. $sql = "ALTER TABLE `$tablename` $do `$field` INT ".($numbertype ==1 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default'";
  197. break;
  198. case 'mediumint':
  199. $default = intval($default);
  200. $sql = "ALTER TABLE `$tablename` $do `$field` INT ".($numbertype ==1 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default'";
  201. break;
  202. case 'mediumtext':
  203. $sql = "ALTER TABLE `$tablename` $do `$field` MEDIUMTEXT NOT NULL";
  204. break;
  205. case 'text':
  206. $sql = "ALTER TABLE `$tablename` $do `$field` TEXT NOT NULL";
  207. break;
  208. case 'posid':
  209. $sql = "ALTER TABLE `$tablename` $do `$field` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0'";
  210. break;
  211. //case 'typeid':
  212. //$sql = "ALTER TABLE `$tablename` $do `$field` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0'";
  213. //break;
  214. case 'datetime':
  215. $sql = "ALTER TABLE `$tablename` $do `$field` INT(11) UNSIGNED NOT NULL DEFAULT '0'";
  216. break;
  217. case 'editor':
  218. $sql = "ALTER TABLE `$tablename` $do `$field` TEXT NOT NULL";
  219. break;
  220. case 'image':
  221. $sql = "ALTER TABLE `$tablename` $do `$field` VARCHAR( 80 ) NOT NULL DEFAULT ''";
  222. break;
  223. case 'images':
  224. $sql = "ALTER TABLE `$tablename` $do `$field` MEDIUMTEXT NOT NULL";
  225. break;
  226. case 'file':
  227. $sql = "ALTER TABLE `$tablename` $do `$field` VARCHAR( 80 ) NOT NULL DEFAULT ''";
  228. break;
  229. case 'files':
  230. $sql = "ALTER TABLE `$tablename` $do `$field` MEDIUMTEXT NOT NULL";
  231. break;
  232. }
  233. return $sql;
  234. }
  235. }
  236. ?>