SettingsController.php 4.2 KB

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