middleware('auth'); View::share('is_admin', true); } public function metadataUpgrade() { $albums = DbHelper::getAlbumsForCurrentUser(); $albumIDs = DbHelper::getAlbumIDsForCurrentUser(); $photoMetadata = DB::table('photos') ->whereIn('album_id', $albumIDs) ->select([ 'album_id', DB::raw('MIN(metadata_version) AS min_metadata_version') ]) ->groupBy('album_id') ->get(); foreach ($photoMetadata as $metadata) { /** @var Album $album */ foreach ($albums as $album) { if ($album->id == $metadata->album_id) { $album->min_metadata_version = $metadata->min_metadata_version; } } } return Theme::render('admin.metadata_upgrade', [ 'albums' => $albums, 'current_metadata_version' => PhotoService::METADATA_VERSION ]); } public function index() { $this->authorizeAccessToAdminPanel(); $albumCount = DbHelper::getAlbumsForCurrentUser()->count(); $photoCount = Photo::all()->count(); $groupCount = Group::all()->count(); $labelCount = Label::all()->count(); $userCount = User::where('is_activated', true)->count(); $metadataUpgradeNeeded = Photo::min('metadata_version') < PhotoService::METADATA_VERSION; return Theme::render('admin.index', [ 'album_count' => $albumCount, 'app_version' => config('app.version'), 'group_count' => $groupCount, 'label_count' => $labelCount, 'memory_limit' => ini_get('memory_limit'), 'metadata_upgrade_needed' => $metadataUpgradeNeeded, 'photo_count' => $photoCount, 'php_version' => phpversion(), 'os_version' => exec('lsb_release -ds 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 || uname -om'), 'server_name' => gethostname(), 'upload_file_size' => ini_get('upload_max_filesize'), 'upload_max_limit' => ini_get('post_max_size'), 'user_count' => $userCount ]); } public function quickUpload(Request $request) { $this->authorizeAccessToAdminPanel('admin:manage-albums'); $returnUrl = $request->headers->get('referer'); if (!MiscHelper::isSafeUrl($returnUrl)) { $returnUrl = route('home'); } // Pre-validate the upload before passing to the Photos controller $files = $request->files->get('photo'); if (!is_array($files) || count($files) == 0) { $request->session()->flash('error', trans('admin.quick_upload.no_image_provided')); return redirect($returnUrl); } $albumID = $request->get('album_id'); if (intval($albumID) == 0) { $albumName = trim($request->get('album_name')); if (strlen($albumName) == 0) { $request->session()->flash('error', trans('admin.quick_upload.no_album_selected')); return redirect($returnUrl); } $albumViews = UserConfig::allowedAlbumViews(); $album = new Album(); $album->storage_id = Storage::where('is_default', true)->first()->id; $album->user_id = Auth::user()->id; $album->default_view = UserConfig::get('default_album_view'); $album->name = $albumName; $album->description = ''; $album->save(); $request->request->set('album_id', $album->id); } /** @var PhotoController $photoController */ $photoController = app(PhotoController::class); return $photoController->store($request); } public function saveSettings(SaveSettingsRequest $request) { $this->authorizeAccessToAdminPanel('admin:configure'); $passwordKeys = [ 'smtp_password' ]; $checkboxKeys = [ 'allow_self_registration', 'enable_visitor_hits', 'hotlink_protection', 'recaptcha_enabled_registration', 'remove_copyright', 'require_email_verification', 'restrict_original_download', 'smtp_encryption', ]; $updateKeys = [ 'app_name', 'date_format', 'sender_address', 'sender_name', 'smtp_server', 'smtp_port', 'smtp_username', 'smtp_password', 'theme', 'recaptcha_site_key', 'recaptcha_secret_key', 'analytics_code' ]; $defaults = UserConfig::defaults(); foreach ($updateKeys as $key) { $config = UserConfig::getOrCreateModel($key); // Bit of a hack when the browser returns an empty password field - meaning the user didn't change it // - don't touch it! if ( $key == 'smtp_password' && strlen($config->value) > 0 && strlen($request->request->get($key)) == 0 && strlen($request->request->get('smtp_username')) > 0 ) { continue; } $config->value = $request->request->get($key); if (in_array($key, $passwordKeys) && strlen($config->value) > 0) { $config->value = encrypt($config->value); } if (isset($defaults[$key]) && $defaults[$key] == $config->value) { $config->delete(); } else { $config->save(); } } foreach ($checkboxKeys as $key) { $config = UserConfig::getOrCreateModel($key); $config->value = ($request->request->get($key) == 'on' ? 1 : 0); if (isset($defaults[$key]) && $defaults[$key] == $config->value) { $config->delete(); } else { $config->save(); } } $request->session()->flash('success', trans('admin.settings_saved_message')); return redirect(route('admin.settings')); } public function settings(Request $request) { $this->authorizeAccessToAdminPanel('admin:configure'); // Load the current configuration $config = array_merge(UserConfig::defaults(), UserConfig::getAll()); $dateFormats = UserConfig::allowedDateFormats(); $dateFormatsLookup = []; foreach ($dateFormats as $dateFormat) { $dateFormatsLookup[$dateFormat] = date($dateFormat); } $themeNamesLookup = UserConfig::allowedThemeNames(); return Theme::render('admin.settings', [ 'config' => $config, 'date_formats' => $dateFormatsLookup, 'success' => $request->session()->get('success'), 'theme_names' => $themeNamesLookup ]); } public function testMailSettings(SaveSettingsRequest $request) { $this->authorizeAccessToAdminPanel('admin:configure'); try { $validKeys = [ 'sender_address', 'sender_name', 'smtp_server', 'smtp_port', 'smtp_username', 'smtp_password', 'smtp_encryption' ]; $config = $request->only($validKeys); /** @var \Swift_Mailer $swiftMailer */ $swiftMailer = resolve('mailer')->getSwiftMailer(); /** @var \Swift_SmtpTransport $transport */ $transport = $swiftMailer->getTransport(); $transport->setHost($config['smtp_server']); $transport->setPort(intval($config['smtp_port'])); $transport->setUsername($config['smtp_username']); $transport->setPassword($config['smtp_password']); if (isset($config['smtp_encryption']) && strtolower($config['smtp_encryption']) == 'on') { $transport->setEncryption('tls'); } else { $transport->setEncryption(''); } Mail::to(Auth::user())->send(new TestMailConfig($config['sender_name'], $config['sender_address'])); return response()->json(array('is_successful' => true, 'message' => trans('admin.settings_test_email_successful'))); } catch (\Exception $ex) { return response()->json(array('is_successful' => false, 'message' => $ex->getMessage())); } } }