فهرست منبع

Update settings sidebar

Daniel Supernault 1 سال پیش
والد
کامیت
5f6ed85770
3فایلهای تغییر یافته به همراه291 افزوده شده و 317 حذف شده
  1. 185 185
      app/Http/Controllers/Settings/HomeSettings.php
  2. 29 56
      resources/views/settings/email.blade.php
  3. 77 76
      resources/views/settings/partial/sidebar.blade.php

+ 185 - 185
app/Http/Controllers/Settings/HomeSettings.php

@@ -22,189 +22,189 @@ use App\Services\PronounService;
 
 
 trait HomeSettings
 trait HomeSettings
 {
 {
-	public function home()
-	{
-		$id = Auth::user()->profile->id;
-		$storage = [];
-		$used = Media::whereProfileId($id)->sum('size');
-		$storage['limit'] = config_cache('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']);
-		$pronouns = PronounService::get($id);
-
-		return view('settings.home', compact('storage', 'pronouns'));
-	}
-
-	public function homeUpdate(Request $request)
-	{
-		$this->validate($request, [
-			'name'    => 'nullable|string|max:'.config('pixelfed.max_name_length'),
-			'bio'     => 'nullable|string|max:'.config('pixelfed.max_bio_length'),
-			'website' => 'nullable|url',
-			'language' => 'nullable|string|min:2|max:5',
-			'pronouns' => 'nullable|array|max:4'
-		]);
-
-		$changes = false;
-		$name = strip_tags(Purify::clean($request->input('name')));
-		$bio = $request->filled('bio') ? strip_tags(Purify::clean($request->input('bio'))) : null;
-		$website = $request->input('website');
-		$language = $request->input('language');
-		$user = Auth::user();
-		$profile = $user->profile;
-		$pronouns = $request->input('pronouns');
-		$existingPronouns = PronounService::get($profile->id);
-		$layout = $request->input('profile_layout');
-		if($layout) {
-			$layout = !in_array($layout, ['metro', 'moment']) ? 'metro' : $layout;
-		}
-
-		$enforceEmailVerification = config_cache('pixelfed.enforce_email_verification');
-
-		// Only allow email to be updated if not yet verified
-		if (!$enforceEmailVerification || !$changes && $user->email_verified_at) {
-			if ($profile->name != $name) {
-				$changes = true;
-				$user->name = $name;
-				$profile->name = $name;
-			}
-
-			if ($profile->website != $website) {
-				$changes = true;
-				$profile->website = $website;
-			}
-
-			if (strip_tags($profile->bio) != $bio) {
-				$changes = true;
-				$profile->bio = Autolink::create()->autolink($bio);
-			}
-
-			if($user->language != $language &&
-				in_array($language, \App\Util\Localization\Localization::languages())
-			) {
-				$changes = true;
-				$user->language = $language;
-				session()->put('locale', $language);
-			}
-
-			if($existingPronouns != $pronouns) {
-				if($pronouns && in_array('Select Pronoun(s)', $pronouns)) {
-					PronounService::clear($profile->id);
-				} else {
-					PronounService::put($profile->id, $pronouns);
-				}
-			}
-		}
-
-		if ($changes === true) {
-			$user->save();
-			$profile->save();
-			Cache::forget('user:account:id:'.$user->id);
-			AccountService::del($profile->id);
-			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();
-
-			$log = new AccountLog();
-			$log->user_id = $user->id;
-			$log->item_id = $user->id;
-			$log->item_type = 'App\User';
-			$log->action = 'account.edit.password';
-			$log->message = 'Password changed';
-			$log->link = null;
-			$log->ip_address = $request->ip();
-			$log->user_agent = $request->userAgent();
-			$log->save();
-
-			Mail::to($request->user())->send(new PasswordChange($user));
-			return redirect('/settings/home')->with('status', 'Password successfully updated!');
-		} else {
-			return redirect()->back()->with('error', 'There was an error with your request! Please try again.');
-		}
-
-	}
-
-	public function email()
-	{
-		return view('settings.email');
-	}
-
-	public function emailUpdate(Request $request)
-	{
-		$this->validate($request, [
-			'email'   => 'required|email|unique:users,email',
-		]);
-		$changes = false;
-		$email = $request->input('email');
-		$user = Auth::user();
-		$profile = $user->profile;
-
-		$validate = config_cache('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();
-			}
-
-			$log = new AccountLog();
-			$log->user_id = $user->id;
-			$log->item_id = $user->id;
-			$log->item_type = 'App\User';
-			$log->action = 'account.edit.email';
-			$log->message = 'Email changed';
-			$log->link = null;
-			$log->ip_address = $request->ip();
-			$log->user_agent = $request->userAgent();
-			$log->save();
-		}
-
-		if ($changes === true) {
-			Cache::forget('user:account:id:'.$user->id);
-			$user->save();
-			$profile->save();
-
-			return redirect('/settings/home')->with('status', 'Email successfully updated!');
-		} else {
-			return redirect('/settings/email');
-		}
-
-	}
-
-	public function avatar()
-	{
-		return view('settings.avatar');
-	}
-
+    public function home()
+    {
+        $id = Auth::user()->profile->id;
+        $storage = [];
+        $used = Media::whereProfileId($id)->sum('size');
+        $storage['limit'] = config_cache('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']);
+        $pronouns = PronounService::get($id);
+
+        return view('settings.home', compact('storage', 'pronouns'));
+    }
+
+    public function homeUpdate(Request $request)
+    {
+        $this->validate($request, [
+            'name'    => 'nullable|string|max:'.config('pixelfed.max_name_length'),
+            'bio'     => 'nullable|string|max:'.config('pixelfed.max_bio_length'),
+            'website' => 'nullable|url',
+            'language' => 'nullable|string|min:2|max:5',
+            'pronouns' => 'nullable|array|max:4'
+        ]);
+
+        $changes = false;
+        $name = strip_tags(Purify::clean($request->input('name')));
+        $bio = $request->filled('bio') ? strip_tags(Purify::clean($request->input('bio'))) : null;
+        $website = $request->input('website');
+        $language = $request->input('language');
+        $user = Auth::user();
+        $profile = $user->profile;
+        $pronouns = $request->input('pronouns');
+        $existingPronouns = PronounService::get($profile->id);
+        $layout = $request->input('profile_layout');
+        if($layout) {
+            $layout = !in_array($layout, ['metro', 'moment']) ? 'metro' : $layout;
+        }
+
+        $enforceEmailVerification = config_cache('pixelfed.enforce_email_verification');
+
+        // Only allow email to be updated if not yet verified
+        if (!$enforceEmailVerification || !$changes && $user->email_verified_at) {
+            if ($profile->name != $name) {
+                $changes = true;
+                $user->name = $name;
+                $profile->name = $name;
+            }
+
+            if ($profile->website != $website) {
+                $changes = true;
+                $profile->website = $website;
+            }
+
+            if (strip_tags($profile->bio) != $bio) {
+                $changes = true;
+                $profile->bio = Autolink::create()->autolink($bio);
+            }
+
+            if($user->language != $language &&
+                in_array($language, \App\Util\Localization\Localization::languages())
+            ) {
+                $changes = true;
+                $user->language = $language;
+                session()->put('locale', $language);
+            }
+
+            if($existingPronouns != $pronouns) {
+                if($pronouns && in_array('Select Pronoun(s)', $pronouns)) {
+                    PronounService::clear($profile->id);
+                } else {
+                    PronounService::put($profile->id, $pronouns);
+                }
+            }
+        }
+
+        if ($changes === true) {
+            $user->save();
+            $profile->save();
+            Cache::forget('user:account:id:'.$user->id);
+            AccountService::del($profile->id);
+            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();
+
+            $log = new AccountLog();
+            $log->user_id = $user->id;
+            $log->item_id = $user->id;
+            $log->item_type = 'App\User';
+            $log->action = 'account.edit.password';
+            $log->message = 'Password changed';
+            $log->link = null;
+            $log->ip_address = $request->ip();
+            $log->user_agent = $request->userAgent();
+            $log->save();
+
+            Mail::to($request->user())->send(new PasswordChange($user));
+            return redirect('/settings/home')->with('status', 'Password successfully updated!');
+        } else {
+            return redirect()->back()->with('error', 'There was an error with your request! Please try again.');
+        }
+
+    }
+
+    public function email()
+    {
+        return view('settings.email');
+    }
+
+    public function emailUpdate(Request $request)
+    {
+        $this->validate($request, [
+            'email'   => 'required|email|unique:users,email',
+        ]);
+        $changes = false;
+        $email = $request->input('email');
+        $user = Auth::user();
+        $profile = $user->profile;
+
+        $validate = config_cache('pixelfed.enforce_email_verification');
+
+        if ($user->email != $email) {
+            $changes = true;
+            $user->email = $email;
+
+            if ($validate) {
+                // auto verify admin email addresses
+                $user->email_verified_at = $user->is_admin == true ? now() : null;
+                // Prevent old verifications from working
+                EmailVerification::whereUserId($user->id)->delete();
+            }
+
+            $log = new AccountLog();
+            $log->user_id = $user->id;
+            $log->item_id = $user->id;
+            $log->item_type = 'App\User';
+            $log->action = 'account.edit.email';
+            $log->message = 'Email changed';
+            $log->link = null;
+            $log->ip_address = $request->ip();
+            $log->user_agent = $request->userAgent();
+            $log->save();
+        }
+
+        if ($changes === true) {
+            Cache::forget('user:account:id:'.$user->id);
+            $user->save();
+            $profile->save();
+
+            return redirect('/settings/email')->with('status', 'Email successfully updated!');
+        } else {
+            return redirect('/settings/email');
+        }
+
+    }
+
+    public function avatar()
+    {
+        return view('settings.avatar');
+    }
 }
 }

