diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 670bf3b2c..9b6c85f73 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -3,135 +3,27 @@ namespace App\Http\Controllers; use App\AccountLog; -use App\EmailVerification; -use App\Media; -use App\Profile; -use App\User; -use App\UserFilter; -use App\Util\Lexer\PrettyNumber; + use Auth; use DB; use Illuminate\Http\Request; +use App\Http\Controllers\Settings\{ + HomeSettings, + PrivacySettings, + SecuritySettings +}; class SettingsController extends Controller { + use HomeSettings, + PrivacySettings, + SecuritySettings; + public function __construct() { $this->middleware('auth'); } - public function home() - { - $id = Auth::user()->profile->id; - $storage = []; - $used = Media::whereProfileId($id)->sum('size'); - $storage['limit'] = config('pixelfed.max_account_size') * 1024; - $storage['used'] = $used; - $storage['percentUsed'] = ceil($storage['used'] / $storage['limit'] * 100); - $storage['limitPretty'] = PrettyNumber::size($storage['limit']); - $storage['usedPretty'] = PrettyNumber::size($storage['used']); - - return view('settings.home', compact('storage')); - } - - public function homeUpdate(Request $request) - { - $this->validate($request, [ - 'name' => 'required|string|max:'.config('pixelfed.max_name_length'), - 'bio' => 'nullable|string|max:'.config('pixelfed.max_bio_length'), - 'website' => 'nullable|url', - 'email' => 'nullable|email', - ]); - - $changes = false; - $name = $request->input('name'); - $bio = $request->input('bio'); - $website = $request->input('website'); - $email = $request->input('email'); - $user = Auth::user(); - $profile = $user->profile; - - $validate = config('pixelfed.enforce_email_verification'); - - if ($user->email != $email) { - $changes = true; - $user->email = $email; - - if ($validate) { - $user->email_verified_at = null; - // Prevent old verifications from working - EmailVerification::whereUserId($user->id)->delete(); - } - } - - // Only allow email to be updated if not yet verified - if (!$validate || !$changes && $user->email_verified_at) { - if ($profile->name != $name) { - $changes = true; - $user->name = $name; - $profile->name = $name; - } - - if (!$profile->website || $profile->website != $website) { - $changes = true; - $profile->website = $website; - } - - if (!$profile->bio || !$profile->bio != $bio) { - $changes = true; - $profile->bio = $bio; - } - } - - if ($changes === true) { - $user->save(); - $profile->save(); - - return redirect('/settings/home')->with('status', 'Profile successfully updated!'); - } - - return redirect('/settings/home'); - } - - public function password() - { - return view('settings.password'); - } - - public function passwordUpdate(Request $request) - { - $this->validate($request, [ - 'current' => 'required|string', - 'password' => 'required|string', - 'password_confirmation' => 'required|string', - ]); - - $current = $request->input('current'); - $new = $request->input('password'); - $confirm = $request->input('password_confirmation'); - - $user = Auth::user(); - - if (password_verify($current, $user->password) && $new === $confirm) { - $user->password = bcrypt($new); - $user->save(); - - return redirect('/settings/home')->with('status', 'Password successfully updated!'); - } - - return redirect('/settings/home')->with('error', 'There was an error with your request!'); - } - - public function email() - { - return view('settings.email'); - } - - public function avatar() - { - return view('settings.avatar'); - } - public function accessibility() { $settings = Auth::user()->settings; @@ -167,70 +59,6 @@ class SettingsController extends Controller return view('settings.notifications'); } - public function privacy() - { - $settings = Auth::user()->settings; - $is_private = Auth::user()->profile->is_private; - $settings['is_private'] = (bool) $is_private; - - return view('settings.privacy', compact('settings')); - } - - public function privacyStore(Request $request) - { - $settings = Auth::user()->settings; - $profile = Auth::user()->profile; - $fields = [ - 'is_private', - 'crawlable', - 'show_profile_follower_count', - 'show_profile_following_count', - ]; - foreach ($fields as $field) { - $form = $request->input($field); - if ($field == 'is_private') { - if ($form == 'on') { - $profile->{$field} = true; - $settings->show_guests = false; - $settings->show_discover = false; - $profile->save(); - } else { - $profile->{$field} = false; - $profile->save(); - } - } elseif ($field == 'crawlable') { - if ($form == 'on') { - $settings->{$field} = false; - } else { - $settings->{$field} = true; - } - } else { - if ($form == 'on') { - $settings->{$field} = true; - } else { - $settings->{$field} = false; - } - } - $settings->save(); - } - - return redirect(route('settings.privacy'))->with('status', 'Settings successfully updated!'); - } - - public function security() - { - $sessions = DB::table('sessions') - ->whereUserId(Auth::id()) - ->limit(20) - ->get(); - $activity = AccountLog::whereUserId(Auth::id()) - ->orderBy('created_at', 'desc') - ->limit(50) - ->get(); - - return view('settings.security', compact('sessions', 'activity')); - } - public function applications() { return view('settings.applications'); @@ -255,64 +83,5 @@ class SettingsController extends Controller { return view('settings.developers'); } - - public function mutedUsers() - { - $pid = Auth::user()->profile->id; - $ids = (new UserFilter())->mutedUserIds($pid); - $users = Profile::whereIn('id', $ids)->simplePaginate(15); - return view('settings.privacy.muted', compact('users')); - } - - public function mutedUsersUpdate(Request $request) - { - $this->validate($request, [ - 'profile_id' => 'required|integer|min:1' - ]); - $fid = $request->input('profile_id'); - $pid = Auth::user()->profile->id; - DB::transaction(function () use ($fid, $pid) { - $filter = UserFilter::whereUserId($pid) - ->whereFilterableId($fid) - ->whereFilterableType('App\Profile') - ->whereFilterType('mute') - ->firstOrFail(); - $filter->delete(); - }); - return redirect()->back(); - } - - public function blockedUsers() - { - $pid = Auth::user()->profile->id; - $ids = (new UserFilter())->blockedUserIds($pid); - $users = Profile::whereIn('id', $ids)->simplePaginate(15); - return view('settings.privacy.blocked', compact('users')); - } - - - public function blockedUsersUpdate(Request $request) - { - $this->validate($request, [ - 'profile_id' => 'required|integer|min:1' - ]); - $fid = $request->input('profile_id'); - $pid = Auth::user()->profile->id; - DB::transaction(function () use ($fid, $pid) { - $filter = UserFilter::whereUserId($pid) - ->whereFilterableId($fid) - ->whereFilterableType('App\Profile') - ->whereFilterType('block') - ->firstOrFail(); - $filter->delete(); - }); - return redirect()->back(); - } - - public function blockedInstances() - { - $settings = Auth::user()->settings; - return view('settings.privacy.blocked-instances'); - } }