common.php 7.3 KB

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