+ 29 - 56
resources/views/settings/email.blade.php

@@ -1,63 +1,36 @@
-@extends('layouts.app')
+@extends('settings.template')
 
 
-@section('content')
-@if (session('status'))
-    <div class="alert alert-primary px-3 h6 text-center">
-        {{ session('status') }}
-    </div>
-@endif
-@if ($errors->any())
-    <div class="alert alert-danger px-3 h6 text-center">
-            @foreach($errors->all() as $error)
-                <p class="font-weight-bold mb-1">{{ $error }}</p>
-            @endforeach
-    </div>
-@endif
-@if (session('error'))
-    <div class="alert alert-danger px-3 h6 text-center">
-        {{ session('error') }}
-    </div>
-@endif
-
-<div class="container">
-  <div class="col-12">
-    <div class="card shadow-none border mt-5">
-      <div class="card-body">
-        <div class="row">
-          <div class="col-12 p-3 p-md-5">
-			  <div class="title">
-			    <h3 class="font-weight-bold">Email Settings</h3>
-			  </div>
-			  <hr>
-			  <form method="post" action="{{route('settings.email')}}">
-			    @csrf
-			    <input type="hidden" class="form-control" name="name" value="{{Auth::user()->profile->name}}">
-			    <input type="hidden" class="form-control" name="username" value="{{Auth::user()->profile->username}}">
-			    <input type="hidden" class="form-control" name="website" value="{{Auth::user()->profile->website}}">
+@section('section')
 
 
-			    <div class="form-group">
-			      <label for="email" class="font-weight-bold">Email Address</label>
-			        <input type="email" class="form-control" id="email" name="email" placeholder="Email Address" value="{{Auth::user()->email}}">
-			        <p class="help-text small text-muted font-weight-bold">
-			          @if(Auth::user()->email_verified_at)
-			          <span class="text-success">Verified</span> {{Auth::user()->email_verified_at->diffForHumans()}}
-			          @else
-			          <span class="text-danger">Unverified</span> You need to <a href="/i/verify-email">verify your email</a>.
-			          @endif
-			        </p>
-			    </div>
-			    <div class="form-group row">
-			      <div class="col-12 text-right">
-			        <button type="submit" class="btn btn-primary font-weight-bold py-0 px-5">Submit</button>
-			      </div>
-			    </div>
-			  </form>
-          </div>
-        </div>
-      </div>
+<div class="d-flex justify-content-between align-items-center">
+    <div class="title d-flex align-items-center" style="gap: 1rem;">
+        <p class="mb-0"><a href="/settings/home"><i class="far fa-chevron-left fa-lg"></i></a></p>
+        <h3 class="font-weight-bold mb-0">Email Settings</h3>
     </div>
     </div>
