SettingsController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\AccountLog;
  4. use App\Following;
  5. use App\Report;
  6. use App\UserFilter;
  7. use Auth, Cookie, DB, Cache, Purify;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Settings\{
  11. ExportSettings,
  12. HomeSettings,
  13. PrivacySettings,
  14. SecuritySettings
  15. };
  16. use App\Jobs\DeletePipeline\DeleteAccountPipeline;
  17. class SettingsController extends Controller
  18. {
  19. use ExportSettings,
  20. HomeSettings,
  21. PrivacySettings,
  22. SecuritySettings;
  23. public function __construct()
  24. {
  25. $this->middleware('auth');
  26. }
  27. public function accessibility()
  28. {
  29. $settings = Auth::user()->settings;
  30. return view('settings.accessibility', compact('settings'));
  31. }
  32. public function accessibilityStore(Request $request)
  33. {
  34. $settings = Auth::user()->settings;
  35. $fields = [
  36. 'compose_media_descriptions',
  37. 'reduce_motion',
  38. 'optimize_screen_reader',
  39. 'high_contrast_mode',
  40. 'video_autoplay',
  41. ];
  42. foreach ($fields as $field) {
  43. $form = $request->input($field);
  44. if ($form == 'on') {
  45. $settings->{$field} = true;
  46. } else {
  47. $settings->{$field} = false;
  48. }
  49. $settings->save();
  50. }
  51. return redirect(route('settings.accessibility'))->with('status', 'Settings successfully updated!');
  52. }
  53. public function notifications()
  54. {
  55. return view('settings.notifications');
  56. }
  57. public function applications()
  58. {
  59. return view('settings.applications');
  60. }
  61. public function dataImport()
  62. {
  63. return view('settings.import.home');
  64. }
  65. public function dataImportInstagram()
  66. {
  67. return view('settings.import.instagram.home');
  68. }
  69. public function developers()
  70. {
  71. return view('settings.developers');
  72. }
  73. public function removeAccountTemporary(Request $request)
  74. {
  75. return view('settings.remove.temporary');
  76. }
  77. public function removeAccountTemporarySubmit(Request $request)
  78. {
  79. $user = Auth::user();
  80. $profile = $user->profile;
  81. $user->status = 'disabled';
  82. $profile->status = 'disabled';
  83. $user->save();
  84. $profile->save();
  85. Auth::logout();
  86. Cache::forget('profiles:private');
  87. return redirect('/');
  88. }
  89. public function removeAccountPermanent(Request $request)
  90. {
  91. if(config('pixelfed.account_deletion') == false) {
  92. abort(404);
  93. }
  94. return view('settings.remove.permanent');
  95. }
  96. public function removeAccountPermanentSubmit(Request $request)
  97. {
  98. if(config('pixelfed.account_deletion') == false) {
  99. abort(404);
  100. }
  101. $user = Auth::user();
  102. if($user->is_admin == true) {
  103. return abort(400, 'You cannot delete an admin account.');
  104. }
  105. $profile = $user->profile;
  106. $ts = Carbon::now()->addMonth();
  107. $user->status = 'delete';
  108. $profile->status = 'delete';
  109. $user->delete_after = $ts;
  110. $profile->delete_after = $ts;
  111. $user->save();
  112. $profile->save();
  113. Cache::forget('profiles:private');
  114. Auth::logout();
  115. DeleteAccountPipeline::dispatch($user)->onQueue('high');
  116. return redirect('/');
  117. }
  118. public function requestFullExport(Request $request)
  119. {
  120. $user = Auth::user();
  121. return view('settings.export.show');
  122. }
  123. public function reportsHome(Request $request)
  124. {
  125. $profile = Auth::user()->profile;
  126. $reports = Report::whereProfileId($profile->id)->orderByDesc('created_at')->paginate(10);
  127. return view('settings.reports', compact('reports'));
  128. }
  129. public function metroDarkMode(Request $request)
  130. {
  131. $this->validate($request, [
  132. 'mode' => 'required|string|in:light,dark'
  133. ]);
  134. $mode = $request->input('mode');
  135. if($mode == 'dark') {
  136. $cookie = Cookie::make('dark-mode', true, 43800);
  137. } else {
  138. $cookie = Cookie::forget('dark-mode');
  139. }
  140. return response()->json([200])->cookie($cookie);
  141. }
  142. }