middleware('allowed'); } /** * Display a listing of the resource on the dashboard. */ public function dash(Request $request): View { $treat_tags_as = \App\Setting::fetch('treat_tags_as'); $data["treat_tags_as"] = $treat_tags_as; if (config('app.auth_roles_enable')) { $roles = explode(config('app.auth_roles_delimiter'), $request->header(config('app.auth_roles_header'))); if ($treat_tags_as == 'categories') { $data['categories'] = Item::whereHas('children')->with('children', function ($query) { $query->pinned()->orderBy('order', 'asc'); })->pinned()->orderBy('order', 'asc')->get(); } elseif ($treat_tags_as == 'tags') { $data['apps'] = Item::with('parents')->where('type', 0)->pinned()->orderBy('order', 'asc')->get(); $data['all_apps'] = Item::where('type', 0)->orderBy('order', 'asc')->get(); $data['taglist'] = Item::where('id', 0)->orWhere(function ($query) { $query->where('type', 1)->pinned(); })->orderBy('order', 'asc')->get(); } else { $data['apps'] = Item::whereHas('parents', function ($query) { $query->where('id', 0); })->whereIn('role', $roles)->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get(); $data['all_apps'] = Item::whereHas('parents', function ($query) { $query->where('id', 0); })->orWhere('type', 1)->orderBy('order', 'asc')->get(); } } else { if ($treat_tags_as == 'categories') { $data['categories'] = Item::whereHas('children')->with('children', function ($query) { $query->pinned()->orderBy('order', 'asc'); })->pinned()->orderBy('order', 'asc')->get(); } elseif ($treat_tags_as == 'tags') { $data['apps'] = Item::with('parents')->where('type', 0)->pinned()->orderBy('order', 'asc')->get(); $data['all_apps'] = Item::where('type', 0)->orderBy('order', 'asc')->get(); $data['taglist'] = Item::where('id', 0)->orWhere(function ($query) { $query->where('type', 1)->pinned(); })->orderBy('order', 'asc')->get(); } else { $data['apps'] = Item::whereHas('parents', function ($query) { $query->where('id', 0); })->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get(); $data['all_apps'] = Item::whereHas('parents', function ($query) { $query->where('id', 0); })->orWhere(function ($query) { $query->where('type', 1)->whereNot('id', 0); })->orderBy('order', 'asc')->get(); } } //$data['all_apps'] = Item::doesntHave('parents')->get(); // die(print_r($data)); return view('welcome', $data); } /** * Set order on the dashboard. * * @return void */ public function setOrder(Request $request) { $order = array_filter($request->input('order')); foreach ($order as $o => $id) { $item = Item::find($id); $item->order = $o; $item->save(); } } /** * Pin item on the dashboard. * * @param $id */ public function pin($id): RedirectResponse { $item = Item::findOrFail($id); $item->pinned = true; $item->save(); $route = route('dash', []); return redirect($route); } /** * Unpin item on the dashboard. * * @param $id */ public function unpin($id): RedirectResponse { $item = Item::findOrFail($id); $item->pinned = false; $item->save(); $route = route('dash', []); return redirect($route); } /** * Unpin item on the dashboard. * * @return RedirectResponse|View */ public function pinToggle($id, $ajax = false, $tag = false) { $item = Item::findOrFail($id); $new = !(((bool)$item->pinned === true)); $item->pinned = $new; $item->save(); if ($ajax) { $item = Item::whereId($tag)->first(); $data['apps'] = new Collection; if ((int)$tag === 0) { $tags = Item::where('type', 1)->pinned()->orderBy('order', 'asc')->get(); $data['apps'] = $data['apps']->merge($tags); } $apps = $item->children()->pinned()->orderBy('order', 'asc')->get(); $data['apps'] = $data['apps']->merge($apps); $data['ajax'] = true; return view('sortable', $data); } else { $route = route('dash', []); return redirect($route); } } /** * Display a listing of the resource. */ public function index(Request $request): View { $trash = (bool)$request->input('trash'); $data['apps'] = Item::ofType('item')->orderBy('title', 'asc')->get(); $data['trash'] = Item::ofType('item')->onlyTrashed()->get(); if ($trash) { return view('items.trash', $data); } else { return view('items.list', $data); } } /** * Show the form for creating a new resource. */ public function create(): View { // $data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id'); $data['tags']->prepend(__('app.dashboard'), 0); $data['current_tags'] = '0'; return view('items.create', $data); } /** * Show the form for editing the specified resource. */ public function edit(int $id): View { // Get the item $item = Item::find($id); if ($item->appid === null && $item->class !== null) { // old apps won't have an app id so set it $app = Application::where('class', $item->class)->first(); if ($app) { $item->appid = $app->appid; } } $data['item'] = $item; $data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id'); $data['tags']->prepend(__('app.dashboard'), 0); $data['current_tags'] = $data['item']->tags(); //$data['current_tags'] = $data['item']->parent; //die(print_r($data['current_tags'])); // show the edit form and pass the nerd return view('items.edit', $data); } /** * @param null $id * @throws ValidationException */ public static function storelogic(Request $request, $id = null): Item { $application = Application::single($request->input('appid')); $validatedData = $request->validate([ 'title' => 'required|max:255', 'url' => 'required', 'file' => 'image' ]); if ($request->hasFile('file')) { $image = $request->file('file'); $extension = $image->getClientOriginalExtension(); if ($extension === 'svg') { $sanitizer = new Sanitizer(); $sanitizedSvg = $sanitizer->sanitize(file_get_contents($image->getRealPath())); // Verify that the sanitization removed malicious content if (strpos($sanitizedSvg, '