SettingsController.php 4.2 KB

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