From caf3abb594c011f5cd52f0d8c9b26c46bd5c5c40 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Fri, 16 Feb 2024 11:51:09 +0100 Subject: [PATCH] wait #6736 @1 --- .../Controllers/Admin/ToolsController.php | 5 ++ app/Models/User.php | 46 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/app/Http/Controllers/Admin/ToolsController.php b/app/Http/Controllers/Admin/ToolsController.php index 1cc0f9175..d372661af 100644 --- a/app/Http/Controllers/Admin/ToolsController.php +++ b/app/Http/Controllers/Admin/ToolsController.php @@ -16,6 +16,8 @@ use App\Http\Controllers\Admin\Operations\Tools\FluidbookReplicate; use App\Http\Controllers\Admin\Operations\Tools\GitReposCreate; use App\Http\Controllers\Admin\Operations\Tools\ImagesResizer; use App\Http\Controllers\Admin\Operations\Tools\JSON2Excel; +use App\Http\Controllers\Admin\Operations\Tools\PDF2SVGOperation; +use App\Http\Controllers\Admin\Operations\Tools\SASSCompiler; use App\Http\Controllers\Admin\Operations\Tools\SVGCleaner; use App\Http\Controllers\Admin\Operations\Tools\TextToSpeech; use App\Http\Controllers\Controller; @@ -36,6 +38,9 @@ class ToolsController extends Controller use SVGCleaner; use FluidbookReferencesURL; use FluidbookReplicate; + use Excel2JSON; + use SASSCompiler; + use PDF2SVGOperation; protected function index($tool, $args = '') { diff --git a/app/Models/User.php b/app/Models/User.php index 7d666b47f..14a218daa 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,7 +2,12 @@ namespace App\Models; +use App\Jobs\RefreshUsersTree; use Creativeorange\Gravatar\Facades\Gravatar; +use Cubedesigners\UserDatabase\Jobs\ApplyPermissionsToUsers; +use Cubedesigners\UserDatabase\Permissions; +use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; +use Illuminate\Support\Facades\Artisan; use NotificationChannels\WebPush\HasPushSubscriptions; class User extends \Cubedesigners\UserDatabase\Models\User @@ -34,4 +39,45 @@ class User extends \Cubedesigners\UserDatabase\Models\User } return str_replace('.jpg', '', $res); } + + public function onDeleting(): bool + { + $res = parent::onDeleting(); + + $formerId = $this->id; + $first = static::withoutGlobalScopes()->where('company', $this->company)->whereNot('id', $this->id)->orderBy('id', 'ASC')->first(); + if (null === $first) { + abort(403, __('Impossible de supprimer cet utilisateur, une entreprise ne peut être laissée sans utilisateur')); + } + + static::mergeUsers($formerId, $first->id); + return $res; + } + + public static function mergeUsers($from, $to) + { + $models = [ + ELearningMedia::class => ['owner'], + ELearningPackage::class => ['owner'], + FluidbookCollection::class => ['owner'], + FluidbookDocument::class => ['owner'], + FluidbookIconset::class => ['owner'], + FluidbookPublication::class => ['owner'], + FluidbookQuote::class => ['user', 'admin', 'reseller'], + FluidbookTheme::class => ['owner'], + Quiz::class => ['owner'], + QuizTheme::class => ['owner'], + Company::class => ['admin'], + ]; + foreach ($models as $class => $attributes) { + /** @var $class CubistMagicAbstractModel */ + foreach ($attributes as $attribute) { + $class::withoutGlobalScopes()->where($attribute, $from)->update([$attribute => $to]); + } + } + + RefreshUsersTree::dispatchSync(); + ApplyPermissionsToUsers::dispatch(); + } } + -- 2.39.5