国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
4.4KB

  1. <?php
  2. /**
  3. * 编辑自定义表单字段
  4. *
  5. * @version $Id: diy_field_edit.php 1 18:31 2010年7月12日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2007 - 2019, DesDev, Inc.
  8. * @license http://help.dedecms.com/usersguide/license.html
  9. * @link http://www.dedecms.com
  10. */
  11. require_once(dirname(__FILE__)."/config.php");
  12. //增加权限检查
  13. require_once(DEDEINC."/dedetag.class.php");
  14. require_once(DEDEADMIN."/inc/inc_admin_channel.php");
  15. if(empty($action)) $action = '';
  16. //获取模型信息
  17. $mysql_version = $dsql->GetVersion();
  18. $mysql_versions = explode(".",trim($mysql_version));
  19. $mysql_version = $mysql_versions[0].".".$mysql_versions[1];
  20. $row = $dsql->GetOne("SELECT `table`,`info` FROM #@__diyforms WHERE diyid='$diyid'");
  21. $fieldset = $row['info'];
  22. $trueTable = $row['table'];
  23. $dtp = new DedeTagParse();
  24. $dtp->SetNameSpace("field","<",">");
  25. $dtp->LoadSource($fieldset);
  26. foreach($dtp->CTags as $ctag)
  27. {
  28. if(strtolower($ctag->GetName())==strtolower($fname)) break;
  29. }
  30. //字段类型信息
  31. $ds = file(DEDEADMIN."/inc/fieldtype.txt");
  32. foreach($ds as $d)
  33. {
  34. $dds = explode(',',trim($d));
  35. $fieldtypes[$dds[0]] = $dds[1];
  36. }
  37. //保存更改
  38. /*--------------------
  39. function _SAVE()
  40. ----------------------*/
  41. if($action=='save')
  42. {
  43. if(!isset($fieldtypes[$dtype]))
  44. {
  45. ShowMsg("你修改的是系统专用类型的数据,禁止操作!","-1");
  46. exit();
  47. }
  48. //检测数据库是否存在附加表,不存在则新建一个
  49. $tabsql = "CREATE TABLE IF NOT EXISTS `$trueTable`(
  50. `id` int(10) unsigned NOT NULL auto_increment,
  51. `ifcheck` tinyint(1) NOT NULL default '0',
  52. ";
  53. if($mysql_version < 4.1)
  54. {
  55. $tabsql .= " PRIMARY KEY (`id`)\r\n) TYPE=MyISAM; ";
  56. }
  57. else
  58. {
  59. $tabsql .= " PRIMARY KEY (`id`)\r\n) ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language."; ";
  60. }
  61. $dsql->ExecuteNoneQuery($tabsql);
  62. //检测表里含有的字段
  63. $fields = array();
  64. $rs = $dsql->SetQuery("show fields from `$trueTable`");
  65. $dsql->Execute('a');
  66. while($nrow = $dsql->GetArray('a',MYSQL_ASSOC))
  67. {
  68. $fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
  69. }
  70. //修改字段配置信息
  71. $dfvalue = $vdefault;
  72. $isnull = ($isnull==1 ? "true" : "false");
  73. $mxlen = $maxlength;
  74. $fieldname = strtolower($fname);
  75. //检测被修改的字段类型,并更新数据表
  76. $fieldinfos = GetFieldMake($dtype,$fieldname,$dfvalue,$mxlen);
  77. $ntabsql = $fieldinfos[0];
  78. $buideType = $fieldinfos[1];
  79. $tabsql = '';
  80. //检测旧数据类型,并替换为新配置
  81. foreach($dtp->CTags as $tagid=>$ctag)
  82. {
  83. if(trim($fieldname)==trim(strtolower($ctag->GetName())))
  84. {
  85. if(isset($fields[$fieldname]) && $fields[$fieldname]!=$buideType)
  86. {
  87. $tabsql = "ALTER TABLE `$trueTable` CHANGE `$fieldname` ".$ntabsql;
  88. $dsql->ExecuteNoneQuery($tabsql);
  89. }
  90. else if(!isset($fields[$fieldname]))
  91. {
  92. $tabsql = "ALTER TABLE `$trueTable` ADD ".$ntabsql;
  93. $dsql->ExecuteNoneQuery($tabsql);
  94. }
  95. else
  96. {
  97. $tabsql = '';
  98. }
  99. $dtp->Assign($tagid,stripslashes($fieldstring), FALSE);
  100. break;
  101. }
  102. }
  103. $oksetting = $dtp->GetResultNP();
  104. $oksetting = addslashes($oksetting);
  105. $dsql->ExecuteNoneQuery("UPDATE #@__diyforms SET info='$oksetting' WHERE diyid='$diyid' ");
  106. ShowMsg("成功更改一个字段的配置!","diy_edit.php?diyid={$diyid}");
  107. exit();
  108. }
  109. /*------------------
  110. 删除字段
  111. function _DELETE()
  112. -------------------*/
  113. else if($action=="delete")
  114. {
  115. //检测旧数据类型,并替换为新配置
  116. foreach($dtp->CTags as $tagid=>$ctag)
  117. {
  118. if(strtolower($ctag->GetName())==strtolower($fname))
  119. {
  120. $dtp->Assign($tagid,"#@Delete@#");
  121. }
  122. }
  123. $oksetting = addslashes($dtp->GetResultNP());
  124. $dsql->ExecuteNoneQuery("UPDATE #@__diyforms SET info='$oksetting' WHERE diyid='$diyid' ");
  125. $dsql->ExecuteNoneQuery("ALTER TABLE `$trueTable` DROP `$fname` ");
  126. ShowMsg("成功删除一个字段!","diy_edit.php?diyid=$diyid");
  127. exit();
  128. }
  129. require_once(DEDEADMIN."/templets/diy_field_edit.htm");