where("tenant", "=", session("current_tenant_id"))->orderByDesc("gallery_create_time")->orderByDesc("id")->get(); $tenant = Tenant::query()->where("id", "=", session("current_tenant_id"))->firstOrFail(); return view("gallery.index", [ "galleries" => $galleries, "tenant" => $tenant]); } public function newView(Request $request) { $gallery = new Gallery(); $status = "preview"; if(!empty($request->old("status"))) { $status = $request->old("status"); } $listed = true; if(!empty($request->old("listed"))) { $listed = $request->old("listed"); } $tags = ""; return view("gallery.new", ["gallery" => $gallery, "tags" => $tags, "status" => $status, "listed" => $listed]); } public function newGallery(Request $request) { $validated = $request->validate([ 'name' => 'required|max:255', 'description' => 'max:15000000', 'url' => [new urlOrNull()], 'date' => [new dateOrNull()], 'status' => ['required', Rule::in(['preview', 'online', 'archiv'])], 'listed' => '', 'tags' => '' ]); if(!array_key_exists("listed", $validated)) { $validated["listed"] = false; } if(strtolower($validated["listed"]) == "off") { $validated["listed"] = false; } $validated["listed"] = (bool)$validated["listed"]; //Check if Gallery Date is in the feature if(!empty($validated["date"])) { $t = new \DateTime($validated["date"]); if($t > (new \DateTime())) { return Redirect::back()->withErrors(["date" => "Gallery date can't be in the feature"])->withInput($validated); } } if(empty($validated["url"])) { $prepairdName = strtolower($validated["name"]); $prepairdName = str_replace(" ", "-", $prepairdName); $prepairdName = str_replace("ö", "oe", $prepairdName); $prepairdName = str_replace("ü", "üe", $prepairdName); $prepairdName = str_replace("ö", "oe", $prepairdName); $prepairdName = str_replace("ß", "ss", $prepairdName); while (strlen($prepairdName) < 8) { $prepairdName = $prepairdName."0"; } preg_match_all("@[a-z0-9\-]@", $prepairdName, $matches); $newUrl = ""; foreach($matches[0] as $letter) { $newUrl .= $letter; } $baseUrl = $newUrl; $i = 1; while (true) { $r = Gallery::getByTenantAndUrl(session("current_tenant_id"), $newUrl); if($r == null) { break; } $newUrl = $baseUrl.$i; $i++; } } else { $newUrl = $validated["url"]; } //Check if url is free $galleryTMP = Gallery::getByTenantAndUrl(session("current_tenant_id"), $newUrl); if(!empty($galleryTMP)) { return Redirect::back()->withErrors(["url" => "URL is already used"])->withInput($validated); } $gallery = new Gallery(); $gallery->name = $validated["name"]; $gallery->url = $newUrl; $gallery->description = $validated["description"]; $gallery->tenant = session("current_tenant_id"); $gallery->status = $validated["status"]; $gallery->listed = $validated["listed"]; $gallery->tags = json_encode(mb_split(",", $validated["tags"])); if(!empty($validated["date"])) { $gallery->gallery_create_time = $validated["date"]; } else { $gallery->gallery_create_time = date("Y-m-d"); } $gallery->saveOrFail(); return \redirect("/g/".$gallery->url."/upload"); } public function editGalleryView($name, Request $request) { $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $status = $gallery->status; if(!empty($request->old("status"))) { $status = $request->old("status"); } $listed = $gallery->listed; if(!empty($request->old("listed"))) { $listed = $request->old("listed"); } $tagsArray = json_decode($gallery->tags); $tags = ""; if(is_array($tagsArray)) { $tags = implode(",", $tagsArray); } return view("gallery.new", ["gallery" => $gallery, "tags" => $tags, "status" => $status, "listed" => $listed]); } public function editGallery($name, Request $request) { $validated = $request->validate([ 'name' => 'required|max:255', 'description' => 'max:15000000', 'url' => 'required|regex:/^[a-z0-9\-]{8,30}$/i', 'date' => 'required|regex:/^\d{4}-\d{2}-\d{2}$/i', 'status' => ['required', Rule::in(['preview', 'online', 'archiv'])], 'listed' => '', 'tags' => '' ]); if(!array_key_exists("listed", $validated)) { $validated["listed"] = false; } if(strtolower($validated["listed"]) == "off") { $validated["listed"] = false; } $validated["listed"] = (bool)$validated["listed"]; $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $gallery->name = $validated["name"]; $gallery->description = $validated["description"]; $gallery->url = $validated["url"]; $gallery->gallery_create_time = $validated["date"]; $gallery->status = $validated["status"]; $gallery->listed = $validated["listed"]; $gallery->tags = json_encode(mb_split(",", $validated["tags"])); $gallery->saveOrFail(); return Redirect::back()->with(["msg" => "Saved"]); } public function imagesUploadView($name) { return view("gallery.upload"); } public function imageUpload($name, Request $request) { $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $validated = $request->validate([ 'files.0' => 'required|image' ]); $path = $validated["files"][0]->store("uploads/".session("current_tenant_id")."/".$name); $image = new Image(); $image->path = $path; $image->driver = env('FILESYSTEM_DRIVER', 'local'); $image->filename = $validated["files"][0]->getClientOriginalName(); $image->gallery = $gallery->id; $image->size = $validated["files"][0]->getSize(); $image->saveOrFail(); if(is_null($gallery->main_image)) { $gallery->main_image = $image->id; $gallery->saveOrFail(); } return $name; } public function showImagesView($name) { $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $tenant = Tenant::query()->where("id", "=", $gallery->tenant)->firstOrFail(); $images = Image::query()->where("gallery", "=", $gallery->id)->whereNull("deleted_at")->get(); return view("gallery.images", ["images" => $images, "gallery" => $gallery, "tenant" => $tenant]); } public function setDefault($name, Request $request) { $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $gallery->main_image = $request->input("id"); $gallery->saveOrFail(); return "OK"; } public function deleteImage($name, Request $request) { $gallery = Gallery::getByTenantAndUrl(session("current_tenant_id"), $name); $image = Image::query()->where("id", "=", $request->input("id"))->firstOrFail(); if($image->gallery != $gallery->id) { abort(400); } Storage::disk($image->driver)->delete($image->path); $image->deleted_at = date("Y-m-d H:i:s"); $image->saveOrFail(); return "OK"; } }