-  </div>
 </div>
 </div>
 
 
+<hr>
+<form method="post" action="{{route('settings.email')}}">
+    @csrf
+    <input type="hidden" class="form-control" name="name" value="{{Auth::user()->profile->name}}">
+    <input type="hidden" class="form-control" name="username" value="{{Auth::user()->profile->username}}">
+    <input type="hidden" class="form-control" name="website" value="{{Auth::user()->profile->website}}">
 
 
+    <div class="form-group">
+        <label for="email" class="font-weight-bold">Email Address</label>
+        <input type="email" class="form-control" id="email" name="email" placeholder="Email Address" value="{{Auth::user()->email}}">
+        <p class="help-text small text-muted font-weight-bold">
+            @if(Auth::user()->email_verified_at)
+            <span class="text-success">Verified</span> {{Auth::user()->email_verified_at->diffForHumans()}}
+            @else
+            <span class="text-danger">Unverified</span> You need to <a href="/i/verify-email">verify your email</a>.
+            @endif
+        </p>
+    </div>
+    <div class="form-group row">
+        <div class="col-12 text-right">
+            <button type="submit" class="btn btn-primary font-weight-bold py-0 px-5">Submit</button>
+        </div>
+    </div>
+</form>
 @endsection
 @endsection

+ 77 - 76
resources/views/settings/partial/sidebar.blade.php

