chrisbryan17's picture
Upload folder using huggingface_hub
d2897cd verified
<?php
namespace Mautic\UserBundle\Model;
use Mautic\CoreBundle\Model\FormModel;
use Mautic\UserBundle\Entity\Role;
use Mautic\UserBundle\Entity\RoleRepository;
use Mautic\UserBundle\Event\RoleEvent;
use Mautic\UserBundle\Form\Type\RoleType;
use Mautic\UserBundle\UserEvents;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
use Symfony\Contracts\EventDispatcher\Event;
/**
* @extends FormModel<Role>
*/
class RoleModel extends FormModel
{
public function getRepository(): RoleRepository
{
return $this->em->getRepository(Role::class);
}
public function getPermissionBase(): string
{
return 'user:roles';
}
/**
* @throws MethodNotAllowedHttpException
*/
public function saveEntity($entity, $unlock = true): void
{
if (!$entity instanceof Role) {
throw new MethodNotAllowedHttpException(['Role'], 'Entity must be of class Role()');
}
$isNew = ($entity->getId()) ? 0 : 1;
if (!$isNew) {
// delete all existing
$this->em->getRepository(\Mautic\UserBundle\Entity\Permission::class)->purgeRolePermissions($entity);
}
parent::saveEntity($entity, $unlock);
}
/**
* Generate the role's permissions.
*
* @param array $rawPermissions (i.e. from request)
*/
public function setRolePermissions(Role &$entity, $rawPermissions): void
{
if (!is_array($rawPermissions)) {
return;
}
// set permissions if applicable and if the user is not an admin
$permissions = (!$entity->isAdmin() && !empty($rawPermissions)) ?
$this->security->generatePermissions($rawPermissions) :
[];
foreach ($permissions as $permissionEntity) {
$entity->addPermission($permissionEntity);
}
$entity->setRawPermissions($rawPermissions);
}
/**
* @throws PreconditionRequiredHttpException
*/
public function deleteEntity($entity): void
{
if (!$entity instanceof Role) {
throw new MethodNotAllowedHttpException(['Role'], 'Entity must be of class Role()');
}
$users = $this->em->getRepository(\Mautic\UserBundle\Entity\User::class)->findByRole($entity);
if (count($users)) {
throw new PreconditionRequiredHttpException($this->translator->trans('mautic.user.role.error.deletenotallowed', ['%name%' => $entity->getName()], 'flashes'));
}
parent::deleteEntity($entity);
}
/**
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function createForm($entity, FormFactoryInterface $formFactory, $action = null, $options = []): \Symfony\Component\Form\FormInterface
{
if (!$entity instanceof Role) {
throw new MethodNotAllowedHttpException(['Role']);
}
if (!empty($action)) {
$options['action'] = $action;
}
return $formFactory->create(RoleType::class, $entity, $options);
}
public function getEntity($id = null): ?Role
{
if (null === $id) {
return new Role();
}
return parent::getEntity($id);
}
/**
* @throws MethodNotAllowedHttpException
*/
protected function dispatchEvent($action, &$entity, $isNew = false, Event $event = null): ?Event
{
if (!$entity instanceof Role) {
throw new MethodNotAllowedHttpException(['Role'], 'Entity must be of class Role()');
}
switch ($action) {
case 'pre_save':
$name = UserEvents::ROLE_PRE_SAVE;
break;
case 'post_save':
$name = UserEvents::ROLE_POST_SAVE;
break;
case 'pre_delete':
$name = UserEvents::ROLE_PRE_DELETE;
break;
case 'post_delete':
$name = UserEvents::ROLE_POST_DELETE;
break;
default:
return null;
}
if ($this->dispatcher->hasListeners($name)) {
if (empty($event)) {
$event = new RoleEvent($entity, $isNew);
$event->setEntityManager($this->em);
}
$this->dispatcher->dispatch($event, $name);
return $event;
}
return null;
}
}