@@ -80,6 +80,12 @@ public function newTemplate(Request $request)
8080 ]);
8181 }
8282
83+ /**
84+ * Handle create pack request and route user to location.
85+ *
86+ * @param Request $request
87+ * @return \Illuminate\View\View
88+ */
8389 public function create (Request $ request )
8490 {
8591 $ repo = new PackRepository ;
@@ -108,43 +114,102 @@ public function create(Request $request)
108114 return redirect ()->route ('admin.packs.new ' )->withInput ();
109115 }
110116
117+ /**
118+ * Display pack view template to user.
119+ *
120+ * @param Request $request
121+ * @param int $id
122+ * @return \Illuminate\View\View
123+ */
124+ public function view (Request $ request , $ id )
125+ {
126+ return view ('admin.packs.view ' , [
127+ 'pack ' => Pack::with ('servers.node ' , 'servers.user ' )->findOrFail ($ id ),
128+ 'services ' => Service::with ('options ' )->get (),
129+ ]);
130+ }
131+
132+ /**
133+ * Handle updating or deleting pack information.
134+ *
135+ * @param Request $request
136+ * @param int $id
137+ * @return \Illuminate\Response\RedirectResponse
138+ */
139+ public function update (Request $ request , $ id )
140+ {
141+ $ repo = new PackRepository ;
142+
143+ try {
144+ if ($ request ->input ('action ' ) !== 'delete ' ) {
145+ $ pack = $ repo ->update ($ id , $ request ->intersect ([
146+ 'name ' , 'description ' , 'version ' ,
147+ 'option_id ' , 'selectable ' , 'visible ' , 'locked '
148+ ]));
149+ Alert::success ('Pack successfully updated. ' )->flash ();
150+ } else {
151+ $ repo ->delete ($ id );
152+ Alert::success ('Pack was successfully deleted from the system. ' )->flash ();
153+
154+ return redirect ()->route ('admin.packs ' );
155+ }
156+ } catch (DisplayValidationException $ ex ) {
157+ return redirect ()->route ('admin.packs.view ' , $ id )->withErrors (json_decode ($ ex ->getMessage ()));
158+ } catch (DisplayException $ ex ) {
159+ Alert::danger ($ ex ->getMessage ())->flash ();
160+ } catch (\Exception $ ex ) {
161+ Log::error ($ ex );
162+ Alert::danger ('An error occured while attempting to edit this service pack. This error has been logged. ' )->flash ();
163+ }
164+
165+ return redirect ()->route ('admin.packs.view ' , $ id );
166+ }
167+
168+ /**
169+ * Creates an archive of the pack and downloads it to the browser.
170+ *
171+ * @param Request $request
172+ * @param int $id
173+ * @param bool $files
174+ * @return \Illuminate\Response\BinaryFileResponse
175+ */
176+ public function export (Request $ request , $ id , $ files = false )
177+ {
178+ $ pack = Pack::findOrFail ($ id );
179+ $ json = [
180+ 'name ' => $ pack ->name ,
181+ 'version ' => $ pack ->version ,
182+ 'description ' => $ pack ->description ,
183+ 'selectable ' => $ pack ->selectable ,
184+ 'visible ' => $ pack ->visible ,
185+ 'locked ' => $ pack ->locked ,
186+ ];
187+
188+ $ filename = tempnam (sys_get_temp_dir (), 'pterodactyl_ ' );
189+ if ($ files === 'with-files ' ) {
190+ $ zip = new \ZipArchive ;
191+ if (! $ zip ->open ($ filename , \ZipArchive::CREATE )) {
192+ abort (503 , 'Unable to open file for writing. ' );
193+ }
111194
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- // }
195+ $ files = Storage::files ('packs/ ' . $ pack ->uuid );
196+ foreach ($ files as $ file ) {
197+ $ zip ->addFile (storage_path ('app/ ' . $ file ), basename (storage_path ('app/ ' . $ file )));
198+ }
199+
200+ $ zip ->addFromString ('import.json ' , json_encode ($ json , JSON_PRETTY_PRINT ));
201+ $ zip ->close ();
202+
203+ return response ()->download ($ filename , 'pack- ' . $ pack ->name . '.zip ' )->deleteFileAfterSend (true );
204+ } else {
205+ $ fp = fopen ($ filename , 'a+ ' );
206+ fwrite ($ fp , json_encode ($ json , JSON_PRETTY_PRINT ));
207+ fclose ($ fp );
208+
209+ return response ()->download ($ filename , 'pack- ' . $ pack ->name . '.json ' , [
210+ 'Content-Type ' => 'application/json ' ,
211+ ])->deleteFileAfterSend (true );
212+ }
213+ }
149214
150215}
0 commit comments