@@ -1,79 +1,80 @@
-	<div class="col-12 col-md-3">
-		<ul class="nav flex-column settings-nav py-3">
-			<li class="nav-item pl-3 {{request()->is('settings/home')?'active':''}}">
-				<a class="nav-link font-weight-light  text-muted" href="{{route('settings')}}">Account</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/accessibility')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.accessibility')}}">Accessibility</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/email')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.email')}}">Email</a>
-			</li>
-			@if(config('pixelfed.user_invites.enabled'))
-			<li class="nav-item pl-3 {{request()->is('settings/invites*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.invites')}}">Invites</a>
-			</li>
-			@endif
-			<li class="nav-item pl-3 {{request()->is('settings/media*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.media')}}">Media</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/notifications')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.notifications')}}">Notifications</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/password')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.password')}}">Password</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/privacy*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.privacy')}}">Privacy</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/relationships*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.relationships')}}">Relationships</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/security*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.security')}}">Security</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/timeline*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.timeline')}}">Timelines</a>
-			</li>
-			<li class="nav-item">
-				<hr>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('*import*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.import')}}">Import</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/data-export')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.dataexport')}}">Export</a>
-			</li>
+    <div class="col-12 col-md-3">
+        <ul class="nav flex-column settings-nav py-3">
+            <li class="nav-item pl-3 {{request()->is('settings/home')?'active':''}}">
+                <a class="nav-link font-weight-light  text-muted" href="{{route('settings')}}">Account</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/accessibility')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.accessibility')}}">Accessibility</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/email')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.email')}}">Email</a>
+            </li>
+            {{-- @if(config('pixelfed.user_invites.enabled'))
+            <li class="nav-item pl-3 {{request()->is('settings/invites*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.invites')}}">Invites</a>
+            </li>
+            @endif --}}
+            <li class="nav-item pl-3 {{request()->is('settings/media*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.media')}}">Media</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/notifications')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.notifications')}}">Notifications</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/password')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.password')}}">Password</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/privacy*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.privacy')}}">Privacy</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/relationships*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.relationships')}}">Relationships</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/security*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.security')}}">Security</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/timeline*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.timeline')}}">Timelines</a>
+            </li>
+            <li class="nav-item">
+                <hr>
+            </li>
 
 
-			@if(config_cache('pixelfed.oauth_enabled') == true)
-			<li class="nav-item">
-			<hr>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/applications')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.applications')}}">Applications</a>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/developers')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.developers')}}">Developers</a>
-			</li>
-			@endif
+            @if(config_cache('pixelfed.oauth_enabled') == true)
+            <li class="nav-item pl-3 {{request()->is('settings/applications')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.applications')}}">Applications</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/developers')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.developers')}}">Developers</a>
+            </li>
+            @endif
 
 
-			<li class="nav-item">
-			<hr>
-			</li>
-			<li class="nav-item pl-3 {{request()->is('settings/labs*')?'active':''}}">
-				<a class="nav-link font-weight-light text-muted" href="{{route('settings.labs')}}">Labs</a>
-			</li>
-		</ul>
-	</div>
+            <li class="nav-item pl-3 {{request()->is('*import*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.import')}}">Import</a>
+            </li>
+            <li class="nav-item pl-3 {{request()->is('settings/data-export')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.dataexport')}}">Export</a>
+            </li>
 
 
-	@push('styles')
-	<style type="text/css">
-		.settings-nav {
-			@media only screen and (min-width: 768px) {
-				border-right: 1px solid #dee2e6 !important
-			}
-			height: 100%;
-			flex-grow: 1;
-		}
-	</style>
-	@endpush
+            <li class="nav-item pl-3 {{request()->is('settings/labs*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.labs')}}">Labs</a>
+            </li>
+
+            @if(config('instance.parental_controls.enabled'))
+            <li class="nav-item pl-3 {{request()->is('settings/parental-controls*')?'active':''}}">
+                <a class="nav-link font-weight-light text-muted" href="{{route('settings.parental-controls')}}">Parental Controls</a>
+            </li>
+            @endif
+        </ul>
+    </div>
+
+    @push('styles')
+    <style type="text/css">
+        .settings-nav {
+            @media only screen and (min-width: 768px) {
+                border-right: 1px solid #dee2e6 !important
+            }
+            height: 100%;
+            flex-grow: 1;
+        }
+    </style>
+    @endpush