diff --git a/.env.example b/.env.example index 2dd2b5a8..d0b133f4 100644 --- a/.env.example +++ b/.env.example @@ -30,23 +30,20 @@ REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 -MAIL_MAILER=smtp #或使用 mailgun - -# 发信方信息 -MAIL_FROM_ADDRESS=admin@proxypanel.ml -MAIL_FROM_NAME=ProxyPanel - +MAIL_MAILER=smtp # SMTP设置 MAIL_HOST=smtp.exmail.qq.com MAIL_PORT=465 MAIL_ENCRYPTION=ssl MAIL_USERNAME=admin@proxypanel.ml MAIL_PASSWORD=password - # Mailgun设置 MAILGUN_DOMAIN= MAILGUN_SECRET= +# 发信方信息 +MAIL_FROM_ADDRESS=admin@proxypanel.ml +MAIL_FROM_NAME=ProxyPanel REDIRECT_HTTPS=true -BAIDU_APP_AK = - +BAIDU_APP_AK= +API_LAYER_API_KEY= diff --git a/app/helpers.php b/app/helpers.php index 1f009671..071aeb9d 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -130,3 +130,27 @@ if (! function_exists('array_clean')) { return $array; } } + +// string url safe sanitize +if (! function_exists('string_urlsafe')) { + function string_urlsafe($string, $force_lowercase = true, $anal = false) + { + $strip = [ + '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '=', '+', '[', '{', ']', '}', '\\', '|', ';', ':', '"', "'", '‘', '’', '“', + '”', '–', '—', '—', '–', ',', '<', '.', '>', '/', '?', + ]; + $clean = trim(str_replace($strip, '_', strip_tags($string))); + $clean = preg_replace('/\s+/', '-', $clean); + $clean = ($anal) ? preg_replace('/[^a-zA-Z0-9]/', '', $clean) : $clean; + + if ($force_lowercase) { + if (function_exists('mb_strtolower')) { + $clean = mb_strtolower($clean, 'UTF-8'); + } else { + $clean = strtolower($clean); + } + } + + return $clean; + } +} diff --git a/database/seeds/ArticleSeeder.php b/database/seeds/ArticleSeeder.php new file mode 100644 index 00000000..c82b6f7b --- /dev/null +++ b/database/seeds/ArticleSeeder.php @@ -0,0 +1,116 @@ + [ + 255 => [ + '不运行软件,就连不上网,怎么办?', '

方法一

+

电脑有安装任何电脑管家类的软件,都可以使用他们自带的网络修复工具来重置网络。

+

方法二

+
    +
  1. 键盘操作Win + X,或右击左下角开始菜单键 (Win键看起来像 这样)
  2. +
  3. 按下 A键 或者 手动选择 命令提示符(管理员)/ Windows PowerShell(管理员)
  4. +
  5. 输入Netsh winsock reset 后回车,再输入 netsh advfirewall reset 后回车;
  6. +
', + ], + + 254 => [ + '为什么我的账号状态显示是禁用?', '

账号在2种情况下会显示禁用;

+
    +
  1. 套餐过期/流量枯竭;此情况您需要重新购买/重置 【服 务】
  2. +
  3. 近期流量使用异常;在1小时内使用流量超过 10GB ,即会触发本站的流量异常保护;保护时长为 60分钟
  4. +
+

如您对禁用情况有疑问,可以创建【工 单】,联系售后人员。

', + ], + 253 => [ + '为什么我的订阅链接被禁用了?', '

订阅地址对于账号来说非常重要。所以本站对此设置了严格的限制措施,以防止用户无意间泄露给他人后,无法挽回。

+

限制为: 24小时内,订阅地址只允许请求 20次

+

解封,请在过一段时间并确定无误后,创建【工 单】,联系售后人员

+

小知识:如果您无意间的截图忘记将订阅地址打码了,您可以 点击上方 更换按钮

', + ], + 252 => [ + '我想续费/购买服务,该怎么操作?', '
    +
  1. 在线支付,本支付方式支持支付宝。支付后即开即用。前往 【服 务】 选择想要购买的套餐,在订单界面选择在线支付即可。
  2. +
  3. 余额支付,本支付方法支持微信,支付宝。支付后需要等待充值到账,再购买服务。 ,充值后等待充值到账,一般会在24小时内到账,到账后可以在 【服 务】页面查看您的账号余额。 在【服 务】 选择想要购买的套餐,在订单界面选择余额支付即可。
  4. +
', + ], 251 => [ + '怎么样才能快速的联系上客服?', '
请选择其一种方式联系客服,请勿重复发送请求!!!
+
    +
  1. 【工 单】界面,创建新的工单,客服人员在上线后会在第一时刻处理。
  2. +
', + ], + ], + '下载&教程' => [ + 99 => [ + 'Windows', '
    +
  1. 点击此处下载客户端并启动
  2. +
  3. 运行 ShadowsocksR 文件夹内的 ShadowsocksR.exe
  4. +
  5. 右击桌面右下角状态栏(或系统托盘)纸飞机 -> 服务器订阅 -> SSR服务器订阅设置
  6. +
  7. 点击窗口左下角 “Add” 新增订阅,完整复制本页上方 “订阅服务” 处地址,将其粘贴至“网址”栏,点击“确定”
  8. +
  9. 右击纸飞机 -> 服务器订阅 -> 更新SSR服务器订阅(不通过代理)
  10. +
  11. 右击纸飞机 -> 服务器,选定合适服务器
  12. +
  13. 右击纸飞机 -> 系统代理模式 -> PAC模式
  14. +
  15. 右击纸飞机 -> PAC -> 更新PAC为GFWList
  16. +
  17. 右击纸飞机 -> 代理规则 -> 绕过局域网和大陆
  18. +
  19. 右击纸飞机,取消勾选“服务器负载均衡”
  20. +
