From 497cd7adee7a43da4e4c5b5a06930cbcc43e2fd1 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 5 Dec 2022 15:35:14 +0100 Subject: [PATCH] wip #5625 @2 --- app/Fields/CubedesignersTeamMember.php | 8 +++ app/Models/Base/ToolboxHRModel.php | 23 ++++++++ app/Models/Base/ToolboxModel.php | 8 +-- app/Models/CubedesignersTeamMember.php | 24 ++++++++ app/Models/Quiz.php | 2 +- ...CubedesignersEmails.php => TeamEmails.php} | 12 ++-- app/Models/TeamLeave.php | 59 +++++++++++++++++++ app/Models/TeamOvertime.php | 50 ++++++++++++++++ .../base/inc/sidebar_content.blade.php | 17 +++++- routes/backpack/custom.php | 41 ++++++++----- 10 files changed, 213 insertions(+), 31 deletions(-) create mode 100644 app/Fields/CubedesignersTeamMember.php create mode 100644 app/Models/Base/ToolboxHRModel.php create mode 100644 app/Models/CubedesignersTeamMember.php rename app/Models/{CubedesignersEmails.php => TeamEmails.php} (94%) create mode 100644 app/Models/TeamLeave.php create mode 100644 app/Models/TeamOvertime.php diff --git a/app/Fields/CubedesignersTeamMember.php b/app/Fields/CubedesignersTeamMember.php new file mode 100644 index 000000000..0e4a5e616 --- /dev/null +++ b/app/Fields/CubedesignersTeamMember.php @@ -0,0 +1,8 @@ +hasPermissionTo(static::$_permissionBase . ':admin')) { + return; + } + if (null === static::$_ownerAttribute) { + return; + } + $builder->where(static::$_ownerAttribute, backpack_user()->id); + } +} diff --git a/app/Models/Base/ToolboxModel.php b/app/Models/Base/ToolboxModel.php index 2da7996da..e14fc23b8 100644 --- a/app/Models/Base/ToolboxModel.php +++ b/app/Models/Base/ToolboxModel.php @@ -53,7 +53,7 @@ class ToolboxModel extends CubistMagicAbstractModel return true; } - public function addOwnerField($tab = null) + public function addOwnerField($options = []) { $fieldSettings = [ 'name' => static::$_ownerAttribute, @@ -67,10 +67,8 @@ class ToolboxModel extends CubistMagicAbstractModel 'default' => Auth::id(), 'non_default_tracking' => false, ]; - if (null !== $tab) { - $fieldSettings['tab'] = $tab; - } - $this->addField($fieldSettings); + + $this->addField(array_merge($fieldSettings, $options)); } public function addColumnDateFields($tab = null, $type = HiddenDatetime::class) diff --git a/app/Models/CubedesignersTeamMember.php b/app/Models/CubedesignersTeamMember.php new file mode 100644 index 000000000..fdf20b9e6 --- /dev/null +++ b/app/Models/CubedesignersTeamMember.php @@ -0,0 +1,24 @@ +where('company', 7); +// $builder->orderBy('enabled', 'ASC'); +// $builder->orderBy('id', 'ASC'); +// +// }); + + static::observe(new MagicObserver); + } + +} diff --git a/app/Models/Quiz.php b/app/Models/Quiz.php index 25e6f65f9..f67f4673a 100644 --- a/app/Models/Quiz.php +++ b/app/Models/Quiz.php @@ -103,7 +103,7 @@ class Quiz extends ToolboxModel 'tab' => __('Projet')]); $this->addColumnDateFields(__('Projet')); - $this->addOwnerField(__('Projet')); + $this->addOwnerField(['tab' => __('Projet')]); $this->addField(['name' => 'title', 'label' => __('Titre du quiz'), diff --git a/app/Models/CubedesignersEmails.php b/app/Models/TeamEmails.php similarity index 94% rename from app/Models/CubedesignersEmails.php rename to app/Models/TeamEmails.php index 6b0726bf9..c07906312 100644 --- a/app/Models/CubedesignersEmails.php +++ b/app/Models/TeamEmails.php @@ -9,11 +9,11 @@ use Cubist\Net\Util; use Cubist\Util\Files\Files; use Cubist\Util\Str; -class CubedesignersEmails extends CubistMagicAbstractModel +class TeamEmails extends CubistMagicAbstractModel { - protected $table = 'cubedesigners_emails'; + protected $table = 'team_emails'; - protected $_options = ['name' => 'cubemails', + protected $_options = ['name' => 'team-emails', 'singular' => 'paramètre', 'plural' => 'paramètres', 'oneinstance' => true]; @@ -72,11 +72,7 @@ class CubedesignersEmails extends CubistMagicAbstractModel } if ($m['password'] !== '' && !preg_match('/^\{([A-Z0-9-]+)\}\$\d/', $m['password'])) { $p = $m['password']; - $cmd = "export PATH=\$PATH:/usr/bin;echo $(doveadm pw -s SHA512-CRYPT -u $email -p $p 2>/dev/null)"; - $password = $m['password'] = trim(`$cmd`); - if (!$password) { - dd($cmd, $m['password']); - } + $m['password'] = $password = "{SHA512-CRYPT}" . crypt($p, "$6$" . substr(sha1(rand()), 0, 16)); } $accounts[$m['mailbox']] = $password; $mailboxes[$k] = $m; diff --git a/app/Models/TeamLeave.php b/app/Models/TeamLeave.php new file mode 100644 index 000000000..3ed6e8641 --- /dev/null +++ b/app/Models/TeamLeave.php @@ -0,0 +1,59 @@ + 'team-leave', + 'singular' => 'absence', + 'plural' => 'congés et absence', + 'oneinstance' => false]; + + static $_permissionBase = 'team-leave'; + + protected $_enableClone = false; + protected $_enableDeletion = true; + + + public function setFields() + { + parent::setFields(); + + try { + $bid = backpack_user()->id; + } catch (\Exception $e) { + $bid = null; + } + $this->addField('worker', \App\Fields\CubedesignersTeamMember::class, __('Nom'), ['column' => true, 'default' => $bid, 'can_hidden' => self::$_permissionBase . ':admin']); + $this->addField('type', SelectFromArray::class, __('Type'), ['options' => + [ + 'paid_leave' => __('Congé payé'), + 'manager_leave' => __('Congé gérant'), + 'sick_leave' => __('Arrêt maladie'), + 'unpaid_leave' => __('Congé sans solde'), + 'parenthood_leave' => __('Congé parental'), + 'family_event_leave' => __('Congé pour événement familial'), + 'sick_child_leave' => __('Congé pour enfant malade'), + 'recovery_day' => __('Jour de récupération'), + 'partial_activity' => __('Activité partielle'), + ] + , 'column' => true, 'default' => 'paid_leave', 'allows_null' => false]); + $this->addOwnerField(['label' => __('Ajouté par'), 'column' => false, 'column_attribute' => 'name',]); + $this->addField('start_day', Date::class, __('Début'), ['column' => true]); + $this->addField('end_day', Date::class, __('Fin'), ['column' => true, 'hint' => __('Inclus')]); + $this->addField('nb_days', Number::class, __('Durée'), ['column' => true, 'suffix' => __('jours')]); + $this->addField('accepted', Checkbox::class, __('Accepté'), ['column' => true, 'default' => true, 'can' => self::$_permissionBase . ':admin']); + $this->addField('public', Checkbox::class, __('Public'), ['column' => true, 'default' => true, 'hint' => __('Si activé, apparaît dans le planning des vacances'), 'can' => self::$_permissionBase . ':admin']); + $this->addField('recorded_month', Date::class, __('Comptabilisé'), ['column' => true, 'column_format' => 'YYYY-MM', 'can' => self::$_permissionBase . ':admin']); + $this->addField('comment', Text::class, __('Commentaire'), ['column' => true, 'can' => self::$_permissionBase . ':admin']); + } +} diff --git a/app/Models/TeamOvertime.php b/app/Models/TeamOvertime.php new file mode 100644 index 000000000..efe463436 --- /dev/null +++ b/app/Models/TeamOvertime.php @@ -0,0 +1,50 @@ + 'team-overtime', + 'singular' => 'heures supplémentaires', + 'plural' => 'heures supplémentaires', + 'oneinstance' => false]; + + static $_permissionBase = 'team-overtime'; + + protected $_enableClone = false; + protected $_enableDeletion = true; + + + public function setFields() + { + parent::setFields(); + + try { + $bid = backpack_user()->id; + } catch (\Exception $e) { + $bid = null; + } + $this->addField('worker', \App\Fields\CubedesignersTeamMember::class, __('Nom'), ['column' => true, 'default' => $bid, 'can_hidden' => self::$_permissionBase . ':admin']); + $this->addField('type', SelectFromArray::class, __('Type'), ['options' => + [ + 'supplementary_hours' => __('Heures supplémentaires'), + 'complementary_hours' => __('Heures complémentaires'), + ] + , 'column' => true, 'default' => 'supplementary_hours', 'allows_null' => false]); + $this->addOwnerField(['label' => __('Ajouté par'), 'column' => false, 'column_attribute' => 'name']); + $this->addField('day', Date::class, __('Semaine'), ['column' => true]); + $this->addField('nb_hours', Number::class, __('Nombre'), ['column' => true, 'suffix' => __('heures')]); + $this->addField('accepted', Checkbox::class, __('Accepté'), ['column' => true, 'default' => true, 'can' => self::$_permissionBase . ':admin']); + $this->addField('recorded_month', Date::class, __('Comptabilisé'), ['column' => true, 'column_format' => 'YYYY-MM', 'can' => self::$_permissionBase . ':admin']); + $this->addField('comment', Text::class, __('Commentaire'), ['column' => true, 'can' => self::$_permissionBase . ':admin']); + } +} diff --git a/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php b/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php index 89535bd57..c8e1be1ec 100644 --- a/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php +++ b/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php @@ -123,17 +123,30 @@ @endcan -@canany(['extranet:manage_team','extranet:manage_emails']) +@canany(['team-leave:read','team-overtime:read','extranet:manage_emails'])
  • {{__('Équipe')}}
  • @endcan diff --git a/routes/backpack/custom.php b/routes/backpack/custom.php index a6de6bff7..651ddff66 100644 --- a/routes/backpack/custom.php +++ b/routes/backpack/custom.php @@ -1,23 +1,34 @@ config('backpack.base.route_prefix', 'admin'), + 'prefix' => config('backpack.base.route_prefix', 'admin'), 'middleware' => ['web', config('backpack.base.middleware_key', 'admin')], - 'namespace' => 'App\Http\Controllers\Admin', + 'namespace' => 'App\Http\Controllers\Admin', ], function () { // custom admin routes try { - Route::crud('company', 'CompanyCrudController'); - Route::crud('fluidbook-publication', 'FluidbookPublicationCrudController'); - Route::crud('fluidbook-quote', 'FluidbookQuoteCrudController'); - Route::crud('fluidbook-theme', 'FluidbookThemeCrudController'); - Route::crud('locale', 'LocaleCrudController'); - Route::crud('settings', 'SettingsCrudController'); - Route::crud('signature', 'SignatureCrudController'); - Route::crud('toolbox-translate', 'ToolboxTranslateCrudController'); - Route::crud('quiz', 'QuizCrudController'); - Route::crud('quizatttempt', 'QuizatttemptCrudController'); - Route::crud('quiztranslation', 'QuiztranslationCrudController'); - Route::crud('users', 'UsersCrudController'); - } catch (\Throwable $e) { + Route::crud('elearning-media', 'ElearningMediaCrudController'); + Route::crud('toolbox-translate', 'ToolboxTranslateCrudController'); + Route::crud('quiztranslation', 'QuiztranslationCrudController'); + Route::crud('team-emails', 'TeamEmailsCrudController'); + Route::crud('fluidbook-quote', 'FluidbookQuoteCrudController'); + Route::crud('locale', 'LocaleCrudController'); + Route::crud('tool-sprite', 'ToolSpriteCrudController'); + Route::crud('users', 'UsersCrudController'); + Route::crud('users', 'UsersCrudController'); + Route::crud('quiz', 'QuizCrudController'); + Route::crud('page', 'PageCrudController'); + Route::crud('settings', 'SettingsCrudController'); + Route::crud('fluidbook-collection', 'FluidbookCollectionCrudController'); + Route::crud('fluidbook-document', 'FluidbookDocumentCrudController'); + Route::crud('fluidbook-publication', 'FluidbookPublicationCrudController'); + Route::crud('quizatttempt', 'QuizatttemptCrudController'); + Route::crud('elearning-package', 'ElearningPackageCrudController'); + Route::crud('fluidbook-theme', 'FluidbookThemeCrudController'); + Route::crud('company', 'CompanyCrudController'); + Route::crud('signature', 'SignatureCrudController'); + Route::crud('fluidbook-iconset', 'FluidbookIconsetCrudController'); + Route::crud('users', 'UsersCrudController'); + Route::crud('fluidbook-translate', 'FluidbookTranslateCrudController'); + } catch(\Throwable $e) { } }); -- 2.39.5