src/EventListener/UserRoleEventListener.php line 102

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Tool\Folder;
  4. use Carbon\Carbon;
  5. use Pimcore\Event\Model\DataObjectEvent;
  6. use Pimcore\Event\Model\ElementEventInterface;
  7. use Pimcore\Event\Model\UserRoleEvent;
  8. use Pimcore\Log\Simple;
  9. use Pimcore\Model\DataObject\User;
  10. use Pimcore\Model\WebsiteSetting;
  11. use Pimcore\Tool\Authentication;
  12. class UserRoleEventListener
  13. {
  14.     private $needCreateUserManually true;
  15.     public function onUserPreAdd(UserRoleEvent $userRoleEvent): void
  16.     {
  17.         if($userRoleEvent->getUserRole()->getType() != "role"){
  18.             $this->disableCreateUserManually();
  19.             $this->createObjectUser($userRoleEvent);
  20.         }
  21.     }
  22.     public function onUserPreUpdate(UserRoleEvent $userRoleEvent): void
  23.     {
  24.         if($userRoleEvent->getUserRole()->getType() != "role"){
  25.             $this->createObjectUser($userRoleEvent);
  26.         }
  27.     }
  28.     public function onUserPostDelete(UserRoleEvent $userRoleEvent): void
  29.     {
  30.         if($userRoleEvent->getUserRole()->getType() != "role"){
  31.             $this->deleteObjectUser($userRoleEvent);
  32.         }
  33.     }
  34.     private function createObjectUser(UserRoleEvent $userRoleEvent): void
  35.     {
  36.         if (!class_exists(\Pimcore\Model\DataObject\User::class)) {
  37.             return;
  38.         }
  39.         $pimcoreUserId $userRoleEvent->getUserRole()->getId();
  40.         $firstName $userRoleEvent->getUserRole()->getFirstName();
  41.         $lastName $userRoleEvent->getUserRole()->getLastName();
  42.         $userName $userRoleEvent->getUserRole()->getUserName();
  43.         $user User::getByNip($userName1);
  44.         $folder Folder::checkAndCreate('User');
  45.         $user $user ?: new User();
  46.         $user->setParent($folder);
  47.         $user->setKey($userName);
  48.         $user->setName(sprintf('%s %s'$firstName$lastName));
  49.         $user->setPimcoreUserId($pimcoreUserId);
  50.         $user->setNip($userName);
  51.         if (!$user->getDivisionId()) {
  52.             $division $this->getDefaultDivision();
  53.             if ($division)
  54.                 $user->setDivisionId($division);
  55.         }
  56.         $user->setUserOwner($userRoleEvent->getUserRole()->getId());
  57.         $user->setPublished(true);
  58.         try {
  59.             $user->save();
  60.         } catch (\Exception $exception) {
  61.             $logName sprintf('USER_ROLE_EVENT_LISTENER_%s'Carbon::now()->format('d-m-Y'));
  62.             Simple::log($logName$exception->getMessage());
  63.         }
  64.     }
  65.     private function deleteObjectUser(UserRoleEvent $userRoleEvent): void
  66.     {
  67.         $pimcoreUserId $userRoleEvent->getUserRole()->getId();
  68.         $user User::getByPimcoreUserId($pimcoreUserId1);
  69.         if(!empty($user)){
  70.             try {
  71.                 $user->delete();
  72.             } catch (\Exception $exception) {
  73.                 $logName sprintf('USER_ROLE_EVENT_LISTENER_%s'Carbon::now()->format('d-m-Y'));
  74.                 Simple::log($logName$exception->getMessage());
  75.             }
  76.         }
  77.     }
  78.     /**
  79.      * auto create model user when dataobject user is created
  80.      */
  81.     public function onPostAdd(ElementEventInterface $e): void
  82.     {
  83.         if (
  84.             $e instanceof DataObjectEvent
  85.             && method_exists($e->getObject(), 'getClassName')
  86.             && $e->getObject() instanceof \Pimcore\Model\DataObject\User
  87.         ) {
  88.             /** @var \Pimcore\Model\DataObject\User */
  89.             $object $e->getObject();
  90.             try {
  91.                 $key $object->getKey();
  92.                 $object->setNip($key);
  93.                 $object->save();
  94.                 
  95.                 if ($this->needCreateUserManually) {
  96.                     $defaultPassword getenv('USER_DEFAULT_PASSWORD') == '' 
  97.                         'salt654321' getenv('USER_DEFAULT_PASSWORD');
  98.                     \Pimcore\Model\User::create([
  99.                         "parentId" => 0,
  100.                         "username" => $key,
  101.                         "password" => Authentication::getPasswordHash($key$defaultPassword),
  102.                         "hasCredentials" => true,
  103.                         "active" => true
  104.                     ]);
  105.                 }
  106.                 
  107.             } catch (\Exception $e) {
  108.                 $logName sprintf('USER_ROLE_EVENT_LISTENER_%s'Carbon::now()->format('d-m-Y'));
  109.                 Simple::log($logName"postAddDO|".$e->getMessage());
  110.             }
  111.         }
  112.     }
  113.     public function objectOnPostUpdate(ElementEventInterface $e): bool
  114.     {
  115.         if (
  116.             $e instanceof DataObjectEvent
  117.             && method_exists($e->getObject(), 'getClassName')
  118.             && $e->getObject() instanceof \Pimcore\Model\DataObject\User
  119.         ) {
  120.             /** @var \Pimcore\Model\DataObject\User */
  121.             $object $e->getObject();
  122.             try {
  123.                 $user \Pimcore\Model\User::getById$object->getPimcoreUserId() );
  124.                 if ($user) {
  125.                     $fullName explode(" "$object->getName());
  126.                     $firstName $fullName[0];
  127.                     array_shift($fullName);
  128.                     $lastName implode(" "$fullName);
  129.                     $user->setFirstname($firstName);
  130.                     $user->setLastname($lastName);
  131.                     $user->save();
  132.                 }
  133.             } catch (\Exception $e) {
  134.                 $logName sprintf('USER_ROLE_EVENT_LISTENER_%s'Carbon::now()->format('d-m-Y'));
  135.                 Simple::log($logName"postAddDO|".$e->getMessage());
  136.             }
  137.         }
  138.         return false;
  139.     }
  140.     private function getDefaultDivision(): object
  141.     {
  142.         $defaultDivisionCode WebsiteSetting::getByName('DEFAULT_DIVISION_CODE') ? 
  143.             WebsiteSetting::getByName('DEFAULT_DIVISION_CODE')->getData() : 'DUM';
  144.         $division \Pimcore\Model\DataObject\Division::getByCode($defaultDivisionCode1);
  145.         return $division;
  146.     }
  147.     private function disableCreateUserManually(): void
  148.     {
  149.         $this->needCreateUserManually false;
  150.     }
  151.     public function onDeleteDataObjectUser(ElementEventInterface $e): bool
  152.     {
  153.         if (
  154.             $e instanceof DataObjectEvent
  155.             && method_exists($e->getObject(), 'getClassName')
  156.             && $e->getObject() instanceof \Pimcore\Model\DataObject\User
  157.         ) {
  158.             /** @var \Pimcore\Model\DataObject\User $object */
  159.             $object $e->getObject();
  160.             $user \Pimcore\Model\User::getById($object->getPimcoreUserId());
  161.             if ($user) {
  162.                 try {
  163.                     $user->delete();
  164.                 } catch (\Exception $e) {
  165.                     $logName sprintf('USER_ROLE_EVENT_LISTENER_%s'Carbon::now()->format('d-m-Y'));
  166.                     Simple::log($logName$e->getMessage());
  167.                 }
  168.             }
  169.         }
  170.         return false;
  171.     }
  172. }