diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
index 4dff89a..f2b3384 100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
+use App\Models\UserSetting;
use App\Models\InviteKey;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
@@ -71,6 +72,7 @@ class RegisterController extends Controller
$invited_by = $this->getInviter($data['key']);
$this->updateKeyTable($data['key']);
+ UserSetting::create(['user_id' => User::all()->last()->id+1]);
return User::create([
'name' => $data['name'],
'email' => $data['email'],
diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php
index d1335c9..5287f93 100644
--- a/app/Http/Controllers/PageController.php
+++ b/app/Http/Controllers/PageController.php
@@ -29,12 +29,13 @@ class PageController extends Controller
{
$user = User::find($id);
$badges = DB::table('badges')->get();
- $friends = $user->getFriends($perPage = 3);
if (!$user) {
abort(404);
}
+ $friends = $user->getFriends($perPage = 3);
+
$data = [
'user' => $user,
'badges' => $badges,
@@ -89,24 +90,6 @@ class PageController extends Controller
return view('pages.users')->with('users', $users);
}
- public function settings()
- {
- return view('misc.settings');
- }
-
- public function change_settings(Request $request)
- {
- $request->validate([
- 'bio' => 'required|min:3|max:2000'
- ]);
-
- $user = Auth::user();
- $user->blurb = $request->bio;
- $user->save();
-
- return redirect()->back()->with('success', 'Your bio has been updated.');
- }
-
public function download()
{
return view('pages.download');
diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php
new file mode 100644
index 0000000..2b61128
--- /dev/null
+++ b/app/Http/Controllers/SettingController.php
@@ -0,0 +1,119 @@
+activeSetting;
+ $changeMsg = null;
+ $user = Auth::user();
+ $userSetting = Auth::user()->settings;
+
+ switch ($option) {
+ case 1:
+ $request->validate([
+ 'name' => ['required', 'string', 'min:3', 'max:20', 'unique:users', 'regex:/^(?!^\.)(?!.*[-_.]$)[a-zA-Z0-9-_. ]+$/'],
+ 'username_change_confirm' => 'accepted'
+ ]);
+
+ if (Auth::user()->settings->changed_name) {
+ return redirect()->back()->withErrors(['You have already changed your username!']);
+ }
+
+ $oldUsername = $user->name;
+
+ $user->name = $request->name;
+ $user->save();
+
+ $userSetting->old_name = $oldUsername;
+ $userSetting->changed_name = true;
+ $userSetting->save();
+
+ $changeMsg = "Your username has been changed.";
+ break;
+ case 2:
+ $request->validate([
+ 'email' => ['required', 'string', 'email', 'max:255', 'unique:users', 'confirmed', 'email:rfc,dns'],
+ ]);
+
+ $user->email = $request->email;
+ $user->save();
+
+ $changeMsg = "Your email has been changed.";
+ break;
+ case 3:
+ $request->validate([
+ 'dob' => ['required', 'date_format:Y-m-d', 'before:today', 'after:01/01/1970'],
+ ]);
+
+ $user->dob = $request->dob;
+ $user->save();
+
+ $changeMsg = "Your date of birth has been changed.";
+ break;
+ case 4:
+ $request->validate([
+ 'password' => ['required', 'string', 'min:8', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/'],
+ ]);
+
+ if (!Hash::check($request->old_password, Auth::user()->password)) {
+ return redirect()->back()->withErrors(['Your old password is incorrect!']);
+ }
+
+ $user->password = Hash::make($request->password);
+ $user->save();
+
+ $changeMsg = "Your password has been changed.";
+ break;
+ case 5:
+ $request->validate([
+ 'date_preference' => ['required', 'string', 'in:d/m/Y,m/d/Y,Y/d/m'],
+ ]);
+
+ $userSetting->date_preference = $request->date_preference;
+ $userSetting->save();
+
+ $changeMsg = "Your date display preference has been changed.";
+ break;
+ case 6:
+ $request->validate([
+ 'time_preference' => ['required', 'string', 'in:0,1'],
+ ]);
+
+ $userSetting->time_preference_24hr = $request->time_preference;
+ $userSetting->save();
+
+ $changeMsg = "Your time display preference has been changed.";
+ break;
+ default:
+ abort(404);
+ }
+
+ return redirect()->back()->with('change', $changeMsg);
+ }
+
+ public function change_bio(Request $request)
+ {
+ $request->validateWithBag('bio_form', [
+ 'bio' => 'required|min:3|max:2000'
+ ]);
+
+ $user = Auth::user();
+ $user->blurb = $request->bio;
+ $user->save();
+
+ return redirect()->back()->with('success', 'Your bio has been updated.');
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
index e51a399..a2b4b03 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -65,4 +65,9 @@ class User extends Authenticatable
{
return $this->hasMany('App\Models\FeedPost');
}
+
+ public function settings()
+ {
+ return $this->hasOne('App\Models\UserSetting');
+ }
}
diff --git a/app/Models/UserSetting.php b/app/Models/UserSetting.php
new file mode 100644
index 0000000..0abcab9
--- /dev/null
+++ b/app/Models/UserSetting.php
@@ -0,0 +1,35 @@
+
+ */
+ protected $fillable = [
+ 'user_id',
+ 'old_name',
+ 'changed_name',
+ 'date_preference',
+ 'time_preference_24hr',
+ 'theme',
+ 'message_preference',
+ ];
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\User');
+ }
+}
diff --git a/database/migrations/2022_07_19_083303_create_user_settings_table.php b/database/migrations/2022_07_19_083303_create_user_settings_table.php
new file mode 100644
index 0000000..ef622b3
--- /dev/null
+++ b/database/migrations/2022_07_19_083303_create_user_settings_table.php
@@ -0,0 +1,38 @@
+id();
+ $table->integer('user_id');
+ $table->string('old_name')->nullable();
+ $table->boolean('changed_name')->default(false);
+ $table->string('date_preference')->default('d/m/Y');
+ $table->boolean('time_preference_24hr')->default(false);
+ $table->integer('theme')->default(1);
+ $table->integer('message_preference')->default(2);
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('user_settings');
+ }
+}
diff --git a/public/js/settings.js b/public/js/settings.js
new file mode 100644
index 0000000..b8a75f7
--- /dev/null
+++ b/public/js/settings.js
@@ -0,0 +1,88 @@
+var active = 0;
+
+function openPopup(id) {
+ document.querySelector('.popupcontainer').removeAttribute('id');
+
+ switch (id) {
+ case 1:
+ active = 1;
+ setActiveSetting(1);
+ document.querySelector('.popup .username_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change Username";
+ document.querySelector('.popup .warningtext').innerHTML = "You can only change your username once.";
+ document.querySelector('.popup #desc').innerHTML = "Your new username must be from 3-20 characters long.
Spaces, periods, and underscores allowed.";
+ break;
+ case 2:
+ active = 2;
+ setActiveSetting(2);
+ document.querySelector('.popup .email_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change E-Mail";
+ document.querySelector('.popup .warningtext').innerHTML = null;
+ document.querySelector('.popup #desc').innerHTML = "Enter your new E-Mail below as well as confirming it.
E-Mails are primarily used to reset passwords.";
+ break;
+ case 3:
+ active = 3;
+ setActiveSetting(3);
+ document.querySelector('.popup .dob_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change Date of Birth";
+ document.querySelector('.popup .warningtext').innerHTML = null;
+ document.querySelector('.popup #desc').innerHTML = null;
+ break;
+ case 4:
+ active = 4;
+ setActiveSetting(4);
+ document.querySelector('.popup .password_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change Password";
+ document.querySelector('.popup .warningtext').innerHTML = "Your password must follow ARCHBLOX's format.";
+ document.querySelector('.popup #desc').innerHTML = "Firstly, you need to remember your old password.
Your new password must include:
";
+ break;
+ case 5:
+ active = 5;
+ setActiveSetting(5);
+ document.querySelector('.popup .date_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change Date Preference";
+ document.querySelector('.popup .warningtext').innerHTML = null;
+ document.querySelector('.popup #desc').innerHTML = "Change the way you see dates on the site.
Default preference is the Australian format (dd/mm/yyyy)";
+ break;
+ case 6:
+ active = 6;
+ setActiveSetting(6);
+ document.querySelector('.popup .time_change').removeAttribute('id');
+ document.querySelector('.popup #heading').innerHTML = "Change Time Preference";
+ document.querySelector('.popup .warningtext').innerHTML = null;
+ document.querySelector('.popup #desc').innerHTML = "Choose whether 12 hour or 24 hour time is displayed on the site.";
+ break;
+ default:
+ console.error('Invalid setting.');
+ }
+}
+
+function closePopup() {
+ document.querySelector('.popupcontainer').setAttribute("id", "invisible");
+ switch (active) {
+ case 1:
+ document.querySelector('.popup .username_change').setAttribute("id", "invisible");
+ break;
+ case 2:
+ document.querySelector('.popup .email_change').setAttribute("id", "invisible");
+ break;
+ case 3:
+ document.querySelector('.popup .dob_change').setAttribute("id", "invisible");
+ break;
+ case 4:
+ document.querySelector('.popup .password_change').setAttribute("id", "invisible");
+ break;
+ case 5:
+ document.querySelector('.popup .date_change').setAttribute("id", "invisible");
+ break;
+ case 6:
+ document.querySelector('.popup .time_change').setAttribute("id", "invisible");
+ break;
+ default:
+ console.error('Invalid setting.');
+ }
+}
+
+function setActiveSetting(id) {
+ document.querySelector('.popup #activeSetting').setAttribute("value", id);
+}
\ No newline at end of file
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index c7d1e4d..dda573c 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -43,8 +43,13 @@
"{{ $post->status }}"
-{{ $post->created_at->format('F d, Y h:i A') }}
++ "{{ $post->status }}"
+ @if (!Auth::user()->settings->time_preference_24hr) +{{ $post->created_at->format('F d, Y h:i A') }}
+ @else +{{ $post->created_at->format('F d, Y H:i') }}
+ @endifWARNING TEXT
-DESCRIPTION OF THE SETTING YOU ARE ABOUT TO CHANGE
- -