|
27 | 27 | use Log; |
28 | 28 | use Alert; |
29 | 29 | use Storage; |
30 | | -use Pterodactyl\Models; |
31 | 30 | use Illuminate\Http\Request; |
| 31 | +use Pterodactyl\Models\Pack; |
| 32 | +use Pterodactyl\Models\Service; |
32 | 33 | use Pterodactyl\Exceptions\DisplayException; |
33 | 34 | use Pterodactyl\Http\Controllers\Controller; |
34 | | -use Pterodactyl\Repositories\ServiceRepository\Pack; |
| 35 | +use Pterodactyl\Repositories\PackRepository; |
35 | 36 | use Pterodactyl\Exceptions\DisplayValidationException; |
36 | 37 |
|
37 | 38 | class PackController extends Controller |
38 | 39 | { |
39 | | - public function __construct() |
| 40 | + /** |
| 41 | + * Display listing of all packs on the system. |
| 42 | + * |
| 43 | + * @param Request $request |
| 44 | + * @return \Illuminate\View\View |
| 45 | + */ |
| 46 | + public function index(Request $request) |
40 | 47 | { |
41 | | - // |
42 | | - } |
| 48 | + $packs = Pack::with('option')->withCount('servers'); |
43 | 49 |
|
44 | | - public function listAll(Request $request) |
45 | | - { |
46 | | - return view('admin.services.packs.index', ['services' => Models\Service::all()]); |
47 | | - } |
| 50 | + if (! is_null($request->input('query'))) { |
| 51 | + $packs->search($request->input('query')); |
| 52 | + } |
48 | 53 |
|
49 | | - public function listByOption(Request $request, $id) |
50 | | - { |
51 | | - return view('admin.services.packs.byoption', [ |
52 | | - 'option' => Models\ServiceOption::with('service', 'packs')->findOrFail($id), |
53 | | - ]); |
| 54 | + return view('admin.packs.index', ['packs' => $packs->paginate(50)]); |
54 | 55 | } |
55 | 56 |
|
56 | | - public function listByService(Request $request, $id) |
| 57 | + /** |
| 58 | + * Display new pack creation form. |
| 59 | + * |
| 60 | + * @param Request $request |
| 61 | + * @return \Illuminate\View\View |
| 62 | + */ |
| 63 | + public function new(Request $request) |
57 | 64 | { |
58 | | - return view('admin.services.packs.byservice', [ |
59 | | - 'service' => Models\Service::with('options', 'options.packs')->findOrFail($id), |
| 65 | + return view('admin.packs.new', [ |
| 66 | + 'services' => Service::with('options')->get(), |
60 | 67 | ]); |
61 | 68 | } |
62 | 69 |
|
63 | | - public function new(Request $request, $opt = null) |
| 70 | + /** |
| 71 | + * Display new pack creation modal for use with template upload. |
| 72 | + * |
| 73 | + * @param Request $request |
| 74 | + * @return \Illuminate\View\View |
| 75 | + */ |
| 76 | + public function newTemplate(Request $request) |
64 | 77 | { |
65 | | - return view('admin.services.packs.new', [ |
66 | | - 'services' => Models\Service::with('options')->get(), |
| 78 | + return view('admin.packs.modal', [ |
| 79 | + 'services' => Service::with('options')->get(), |
67 | 80 | ]); |
68 | 81 | } |
69 | 82 |
|
70 | 83 | public function create(Request $request) |
71 | 84 | { |
72 | | - try { |
73 | | - $repo = new Pack; |
74 | | - $pack = $repo->create($request->only([ |
75 | | - 'name', 'version', 'description', |
76 | | - 'option', 'selectable', 'visible', |
77 | | - 'file_upload', |
78 | | - ])); |
79 | | - Alert::success('Successfully created new service!')->flash(); |
80 | | - |
81 | | - return redirect()->route('admin.services.packs.edit', $pack->id)->withInput(); |
82 | | - } catch (DisplayValidationException $ex) { |
83 | | - return redirect()->route('admin.services.packs.new', $request->input('option'))->withErrors(json_decode($ex->getMessage()))->withInput(); |
84 | | - } catch (DisplayException $ex) { |
85 | | - Alert::danger($ex->getMessage())->flash(); |
86 | | - } catch (\Exception $ex) { |
87 | | - Log::error($ex); |
88 | | - Alert::danger('An error occured while attempting to add a new service pack.')->flash(); |
89 | | - } |
| 85 | + $repo = new PackRepository; |
90 | 86 |
|
91 | | - return redirect()->route('admin.services.packs.new', $request->input('option'))->withInput(); |
92 | | - } |
93 | | - |
94 | | - public function edit(Request $request, $id) |
95 | | - { |
96 | | - $pack = Models\ServicePack::with('option.service')->findOrFail($id); |
97 | | - |
98 | | - return view('admin.services.packs.edit', [ |
99 | | - 'pack' => $pack, |
100 | | - 'services' => Models\Service::all()->load('options'), |
101 | | - 'files' => Storage::files('packs/' . $pack->uuid), |
102 | | - ]); |
103 | | - } |
104 | | - |
105 | | - public function update(Request $request, $id) |
106 | | - { |
107 | | - if (! is_null($request->input('action_delete'))) { |
108 | | - try { |
109 | | - $repo = new Pack; |
110 | | - $repo->delete($id); |
111 | | - Alert::success('The requested service pack has been deleted from the system.')->flash(); |
112 | | - |
113 | | - return redirect()->route('admin.services.packs'); |
114 | | - } catch (DisplayException $ex) { |
115 | | - Alert::danger($ex->getMessage())->flash(); |
116 | | - } catch (\Exception $ex) { |
117 | | - Log::error($ex); |
118 | | - Alert::danger('An error occured while attempting to delete this pack.')->flash(); |
119 | | - } |
120 | | - |
121 | | - return redirect()->route('admin.services.packs.edit', $id); |
122 | | - } else { |
123 | | - try { |
124 | | - $repo = new Pack; |
125 | | - $repo->update($id, $request->only([ |
126 | | - 'name', 'version', 'description', |
127 | | - 'option', 'selectable', 'visible', |
| 87 | + try { |
| 88 | + if ($request->input('action') === 'from_template') { |
| 89 | + $pack = $repo->createWithTemplate($request->intersect(['option_id', 'file_upload'])); |
| 90 | + } else { |
| 91 | + $pack = $repo->create($request->intersect([ |
| 92 | + 'name', 'description', 'version', 'option_id', |
| 93 | + 'selectable', 'visible', 'locked', 'file_upload', |
128 | 94 | ])); |
129 | | - Alert::success('Service pack has been successfully updated.')->flash(); |
130 | | - } catch (DisplayValidationException $ex) { |
131 | | - return redirect()->route('admin.services.packs.edit', $id)->withErrors(json_decode($ex->getMessage()))->withInput(); |
132 | | - } catch (\Exception $ex) { |
133 | | - Log::error($ex); |
134 | | - Alert::danger('An error occured while attempting to add edit this pack.')->flash(); |
135 | 95 | } |
| 96 | + Alert::success('Pack successfully created on the system.')->flash(); |
136 | 97 |
|
137 | | - return redirect()->route('admin.services.packs.edit', $id); |
138 | | - } |
139 | | - } |
140 | | - |
141 | | - public function export(Request $request, $id, $files = false) |
142 | | - { |
143 | | - $pack = Models\ServicePack::findOrFail($id); |
144 | | - $json = [ |
145 | | - 'name' => $pack->name, |
146 | | - 'version' => $pack->version, |
147 | | - 'description' => $pack->dscription, |
148 | | - 'selectable' => (bool) $pack->selectable, |
149 | | - 'visible' => (bool) $pack->visible, |
150 | | - ]; |
151 | | - |
152 | | - $filename = tempnam(sys_get_temp_dir(), 'pterodactyl_'); |
153 | | - if ((bool) $files) { |
154 | | - $zip = new \ZipArchive; |
155 | | - if (! $zip->open($filename, \ZipArchive::CREATE)) { |
156 | | - abort(503, 'Unable to open file for writing.'); |
157 | | - } |
158 | | - |
159 | | - $files = Storage::files('packs/' . $pack->uuid); |
160 | | - foreach ($files as $file) { |
161 | | - $zip->addFile(storage_path('app/' . $file), basename(storage_path('app/' . $file))); |
162 | | - } |
163 | | - |
164 | | - $zip->addFromString('import.json', json_encode($json, JSON_PRETTY_PRINT)); |
165 | | - $zip->close(); |
166 | | - |
167 | | - return response()->download($filename, 'pack-' . $pack->name . '.zip')->deleteFileAfterSend(true); |
168 | | - } else { |
169 | | - $fp = fopen($filename, 'a+'); |
170 | | - fwrite($fp, json_encode($json, JSON_PRETTY_PRINT)); |
171 | | - fclose($fp); |
172 | | - |
173 | | - return response()->download($filename, 'pack-' . $pack->name . '.json', [ |
174 | | - 'Content-Type' => 'application/json', |
175 | | - ])->deleteFileAfterSend(true); |
176 | | - } |
177 | | - } |
178 | | - |
179 | | - public function uploadForm(Request $request, $for = null) |
180 | | - { |
181 | | - return view('admin.services.packs.upload', [ |
182 | | - 'services' => Models\Service::all()->load('options'), |
183 | | - ]); |
184 | | - } |
185 | | - |
186 | | - public function postUpload(Request $request) |
187 | | - { |
188 | | - try { |
189 | | - $repo = new Pack; |
190 | | - $pack = $repo->createWithTemplate($request->only(['option', 'file_upload'])); |
191 | | - Alert::success('Successfully created new service!')->flash(); |
192 | | - |
193 | | - return redirect()->route('admin.services.packs.edit', $pack->id)->withInput(); |
194 | | - } catch (DisplayValidationException $ex) { |
195 | | - return redirect()->back()->withErrors(json_decode($ex->getMessage()))->withInput(); |
| 98 | + return redirect()->route('admin.packs.view', $pack->id); |
| 99 | + } catch(DisplayValidationException $ex) { |
| 100 | + return redirect()->route('admin.packs.new')->withErrors(json_decode($ex->getMessage()))->withInput(); |
196 | 101 | } catch (DisplayException $ex) { |
197 | 102 | Alert::danger($ex->getMessage())->flash(); |
198 | 103 | } catch (\Exception $ex) { |
199 | 104 | Log::error($ex); |
200 | | - Alert::danger('An error occured while attempting to add a new service pack.')->flash(); |
| 105 | + Alert::danger('An error occured while attempting to add a new service pack. This error has been logged.')->flash(); |
201 | 106 | } |
202 | 107 |
|
203 | | - return redirect()->back(); |
| 108 | + return redirect()->route('admin.packs.new')->withInput(); |
204 | 109 | } |
| 110 | + |
| 111 | + |
| 112 | + // public function export(Request $request, $id, $files = false) |
| 113 | + // { |
| 114 | + // $pack = Models\Pack::findOrFail($id); |
| 115 | + // $json = [ |
| 116 | + // 'name' => $pack->name, |
| 117 | + // 'version' => $pack->version, |
| 118 | + // 'description' => $pack->dscription, |
| 119 | + // 'selectable' => (bool) $pack->selectable, |
| 120 | + // 'visible' => (bool) $pack->visible, |
| 121 | + // ]; |
| 122 | + |
| 123 | + // $filename = tempnam(sys_get_temp_dir(), 'pterodactyl_'); |
| 124 | + // if ((bool) $files) { |
| 125 | + // $zip = new \ZipArchive; |
| 126 | + // if (! $zip->open($filename, \ZipArchive::CREATE)) { |
| 127 | + // abort(503, 'Unable to open file for writing.'); |
| 128 | + // } |
| 129 | + |
| 130 | + // $files = Storage::files('packs/' . $pack->uuid); |
| 131 | + // foreach ($files as $file) { |
| 132 | + // $zip->addFile(storage_path('app/' . $file), basename(storage_path('app/' . $file))); |
| 133 | + // } |
| 134 | + |
| 135 | + // $zip->addFromString('import.json', json_encode($json, JSON_PRETTY_PRINT)); |
| 136 | + // $zip->close(); |
| 137 | + |
| 138 | + // return response()->download($filename, 'pack-' . $pack->name . '.zip')->deleteFileAfterSend(true); |
| 139 | + // } else { |
| 140 | + // $fp = fopen($filename, 'a+'); |
| 141 | + // fwrite($fp, json_encode($json, JSON_PRETTY_PRINT)); |
| 142 | + // fclose($fp); |
| 143 | + |
| 144 | + // return response()->download($filename, 'pack-' . $pack->name . '.json', [ |
| 145 | + // 'Content-Type' => 'application/json', |
| 146 | + // ])->deleteFileAfterSend(true); |
| 147 | + // } |
| 148 | + // } |
| 149 | + |
205 | 150 | } |
0 commit comments