', + ], 98 => [ + '安卓', '
    +
  1. 点击此处下载客户端并启动
  2. +
  3. 单击左上角的shadowsocksR进入配置文件页,点击右下角的“+”号,点击“添加/升级SSR订阅”,完整复制本页上方“订阅服务”处地址,填入订阅信息并保存
  4. +
  5. 选中任意一个节点,返回软件首页
  6. +
  7. 在软件首页处找到“路由”选项,并将其改为“绕过局域网及中国大陆地址”
  8. +
  9. 点击右上角的小飞机图标进行连接,提示是否添加(或创建)VPN连接,点同意(或允许)
  10. +
', + ], 97 => [ + 'iOS', '
    +
  1. 请从站长处获取 App Store 账号密码
  2. +
  3. 打开 Shadowrocket,点击右上角 “+”号 添加节点,类型选择 Subscribe
  4. +
  5. 完整复制本页上方 “订阅服务” 处地址,将其粘贴至 “URL”栏,点击右上角 “完成”
  6. +
  7. 左划新增的服务器订阅,点击 “更新”
  8. +
  9. 选定合适服务器节点,点击右上角连接开关,屏幕上方状态栏出现“VPN”图标
  10. +
  11. 当进行海外游戏时请将 Shadowrocket “首页” 页面中的 “全局路由” 切换至 “代理”,并确保“设置”页面中的“UDP”已开启转发
  12. +
', + ], 96 => [ + 'Mac', '
    +
  1. 点击此处下载客户端并启动
  2. +
  3. 点击状态栏纸飞机 -> 服务器 -> 编辑订阅
  4. +
  5. 点击窗口左下角 “+”号 新增订阅,完整复制本页上方“订阅服务”处地址,将其粘贴至“订阅地址”栏,点击右下角“OK”
  6. +
  7. 点击纸飞机 -> 服务器 -> 手动更新订阅
  8. +
  9. 点击纸飞机 -> 服务器,选定合适服务器
  10. +
  11. 点击纸飞机 -> 打开Shadowsocks
  12. +
  13. 点击纸飞机 -> PAC自动模式
  14. +
  15. 点击纸飞机 -> 代理设置->从 GFW List 更新 PAC
  16. +
  17. 打开系统偏好设置 -> 网络,在窗口左侧选定显示为“已连接”的网络,点击右下角“高级...”
  18. +
  19. 切换至“代理”选项卡,勾选“自动代理配置”和“不包括简单主机名”,点击右下角“好”,再次点击右下角“应用”
  20. +
', + ], 95 => [ + 'Linux', '
    +
  1. 点击此处下载客户端并启动
  2. +
  3. 单击状态栏小飞机,找到服务器 -> 编辑订阅,复制黏贴订阅地址
  4. +
  5. 更新订阅设置即可
  6. +
', + ], + ], + ]; + + foreach ($articles as $category => $article) { + foreach ($article as $sort => $body) { + Article::create(['title' => $body[0], 'content' => $body[1], 'type' => 1, 'sort' => $sort, 'language' => 'zh_CN', 'category' => $category]); + } + } + + Article::create(['title' => 'Welcome! 欢迎!', 'content' => 'Welcome to ProxyPanel!
欢迎使用ProxyPanel!', 'type' => 2, 'language' => 'zh_CN']); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index a0a2fd34..3b467a90 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -1,5 +1,6 @@ call(PresetSeeder::class); } + + if (Article::doesntExist()) { + $this->call(ArticleSeeder::class); + } } } diff --git a/resources/views/_layout.blade.php b/resources/views/_layout.blade.php index d672a7b3..23d69a23 100644 --- a/resources/views/_layout.blade.php +++ b/resources/views/_layout.blade.php @@ -14,7 +14,7 @@ content="An account management Panel based on Laravel7 framework. Include multiple payment, account management, system caching, admin notification, products models, and more."> - + @yield('title') diff --git a/resources/views/admin/article/info.blade.php b/resources/views/admin/article/info.blade.php index a368f76b..5a629cb9 100644 --- a/resources/views/admin/article/info.blade.php +++ b/resources/views/admin/article/info.blade.php @@ -71,7 +71,7 @@
- + 值越高显示时越靠前
@@ -85,7 +85,11 @@
- +
@@ -109,8 +113,8 @@ @isset($article) $(document).ready(function() { $("input[name='type'][value='{{$article->type}}']").click(); - $('#title').val('{!! $article->title !!}'); - $('#category').val('{{$article->category}}'); + $('#title').val(@json($article->title)); + $('#category').val(@json($article->category)); $('#language').selectpicker('val', '{{$article->language}}'); $('#sort').val('{{$article->sort}}'); }); diff --git a/resources/views/admin/shop/info.blade.php b/resources/views/admin/shop/info.blade.php index ee38a5e5..9f0ad908 100644 --- a/resources/views/admin/shop/info.blade.php +++ b/resources/views/admin/shop/info.blade.php @@ -157,7 +157,7 @@
- + 排序值越大排越前
diff --git a/resources/views/user/knowledge.blade.php b/resources/views/user/knowledge.blade.php index 0c77ab0b..0c5f41e1 100644 --- a/resources/views/user/knowledge.blade.php +++ b/resources/views/user/knowledge.blade.php @@ -17,116 +17,114 @@

{{ __('user.knowledge.title') }}

-
-
-
-
-
- {{ __('user.knowledge.basic') }} - @foreach($knowledges as $category => $articles) - {{$category}} - @endforeach + @if ($knowledges->isNotEmpty()) +
+
+
+
+
+ @foreach($knowledges as $category => $articles) + @php $str = string_urlsafe($category) @endphp + {{$category}} + @endforeach +
-
-
-
-