Diyform.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace app\admin\model\cms;
  3. use think\Config;
  4. use think\Db;
  5. use think\Exception;
  6. use think\Model;
  7. class Diyform extends Model
  8. {
  9. // 表名
  10. protected $name = 'cms_diyform';
  11. // 自动写入时间戳字段
  12. protected $autoWriteTimestamp = 'int';
  13. // 定义时间戳字段名
  14. protected $createTime = 'createtime';
  15. protected $updateTime = 'updatetime';
  16. // 追加属性
  17. protected $append = [
  18. 'url'
  19. ];
  20. protected static $config = [];
  21. public static function init()
  22. {
  23. self::$config = $config = get_addon_config('cms');
  24. self::beforeInsert(function ($row) {
  25. if (!isset($row['admin_id']) || !$row['admin_id']) {
  26. $admin_id = session('admin.id');
  27. $row['admin_id'] = $admin_id ? $admin_id : 0;
  28. }
  29. if (!preg_match("/^([a-z0-9_]+)$/", $row['table'])) {
  30. throw new Exception("表名只支持小写字母、数字、下划线");
  31. }
  32. });
  33. self::afterInsert(function ($row) {
  34. $prefix = Config::get('database.prefix');
  35. $sql = "CREATE TABLE `{$prefix}{$row['table']}` (
  36. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  37. `user_id` int(10) DEFAULT NULL COMMENT '会员ID',
  38. `title` varchar(255) DEFAULT '' COMMENT '标题',
  39. `images` varchar(1500) DEFAULT '' COMMENT '图片',
  40. `content` text DEFAULT NULL COMMENT '内容',
  41. `createtime` int(10) DEFAULT NULL COMMENT '添加时间',
  42. `updatetime` int(10) DEFAULT NULL COMMENT '更新时间',
  43. `memo` varchar(1500) DEFAULT '' COMMENT '备注',
  44. `status` enum('normal','hidden','rejected') DEFAULT 'hidden' COMMENT '状态',
  45. PRIMARY KEY (`id`),
  46. KEY `user_id` (`user_id`),
  47. KEY `createtime` (`createtime`)
  48. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{$row['name']}'";
  49. db()->execute($sql);
  50. $time = time();
  51. $fieldsArr = [
  52. [
  53. "source" => "diyform",
  54. "source_id" => $row['id'],
  55. "name" => "title",
  56. "type" => "string",
  57. "title" => "标题",
  58. "content" => "value1|title1\r\nvalue2|title2",
  59. "length" => 255,
  60. "iscontribute" => 1,
  61. "isfilter" => 0,
  62. "weigh" => 3,
  63. "defaultvalue" => '',
  64. "createtime" => $time,
  65. "updatetime" => $time,
  66. "status" => "normal"
  67. ],
  68. [
  69. "source" => "diyform",
  70. "source_id" => $row['id'],
  71. "name" => "images",
  72. "type" => "images",
  73. "title" => "图片",
  74. "content" => "value1|title1\r\nvalue2|title2",
  75. "length" => 1500,
  76. "iscontribute" => 1,
  77. "isfilter" => 0,
  78. "weigh" => 2,
  79. "defaultvalue" => '',
  80. "createtime" => $time,
  81. "updatetime" => $time,
  82. "status" => "normal"
  83. ],
  84. [
  85. "source" => "diyform",
  86. "source_id" => $row['id'],
  87. "name" => "content",
  88. "type" => "editor",
  89. "title" => "内容",
  90. "content" => "value1|title1\r\nvalue2|title2",
  91. "length" => 0,
  92. "iscontribute" => 1,
  93. "isfilter" => 0,
  94. "weigh" => 1,
  95. "defaultvalue" => '',
  96. "createtime" => $time,
  97. "updatetime" => $time,
  98. "status" => "normal"
  99. ],
  100. ];
  101. Db::name("cms_fields")->insertAll($fieldsArr);
  102. });
  103. }
  104. public function getUrlAttr($value, $data)
  105. {
  106. return $this->buildUrl($value, $data);
  107. }
  108. public function getFullurlAttr($value, $data)
  109. {
  110. return $this->buildUrl($value, $data, true);
  111. }
  112. private function buildUrl($value, $data, $domain = false)
  113. {
  114. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  115. $time = $data['createtime'] ?? time();
  116. $vars = [
  117. ':id' => $data['id'],
  118. ':diyname' => $diyname,
  119. ':year' => date("Y", $time),
  120. ':month' => date("m", $time),
  121. ':day' => date("d", $time)
  122. ];
  123. return addon_url('cms/diyform/index', $vars, static::$config['urlsuffix'], $domain);
  124. }
  125. public function getPosturlAttr($value, $data)
  126. {
  127. $diyname = isset($data['diyname']) && $data['diyname'] ? $data['diyname'] : $data['id'];
  128. $time = $data['createtime'] ?? time();
  129. $vars = [
  130. ':id' => $data['id'],
  131. ':diyname' => $diyname,
  132. ':year' => date("Y", $time),
  133. ':month' => date("m", $time),
  134. ':day' => date("d", $time)
  135. ];
  136. return addon_url('cms/diyform/post', $vars, static::$config['urlsuffix']);
  137. }
  138. public function getFieldsAttr($value, $data)
  139. {
  140. return is_array($value) ? $value : ($value ? explode(',', $value) : []);
  141. }
  142. public function getSettingAttr($value, $data)
  143. {
  144. return is_array($value) ? $value : (array)json_decode($data['setting'], true);
  145. }
  146. public function setSettingAttr($value)
  147. {
  148. return is_array($value) ? json_encode($value) : $value;
  149. }
  150. public function getStatusList()
  151. {
  152. return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
  153. }
  154. public function getStatusTextAttr($value, $data)
  155. {
  156. $value = $value ? $value : $data['status'];
  157. $list = $this->getStatusList();
  158. return isset($list[$value]) ? $list[$value] : '';
  159. }
  160. }