Config.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // |
  4. // +----------------------------------------------------------------------
  5. // |
  6. // +----------------------------------------------------------------------
  7. // |
  8. // +----------------------------------------------------------------------
  9. // |
  10. // +----------------------------------------------------------------------
  11. // +----------------------------------------------------------------------
  12. // | 后台配置模型
  13. // +----------------------------------------------------------------------
  14. namespace app\common\model;
  15. use think\Model;
  16. class Config extends Model
  17. {
  18. // 追加属性
  19. protected $append = [
  20. 'extend_html',
  21. ];
  22. // 自动写入时间戳
  23. protected $autoWriteTimestamp = true;
  24. public function getExtendHtmlAttr($value, $data)
  25. {
  26. $result = preg_replace_callback("/\{([a-zA-Z]+)\}/", function ($matches) use ($data) {
  27. if (isset($data[$matches[1]])) {
  28. return $data[$matches[1]];
  29. }
  30. }, $data['extend']);
  31. return $result;
  32. }
  33. /**
  34. * 刷新配置文件
  35. */
  36. public static function refreshFile()
  37. {
  38. //如果没有配置权限无法进行修改
  39. if (!\app\admin\library\Auth::instance()->check('general/config/edit')) {
  40. return false;
  41. }
  42. $configs = self::where('status', 1)->column('*', 'name');
  43. $newConfigs = [];
  44. foreach ($configs as $key => $value) {
  45. if ($value['options'] != '') {
  46. $value['options'] = parse_attr($value['options']);
  47. }
  48. switch ($value['type']) {
  49. case 'array':
  50. $newConfigs[$key] = (array) json_decode($value['value'], true);
  51. break;
  52. case 'select':
  53. case 'radio':
  54. $newConfigs[$key] = $value['value'];
  55. if (isset($value['options'][$value['value']])) {
  56. $newConfigs[$key . '_text'] = $value['options'][$value['value']];
  57. } else {
  58. $newConfigs[$key . '_text'] = $value['value'];
  59. }
  60. break;
  61. case 'selects':
  62. case 'checkbox':
  63. if (empty($value['value'])) {
  64. $newConfigs[$key] = [];
  65. } else {
  66. $valueArr = explode(',', $value['value']);
  67. foreach ($valueArr as $v) {
  68. if (isset($value['options'][$v])) {
  69. $newConfigs[$key][$v] = $value['options'][$v];
  70. } elseif ($v) {
  71. $newConfigs[$key][$v] = $v;
  72. }
  73. }
  74. }
  75. break;
  76. case 'files':
  77. case 'images':
  78. $newConfigs[$key] = empty($value['value']) ? [] : explode(',', $value['value']);
  79. break;
  80. case 'markdown':
  81. $parser = new \util\Parser;
  82. $newConfigs[$key] = $value['value'];
  83. $newConfigs[$key . '_text'] = $parser->makeHtml($value['value']);
  84. break;
  85. default:
  86. $newConfigs[$key] = $value['value'];
  87. break;
  88. }
  89. }
  90. file_put_contents(
  91. app()->getConfigPath() . 'site.php',
  92. '<?php' . "\n\nreturn " . var_export_short($newConfigs) . ";\n"
  93. );
  94. return true;
  95. }
  96. /**
  97. * 本地上传配置信息
  98. * @return array
  99. */
  100. public static function upload()
  101. {
  102. $uploadcfg = config('upload');
  103. $uploadurl = app()->http->getName() ? $uploadcfg['uploadurl'] : ($uploadcfg['uploadurl'] === 'ajax/upload' ? 'index/' . $uploadcfg['uploadurl'] : $uploadcfg['uploadurl']);
  104. if (!preg_match("/^((?:[a-z]+:)?\/\/)(.*)/i", $uploadurl) && substr($uploadurl, 0, 1) !== '/') {
  105. $uploadurl = (string) url($uploadurl, [], false);
  106. }
  107. $uploadcfg['fullmode'] = isset($uploadcfg['fullmode']) && $uploadcfg['fullmode'];
  108. $uploadcfg['thumbstyle'] = $uploadcfg['thumbstyle'] ?? '';
  109. $upload = [
  110. 'cdnurl' => $uploadcfg['cdnurl'],
  111. 'uploadurl' => $uploadurl,
  112. 'bucket' => 'local',
  113. 'maxsize' => $uploadcfg['maxsize'],
  114. 'mimetype' => $uploadcfg['mimetype'],
  115. 'chunking' => $uploadcfg['chunking'],
  116. 'chunksize' => $uploadcfg['chunksize'],
  117. 'savekey' => $uploadcfg['savekey'],
  118. 'multipart' => [],
  119. 'multiple' => $uploadcfg['multiple'],
  120. 'timeout' => $uploadcfg['timeout'],
  121. 'fullmode' => $uploadcfg['fullmode'],
  122. 'thumbstyle' => $uploadcfg['thumbstyle'],
  123. 'storage' => 'local',
  124. ];
  125. return $upload;
  126. }
  127. }