Skip to content

Commit 32d6520

Browse files
Upload current files - v0.1.0
1 parent 0c53e48 commit 32d6520

28 files changed

Lines changed: 1297 additions & 2 deletions

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright [yyyy] [name of copyright owner]
189+
Copyright © 2022 FyreNodes LTD and contributers.
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1-
# Knowledgebase
1+
# Fyre Knowledgebase
22
A open-source feature rich knowledgebase for Pterodactyl Panel.
3+
4+
## Installation:
5+
6+
Follow the documentation here for installation instructions: https://docs.fyresoftware.com/docs/pterodactyl/knowledgebase/introduction
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Pterodactyl\Contracts\Repository;
4+
5+
use Pterodactyl\Exceptions\Model\DataValidationException;
6+
use Pterodactyl\Exceptions\Repository\RecordNotFoundException;
7+
8+
interface KnowledgebaseRepositoryInterface extends RepositoryInterface
9+
{
10+
/**
11+
* Store a new persistent setting in the database.
12+
*
13+
* @throws DataValidationException
14+
* @throws RecordNotFoundException
15+
*/
16+
public function set(string $key, string $value = null);
17+
18+
/**
19+
* Retrieve a persistent setting from the database.
20+
*
21+
* @param string $key
22+
* @param mixed $default
23+
* @return mixed
24+
*/
25+
public function get(string $key, mixed $default): mixed;
26+
27+
/**
28+
* Remove a key from the database cache.
29+
*/
30+
public function forget(string $key);
31+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Knowledgebase;
4+
5+
use Carbon\Carbon;
6+
use Illuminate\View\View;
7+
use Illuminate\Routing\Controller;
8+
use Illuminate\Support\Facades\DB;
9+
use Prologue\Alerts\AlertsMessageBag;
10+
use Illuminate\Http\RedirectResponse;
11+
use Pterodactyl\Http\Requests\Admin\Knowledgebase\CategoryFormRequest;
12+
13+
class CategoriesController extends Controller
14+
{
15+
public AlertsMessageBag $alert;
16+
17+
/**
18+
* @param AlertsMessageBag $alert
19+
*/
20+
public function __construct(AlertsMessageBag $alert)
21+
{
22+
$this->alert = $alert;
23+
}
24+
25+
/**
26+
* @return View
27+
*/
28+
public function index(): View
29+
{
30+
return view('admin.knowledgebase.categories.index', [
31+
'categories' => DB::table('knowledgebase_categories')->paginate(10)
32+
]);
33+
}
34+
35+
/**
36+
* @return View
37+
*/
38+
public function new(): View
39+
{
40+
return view('admin.knowledgebase.categories.new');
41+
}
42+
43+
/**
44+
* @param CategoryFormRequest $request
45+
* @return RedirectResponse
46+
*/
47+
public function store(CategoryFormRequest $request): RedirectResponse
48+
{
49+
DB::table('knowledgebase_categories')->insert([
50+
'name' => $request->input('name'),
51+
'description' => $request->input('description'),
52+
'updated_at' => Carbon::now(),
53+
'created_at' => Carbon::now()
54+
]);
55+
56+
$this->alert->success('Category has been successfully created.')->flash();
57+
return redirect()->route('admin.knowledgebase.categories.index');
58+
}
59+
60+
/**
61+
* @param int $id
62+
* @return View
63+
*/
64+
public function edit(int $id): View
65+
{
66+
return view('admin.knowledgebase.categories.edit', [
67+
'category' => DB::table('knowledgebase_categories')->where('id', '=', $id)->first()
68+
]);
69+
}
70+
71+
/**
72+
* @param CategoryFormRequest $request
73+
* @param int $id
74+
* @return RedirectResponse
75+
*/
76+
public function update(CategoryFormRequest $request, int $id): RedirectResponse
77+
{
78+
DB::table('knowledgebase_categories')->where('id', '=', $id)->update([
79+
'name' => $request->input('name'),
80+
'description' => $request->input('description'),
81+
'updated_at' => Carbon::now()
82+
]);
83+
84+
$this->alert->success('Category has been successfully updated.')->flash();
85+
return redirect()->route('admin.knowledgebase.categories.index');
86+
}
87+
88+
/**
89+
* @param int $id
90+
* @return RedirectResponse
91+
*/
92+
public function delete(int $id): RedirectResponse
93+
{
94+
DB::table('knowledgebase_categories')->delete($id);
95+
96+
$this->alert->success('Category has been successfully deleted.')->flash();
97+
return redirect()->route('admin.knowledgebase.categories.index');
98+
}
99+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Knowledgebase;
4+
5+
use Illuminate\View\View;
6+
use Prologue\Alerts\AlertsMessageBag;
7+
use Illuminate\Http\RedirectResponse;
8+
use Pterodactyl\Http\Controllers\Controller;
9+
use Pterodactyl\Exceptions\Model\DataValidationException;
10+
use Pterodactyl\Exceptions\Repository\RecordNotFoundException;
11+
use Pterodactyl\Http\Requests\Admin\Knowledgebase\IndexFormRequest;
12+
use Pterodactyl\Contracts\Repository\KnowledgebaseRepositoryInterface;
13+
14+
class IndexController extends Controller
15+
{
16+
public AlertsMessageBag $alert;
17+
public KnowledgebaseRepositoryInterface $knowledgebase;
18+
19+
public function __construct(KnowledgebaseRepositoryInterface $knowledgebase, AlertsMessageBag $alert)
20+
{
21+
$this->alert = $alert;
22+
$this->knowledgebase = $knowledgebase;
23+
}
24+
25+
/**
26+
* @return View
27+
*/
28+
public function index(): View
29+
{
30+
return view('admin.knowledgebase.index', [
31+
'status' => $this->knowledgebase->get('status', false)
32+
]);
33+
}
34+
35+
/**
36+
* @param IndexFormRequest $request
37+
* @return RedirectResponse
38+
* @throws DataValidationException
39+
* @throws RecordNotFoundException
40+
*/
41+
public function update(IndexFormRequest $request): RedirectResponse
42+
{
43+
foreach ($request->normalize() as $key => $value) {
44+
$this->knowledgebase->set($key, $value);
45+
}
46+
47+
$this->alert->success('Knowledgebase has been successfully updated.')->flash();
48+
return redirect()->route('admin.knowledgebase');
49+
}
50+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Knowledgebase;
4+
5+
use Carbon\Carbon;
6+
use Illuminate\View\View;
7+
use Illuminate\Support\Facades\DB;
8+
use Prologue\Alerts\AlertsMessageBag;
9+
use Illuminate\Http\RedirectResponse;
10+
use Pterodactyl\Http\Controllers\Controller;
11+
use Pterodactyl\Http\Requests\Admin\Knowledgebase\QuestionFormRequest;
12+
13+
class QuestionsController extends Controller
14+
{
15+
public AlertsMessageBag $alert;
16+
17+
/**
18+
* @param AlertsMessageBag $alert
19+
*/
20+
public function __construct(AlertsMessageBag $alert)
21+
{
22+
$this->alert = $alert;
23+
}
24+
25+
/**
26+
* @return View
27+
*/
28+
public function index(): View
29+
{
30+
return view('admin.knowledgebase.questions.index', [
31+
'questions' => DB::table('knowledgebase_questions')->paginate(10),
32+
'categories' => DB::table('knowledgebase_categories')->get()
33+
]);
34+
}
35+
36+
/**
37+
* @return View
38+
*/
39+
public function new(): View
40+
{
41+
return view('admin.knowledgebase.questions.new', [
42+
'categories' => DB::table('knowledgebase_categories')->paginate(10)
43+
]);
44+
}
45+
46+
/**
47+
* @param QuestionFormRequest $request
48+
* @return RedirectResponse
49+
*/
50+
public function store(QuestionFormRequest $request): RedirectResponse
51+
{
52+
DB::table('knowledgebase_questions')->insert([
53+
'subject' => $request->input('subject'),
54+
'information' => $request->input('information'),
55+
'category' => $request->input('category'),
56+
'author' => $request->user()->name_first.' '.$request->user()->name_last,
57+
'updated_at' => Carbon::now(),
58+
'created_at' => Carbon::now()
59+
]);
60+
61+
$this->alert->success('Question has been created successfully.')->flash();
62+
return redirect()->route('admin.knowledgebase.questions.index');
63+
}
64+
65+
/**
66+
* @param int $id
67+
* @return View
68+
*/
69+
public function edit(int $id): View
70+
{
71+
return view('admin.knowledgebase.questions.edit', [
72+
'question' => DB::table('knowledgebase_questions')->where('id', '=', $id)->first(),
73+
'categories' => DB::table('knowledgebase_categories')->paginate(10)
74+
]);
75+
}
76+
77+
/**
78+
* @param QuestionFormRequest $request
79+
* @param int $id
80+
* @return RedirectResponse
81+
*/
82+
public function update(QuestionFormRequest $request, int $id): RedirectResponse
83+
{
84+
DB::table('knowledgebase_questions')->where('id', '=', $id)->update([
85+
'subject' => $request->input('subject'),
86+
'information' => $request->input('information'),
87+
'category' => $request->input('category'),
88+
'author' => $request->user()->name_first.' '.$request->user()->name_last,
89+
'updated_at' => Carbon::now()
90+
]);
91+
92+
$this->alert->success('Question has been updated successfully.')->flash();
93+
return redirect()->route('admin.knowledgebase.questions.index');
94+
}
95+
96+
/**
97+
* @param int $id
98+
* @return RedirectResponse
99+
*/
100+
public function delete(int $id): RedirectResponse
101+
{
102+
DB::table('knowledgebase_questions')->delete($id);
103+
104+
$this->alert->success('Questions has been successfully deleted.')->flash();
105+
return redirect()->route('admin.knowledgebase.categories.index');
106+
}
107+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Api\Client;
4+
5+
use Illuminate\Support\Facades\DB;
6+
use Pterodactyl\Http\Controllers\Controller;
7+
use Illuminate\Http\JsonResponse;
8+
9+
class KnowledgebaseController extends Controller
10+
{
11+
public function categories(): JsonResponse
12+
{
13+
$categories = DB::table('knowledgebase_categories')->get();
14+
return new JsonResponse($categories, 200, [], null,true);
15+
}
16+
17+
public function questions(int $id): JsonResponse
18+
{
19+
$questions = DB::table('knowledgebase_questions')->where('category', '=', $id)->get();
20+
return new JsonResponse($questions, 200, [], null, true);
21+
}
22+
23+
public function question(int $id): JsonResponse
24+
{
25+
$question = DB::table('knowledgebase_questions')->where('id', '=', $id)->first();
26+
return new JsonResponse(json_encode($question), 200, [], null, true);
27+
}
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\Admin\Knowledgebase;
4+
5+
use Pterodactyl\Http\Requests\Admin\AdminFormRequest;
6+
7+
class CategoryFormRequest extends AdminFormRequest
8+
{
9+
10+
/**
11+
* @return array
12+
*/
13+
public function rules(): array
14+
{
15+
return [
16+
'name' => 'required|string',
17+
'description' => 'required|string'
18+
];
19+
}
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\Admin\Knowledgebase;
4+
5+
use Pterodactyl\Http\Requests\Admin\AdminFormRequest;
6+
7+
class IndexFormRequest extends AdminFormRequest
8+
{
9+
10+
/**
11+
* @return array
12+
*/
13+
public function rules(): array
14+
{
15+
return [
16+
'status' => 'boolean'
17+
];
18+
}
19+
}

0 commit comments

Comments
 (0)