diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 3f8ef987..bb767737 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -22,6 +22,7 @@ use App\Http\Controllers\Settings\{ SecuritySettings }; use App\Jobs\DeletePipeline\DeleteAccountPipeline; +use App\Jobs\MediaPipeline\MediaSyncLicensePipeline; class SettingsController extends Controller { @@ -274,11 +275,21 @@ class SettingsController extends Controller $license = $request->input('default'); $sync = $request->input('sync') == 'on'; $media_descriptions = $request->input('media_descriptions') == 'on'; + $uid = $request->user()->id; - $setting = UserSetting::whereUserId($request->user()->id)->firstOrFail(); + $setting = UserSetting::whereUserId($uid)->firstOrFail(); $compose = json_decode($setting->compose_settings, true); $changed = false; + if($sync) { + $key = 'pf:settings:mls_recently:'.$uid; + if(Cache::get($key) == 2) { + $msg = 'You can only sync licenses twice per 24 hours. Try again later.'; + return redirect(route('settings')) + ->with('error', $msg); + } + } + if(!isset($compose['default_license']) || $compose['default_license'] !== $license) { $compose['default_license'] = (int) $license; $changed = true; @@ -295,6 +306,13 @@ class SettingsController extends Controller Cache::forget('profile:compose:settings:' . $request->user()->id); } + if($sync) { + $val = Cache::has($key) ? 2 : 1; + Cache::put($key, $val, 86400); + MediaSyncLicensePipeline::dispatch($uid, $license); + return redirect(route('settings'))->with('status', 'Media licenses successfully synced! It may take a few minutes to take effect for every post.'); + } + return redirect(route('settings'))->with('status', 'Media settings successfully updated!'); } diff --git a/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php b/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php new file mode 100644 index 00000000..1884bd78 --- /dev/null +++ b/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php @@ -0,0 +1,47 @@ +userId = $userId; + $this->licenseId = $licenseId; + } + + public function handle() + { + $licenseId = $this->licenseId; + + if(!$licenseId || !$this->userId) { + return 1; + } + + Media::whereUserId($this->userId) + ->chunk(100, function($medias) use($licenseId) { + foreach($medias as $media) { + $media->license = $licenseId; + $media->save(); + Cache::forget('status:transformer:media:attachments:'. $media->status_id); + StatusService::del($media->status_id); + } + }); + } + +} diff --git a/resources/views/settings/media.blade.php b/resources/views/settings/media.blade.php index 4375ecd9..a37c05bf 100644 --- a/resources/views/settings/media.blade.php +++ b/resources/views/settings/media.blade.php @@ -26,7 +26,7 @@
-

Update existing posts with your new default license. You can sync once every 24 hours.

+

Update existing posts with your new default license. You can sync twice every 24 hours.
License changes may not be reflected on remote servers.