mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 17:31:49 +08:00 
			
		
		
		
	feature: knowledge base & surplus switch
This commit is contained in:
		| @@ -68,7 +68,8 @@ class ConfigController extends Controller | ||||
|                 'subscribe' => [ | ||||
|                     'plan_change_enable' => (int)config('v2board.plan_change_enable', 1), | ||||
|                     'reset_traffic_method' => (int)config('v2board.reset_traffic_method', 0), | ||||
|                     'renew_reset_traffic_enable' => (int)config('v2board.renew_reset_traffic_enable', 0) | ||||
|                     'renew_reset_traffic_enable' => (int)config('v2board.renew_reset_traffic_enable', 0), | ||||
|                     'surplus_enable' => (int)config('v2board.surplus_enable', 1) | ||||
|                 ], | ||||
|                 'pay' => [ | ||||
|                     // alipay | ||||
|   | ||||
							
								
								
									
										109
									
								
								app/Http/Controllers/Admin/KnowledgeController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								app/Http/Controllers/Admin/KnowledgeController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Http\Controllers\Admin; | ||||
|  | ||||
| use App\Http\Requests\Admin\KnowledgeSave; | ||||
| use App\Http\Requests\Admin\KnowledgeSort; | ||||
| use App\Models\Knowledge; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Http\Controllers\Controller; | ||||
| use Illuminate\Support\Facades\DB; | ||||
|  | ||||
| class KnowledgeController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         if ($request->input('id')) { | ||||
|             $knowledge = Knowledge::find($request->input('id'))->toArray(); | ||||
|             if (!$knowledge) abort(500, '知识不存在'); | ||||
|             return response([ | ||||
|                 'data' => $knowledge | ||||
|             ]); | ||||
|         } | ||||
|         return response([ | ||||
|             'data' => Knowledge::select(['title', 'id', 'updated_at', 'category', 'show']) | ||||
|                 ->orderBy('sort', 'ASC') | ||||
|                 ->get() | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getCategory(Request $request) | ||||
|     { | ||||
|         return response([ | ||||
|             'data' => array_keys(Knowledge::get()->groupBy('category')->toArray()) | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function save(KnowledgeSave $request) | ||||
|     { | ||||
|         $params = $request->validated(); | ||||
|  | ||||
|         if (!$request->input('id')) { | ||||
|             if (!Knowledge::create($params)) { | ||||
|                 abort(500, '创建失败'); | ||||
|             } | ||||
|         } else { | ||||
|             try { | ||||
|                 Knowledge::find($request->input('id'))->update($params); | ||||
|             } catch (\Exception $e) { | ||||
|                 abort(500, '保存失败'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function show(Request $request) | ||||
|     { | ||||
|         if (empty($request->input('id'))) { | ||||
|             abort(500, '参数有误'); | ||||
|         } | ||||
|         $knowledge = Knowledge::find($request->input('id')); | ||||
|         if (!$knowledge) { | ||||
|             abort(500, '知识不存在'); | ||||
|         } | ||||
|         $knowledge->show = $knowledge->show ? 0 : 1; | ||||
|         if (!$knowledge->save()) { | ||||
|             abort(500, '保存失败'); | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function sort(KnowledgeSort $request) | ||||
|     { | ||||
|         DB::beginTransaction(); | ||||
|         foreach ($request->input('knowledge_ids') as $k => $v) { | ||||
|             if (!Knowledge::find($v)->update(['sort' => $k + 1])) { | ||||
|                 DB::rollBack(); | ||||
|                 abort(500, '保存失败'); | ||||
|             } | ||||
|         } | ||||
|         DB::commit(); | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function drop(Request $request) | ||||
|     { | ||||
|         if (empty($request->input('id'))) { | ||||
|             abort(500, '参数有误'); | ||||
|         } | ||||
|         $knowledge = Knowledge::find($request->input('id')); | ||||
|         if (!$knowledge) { | ||||
|             abort(500, '知识不存在'); | ||||
|         } | ||||
|         if (!$knowledge->delete()) { | ||||
|             abort(500, '删除失败'); | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
| @@ -1,93 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Http\Controllers\Admin; | ||||
|  | ||||
| use App\Http\Requests\Admin\TutorialSave; | ||||
| use App\Http\Requests\Admin\TutorialSort; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\Models\Tutorial; | ||||
| use Illuminate\Support\Facades\DB; | ||||
|  | ||||
| class TutorialController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         return response([ | ||||
|             'data' => Tutorial::orderBy('sort', 'ASC')->get() | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function save(TutorialSave $request) | ||||
|     { | ||||
|         $params = $request->validated(); | ||||
|  | ||||
|         if (!$request->input('id')) { | ||||
|             if (!Tutorial::create($params)) { | ||||
|                 abort(500, '创建失败'); | ||||
|             } | ||||
|         } else { | ||||
|             try { | ||||
|                 Tutorial::find($request->input('id'))->update($params); | ||||
|             } catch (\Exception $e) { | ||||
|                 abort(500, '保存失败'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function show(Request $request) | ||||
|     { | ||||
|         if (empty($request->input('id'))) { | ||||
|             abort(500, '参数有误'); | ||||
|         } | ||||
|         $tutorial = Tutorial::find($request->input('id')); | ||||
|         if (!$tutorial) { | ||||
|             abort(500, '教程不存在'); | ||||
|         } | ||||
|         $tutorial->show = $tutorial->show ? 0 : 1; | ||||
|         if (!$tutorial->save()) { | ||||
|             abort(500, '保存失败'); | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function sort(TutorialSort $request) | ||||
|     { | ||||
|         DB::beginTransaction(); | ||||
|         foreach ($request->input('tutorial_ids') as $k => $v) { | ||||
|             if (!Tutorial::find($v)->update(['sort' => $k + 1])) { | ||||
|                 DB::rollBack(); | ||||
|                 abort(500, '保存失败'); | ||||
|             } | ||||
|         } | ||||
|         DB::commit(); | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function drop(Request $request) | ||||
|     { | ||||
|         if (empty($request->input('id'))) { | ||||
|             abort(500, '参数有误'); | ||||
|         } | ||||
|         $tutorial = Tutorial::find($request->input('id')); | ||||
|         if (!$tutorial) { | ||||
|             abort(500, '教程不存在'); | ||||
|         } | ||||
|         if (!$tutorial->delete()) { | ||||
|             abort(500, '删除失败'); | ||||
|         } | ||||
|  | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										43
									
								
								app/Http/Controllers/User/KnowledgeController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/Http/Controllers/User/KnowledgeController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Http\Controllers\User; | ||||
|  | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\Models\User; | ||||
| use App\Services\UserService; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Models\Knowledge; | ||||
|  | ||||
| class KnowledgeController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         if ($request->input('id')) { | ||||
|             $knowledge = Knowledge::where('id', $request->input('id')) | ||||
|                 ->where('show', 1) | ||||
|                 ->first() | ||||
|                 ->toArray(); | ||||
|             if (!$knowledge) abort(500, '知识不存在'); | ||||
|             $user = User::find($request->session()->get('id')); | ||||
|             $userService = new UserService(); | ||||
|             $appleId = $userService->isAvailable($user) ? config('v2board.apple_id') : '没有有效订阅无法使用本站提供的AppleID'; | ||||
|             $appleIdPassword = $userService->isAvailable($user) ? config('v2board.apple_id_password') : '没有有效订阅无法使用本站提供的AppleID'; | ||||
|             $subscribeUrl = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token']; | ||||
|             $knowledge['body'] = str_replace('{{appleId}}', $appleId, $knowledge['body']); | ||||
|             $knowledge['body'] = str_replace('{{appleIdPassword}}', $appleIdPassword, $knowledge['body']); | ||||
|             $knowledge['body'] = str_replace('{{subscribeUrl}}', $subscribeUrl, $knowledge['body']); | ||||
|             return response([ | ||||
|                 'data' => $knowledge | ||||
|             ]); | ||||
|         } | ||||
|         $knowledges = Knowledge::select(['id', 'category', 'title', 'updated_at']) | ||||
|             ->where('language', $request->input('language')) | ||||
|             ->where('show', 1) | ||||
|             ->orderBy('sort', 'ASC') | ||||
|             ->get() | ||||
|             ->groupBy('category'); | ||||
|         return response([ | ||||
|             'data' => $knowledges | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
| @@ -1,82 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Http\Controllers\User; | ||||
|  | ||||
| use App\Http\Controllers\Controller; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Models\User; | ||||
| use App\Models\Tutorial; | ||||
| use Illuminate\Support\Facades\DB; | ||||
|  | ||||
| class TutorialController extends Controller | ||||
| { | ||||
|     public function getSubscribeUrl(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         return response([ | ||||
|             'data' => [ | ||||
|                 'subscribe_url' => config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'] | ||||
|             ] | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getAppleID(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         if ($user->expired_at < time()) { | ||||
|             return response([ | ||||
|                 'data' => [ | ||||
|                 ] | ||||
|             ]); | ||||
|         } | ||||
|         return response([ | ||||
|             'data' => [ | ||||
|                 'apple_id' => config('v2board.apple_id'), | ||||
|                 'apple_id_password' => config('v2board.apple_id_password') | ||||
|             ] | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         if ($request->input('id')) { | ||||
|             $tutorial = Tutorial::where('show', 1) | ||||
|                 ->where('id', $request->input('id')) | ||||
|                 ->first(); | ||||
|             if (!$tutorial) { | ||||
|                 abort(500, '教程不存在'); | ||||
|             } | ||||
|             return response([ | ||||
|                 'data' => $tutorial | ||||
|             ]); | ||||
|         } | ||||
|         $tutorial = Tutorial::select(['id', 'category_id', 'title']) | ||||
|             ->where('show', 1) | ||||
|             ->orderBy('sort', 'ASC') | ||||
|             ->get() | ||||
|             ->groupBy('category_id'); | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $response = [ | ||||
|             'data' => [ | ||||
|                 'tutorials' => $tutorial, | ||||
|                 'safe_area_var' => [ | ||||
|                     'subscribe_url' => config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'], | ||||
|                     'app_name' => config('v2board.app_name', 'V2board'), | ||||
|                     'apple_id' => $user->expired_at > time() || $user->expired_at === NULL ? config('v2board.apple_id', '本站暂无提供AppleID信息') : '账号过期或未订阅', | ||||
|                     'apple_id_password' => $user->expired_at > time() || $user->expired_at === NULL ? config('v2board.apple_id_password', '本站暂无提供AppleID信息') : '账号过期或未订阅' | ||||
|                 ] | ||||
|             ] | ||||
|         ]; | ||||
|         // fuck support shadowrocket urlsafeb64 subscribe | ||||
|         $response['data']['safe_area_var']['b64_subscribe_url'] = str_replace( | ||||
|             array('+', '/', '='), | ||||
|             array('-', '_', ''), | ||||
|             base64_encode($response['data']['safe_area_var']['subscribe_url']) | ||||
|         ); | ||||
|         // end | ||||
|         // fuck support surge urlencode subscribe | ||||
|         $response['data']['safe_area_var']['ue_subscribe_url'] = urlencode($response['data']['safe_area_var']['subscribe_url']); | ||||
|         // end | ||||
|         return response($response); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user