common.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. declare (strict_types = 1);
  3. use app\common\model\Addons;
  4. use think\facade\Cache;
  5. use app\common\model\Config;
  6. use app\common\service\LangService;
  7. if (!function_exists('site_config')) {
  8. /**
  9. * 获取/设置系统配置
  10. * @param string $name 属性名
  11. * @param mixed $vars 属性值
  12. * @return mixed
  13. */
  14. function site_config(string $name,mixed $vars='')
  15. {
  16. if(strpos($name,'.')!==false){
  17. $name=explode('.',$name);
  18. $group=$name[0];
  19. $name=$name[1];
  20. }else{
  21. $group=$name;
  22. $name='';
  23. }
  24. if(!$vars){
  25. $groupval=Cache::get('site_config_'.$group);
  26. if(!$groupval){
  27. $groupval=Config::where('group',$group)->column('value','name');
  28. foreach ($groupval as $key=>$val){
  29. if(is_string($val)){
  30. if (str_starts_with($val, '{') && str_ends_with($val, '}')) {
  31. $groupval[$key]=json_decode($val,true);
  32. continue;
  33. }
  34. if(str_starts_with($val, '[') && str_ends_with($val, ']')){
  35. $groupval[$key]=json_decode($val,true);
  36. continue;
  37. }
  38. }
  39. $groupval[$key]=$val;
  40. }
  41. Cache::set('site_config_'.$group,$groupval);
  42. }
  43. if($name) {
  44. $type=Config::where(['group'=>$group,'name'=>$name])->value('type');
  45. if($type=='array'){
  46. $array=str_replace(' ', '', $groupval[$name]);
  47. $array=str_replace(' ', '', $array);
  48. return explode(',', $array);
  49. }
  50. return $groupval[$name];
  51. }else{
  52. return $groupval;
  53. }
  54. }else{
  55. if($name) {
  56. if(is_array($vars)){
  57. $vars=json_encode($vars,JSON_UNESCAPED_UNICODE);
  58. }
  59. Config::where(['group'=>$group,'name'=>$name])->update(['value'=>$vars]);
  60. }else{
  61. foreach ($vars as $key=>$val){
  62. if(is_array($val)){
  63. $val=json_encode($val,JSON_UNESCAPED_UNICODE);
  64. }
  65. Config::where(['group'=>$group,'name'=>$key])->update(['value'=>$val]);
  66. }
  67. }
  68. Cache::delete('site_config_'.$group);
  69. }
  70. }
  71. }
  72. if (!function_exists('__')) {
  73. /**
  74. * 获取语言变量值
  75. * @param string $name 语言变量名
  76. * @param array $vars 动态变量值
  77. * @param string $lang 语言
  78. * @return mixed
  79. */
  80. function __(string $name,array $vars = [])
  81. {
  82. return LangService::newInstance()->get($name,$vars);
  83. }
  84. }
  85. if (!function_exists('str_rand')) {
  86. /**
  87. * 获取随机字符串
  88. * @return string
  89. */
  90. function str_rand(int $num,string $str=''):string
  91. {
  92. if(!$str){
  93. $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  94. }
  95. $len=strlen($str)-1;
  96. $rand='';
  97. for($i=0;$i<$num;$i++){
  98. $rand.=$str[mt_rand(0,$len)];
  99. }
  100. return $rand;
  101. }
  102. }
  103. if (!function_exists('uuid')) {
  104. /**
  105. * 获取全球唯一标识
  106. * @return string
  107. */
  108. function uuid()
  109. {
  110. return sprintf(
  111. '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
  112. mt_rand(0, 0xffff),
  113. mt_rand(0, 0xffff),
  114. mt_rand(0, 0xffff),
  115. mt_rand(0, 0x0fff) | 0x4000,
  116. mt_rand(0, 0x3fff) | 0x8000,
  117. mt_rand(0, 0xffff),
  118. mt_rand(0, 0xffff),
  119. mt_rand(0, 0xffff)
  120. );
  121. }
  122. }
  123. if (!function_exists('get_module_alis')) {
  124. /**
  125. * 获取模块别名
  126. * @return string
  127. */
  128. function get_module_alis(string $module='')
  129. {
  130. if(!$module){
  131. $module=app('http')->getName();
  132. }
  133. $arr=config('app.app_map');
  134. foreach ($arr as $key=>$vars){
  135. if($vars==$module){
  136. return $key;
  137. }
  138. }
  139. return $module;
  140. }
  141. }
  142. if (!function_exists('build_url')) {
  143. /**
  144. * 生成url地址
  145. * @return string
  146. */
  147. function build_url(string $url,string $module=''):string
  148. {
  149. $arr=parse_url($url);
  150. $modulename=get_module_alis($module);
  151. $url_html_suffix='.'.config('route.url_html_suffix');
  152. if(strpos($arr['path'],$url_html_suffix)===false){
  153. $arr['path'].=$url_html_suffix;
  154. }
  155. $r='';
  156. if(isset($arr['scheme'])){
  157. $r.=$arr['scheme'].'://';
  158. }
  159. if(isset($arr['host'])){
  160. $r.=$arr['host'];
  161. }
  162. if(isset($arr['path'])){
  163. if(!str_starts_with($arr['path'],'/')) {
  164. $r .= '/'.$modulename.'/';
  165. }
  166. $r.=$arr['path'];
  167. }
  168. if(isset($arr['query'])){
  169. $r.='?'.$arr['query'];
  170. }
  171. return $r;
  172. }
  173. }
  174. if (!function_exists('rmdirs')) {
  175. /**
  176. * 删除文件夹
  177. * @param string $dirname 目录
  178. * @param bool $withself 是否删除自身
  179. * @return boolean
  180. */
  181. function rmdirs(string $dirname, bool $withself = true)
  182. {
  183. if (!is_dir($dirname)) {
  184. return false;
  185. }
  186. $files = new RecursiveIteratorIterator(
  187. new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS),
  188. RecursiveIteratorIterator::CHILD_FIRST
  189. );
  190. foreach ($files as $fileinfo) {
  191. $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
  192. $todo($fileinfo->getRealPath());
  193. }
  194. if ($withself) {
  195. @rmdir($dirname);
  196. }
  197. return true;
  198. }
  199. }
  200. if (!function_exists('create_file')) {
  201. /**
  202. * 创建文件并写入内容,如果所在文件夹不存在,则创建
  203. */
  204. function create_file(string $filepath, string $content = ''){
  205. $dir = dirname($filepath);
  206. if (!is_dir($dir)) {
  207. mkdir($dir, 0755, true);
  208. }
  209. file_put_contents($filepath, $content);
  210. }
  211. }
  212. if (!function_exists('get_addons')) {
  213. /**
  214. * 获取插件信息
  215. * @param string $pack 插件标识
  216. * @return array|bool
  217. */
  218. function get_addons(string $pack='')
  219. {
  220. $addons=Cache::get('download-addons');
  221. if(!$addons){
  222. $addons=Addons::field('id,key,type,name,install,open')->select();
  223. Cache::set('download-addons',$addons);
  224. }
  225. if(!$pack){
  226. return $addons;
  227. }
  228. foreach ($addons as $addon){
  229. if($addon['pack']==$pack){
  230. return $addon;
  231. }
  232. }
  233. return false;
  234. }
  235. }
  236. if (!function_exists('addons_installed')) {
  237. /**
  238. * 判断是否安装插件
  239. * @param string $pack 插件标识
  240. * @return array|bool
  241. */
  242. function addons_installed(string $pack)
  243. {
  244. $addons=Cache::get('download-addons');
  245. if(!$addons){
  246. $addons=Addons::field('id,key,pack,type,name,install,open')->select();
  247. Cache::set('download-addons',$addons);
  248. }
  249. foreach ($addons as $addon){
  250. if($addon['pack']==$pack && $addon['install']==1){
  251. return true;
  252. }
  253. }
  254. return false;
  255. }
  256. }
  257. if(!function_exists('getDbPrefix')){
  258. function getDbPrefix()
  259. {
  260. $config = \think\facade\Db::getConfig();
  261. $default=$config['default'];
  262. $prefix=$config['connections'][$default]['prefix'];
  263. return $prefix;
  264. }
  265. }