Commit 6e126f85 authored by David Surville's avatar David Surville
Browse files

Simplification du code

parent 52f967e6
Loading
Loading
Loading
Loading
+80 −122
Original line number Diff line number Diff line
@@ -3,17 +3,16 @@
namespace UnicaenZimbra\Processus;

use UnicaenZimbra\Entity\Account;
use UnicaenZimbra\Entity\Identity;
use UnicaenZimbra\Entity\Grant;
use UnicaenZimbra\Entity\Right;
use UnicaenZimbra\Entity\Filter\Action\FileInto as FilterActionFileInto;
use UnicaenZimbra\Entity\Filter\Action\Keep as FilterActionKeep;
use UnicaenZimbra\Entity\Filter\Filter;
use UnicaenZimbra\Entity\Filter\Test\Address as FilterTestAddress;
use UnicaenZimbra\Entity\Filter\Test\Header as FilterTestHeader;
use UnicaenZimbra\Entity\Filter\Action\FileInto as FilterActionFileInto;
use UnicaenZimbra\Entity\Filter\Action\Keep as FilterActionKeep;
use UnicaenZimbra\Entity\Grant;
use UnicaenZimbra\Entity\Identity;
use UnicaenZimbra\Entity\Right;
use UnicaenZimbra\Options\ModuleOptions;
use UnicaenZimbra\Service\ZimbraFolderService;
use UnicaenZimbra\Service\ZimbraGalService;

class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
{
@@ -52,15 +51,13 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
     */
    public function create($mail, $password, $name, $description)
    {
        $accountService = $this->getZimbraAccountService();
        $cosService = $this->getZimbraCosService();

        $account = new Account;
        $account->name = $mail;
        $account->description = $description;
        $account->zimbraCOSId = $this->getOptions()->getBoiteGeneriqueCosId();
        $accountService->create($account, $password);
        $accountService->addAlias($account, $name . substr($mail, strpos($mail, '@')));
        $this->accountService->create($account, $password);
        $this->accountService->addAlias($account, $name . substr($mail, strpos($mail, '@')));

        return $this;
    }

@@ -73,8 +70,8 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
     */
    public function rename($mail, $newName)
    {
        $accountService = $this->getZimbraAccountService();
        $accountService->rename($accountService->get($mail), $newName);
        $this->accountService->rename($this->accountService->get($mail), $newName);

        return $this;
    }

@@ -86,8 +83,8 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
     */
    public function delete($mail)
    {
        $accountService = $this->getZimbraAccountService();
        $accountService->delete($accountService->get($mail));
        $this->accountService->delete($this->accountService->get($mail));

        return $this;
    }

@@ -102,27 +99,21 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
    {
        $afName = $this->getMailName($adresseFonctionnelle);

        // Récupération des services
        $accountService = $this->getZimbraAccountService();
        $distribListService = $this->getZimbraDistributionListService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();

        // Travail sur la boite générique
        $bg = $accountService->get($mail);
        $folderService->setAccount($bg);
        $filterService->setAccount($bg);
        $bg = $this->accountService->get($mail);
        $this->folderService->setAccount($bg);
        $this->filterService->setAccount($bg);

        // Liste de distribution
        $distribList = $distribListService->create($adresseFonctionnelle);
        $distribList = $this->distributionListService->create($adresseFonctionnelle);
        usleep(self::ZIMBRA_TEMPORISATION); // temporisation nécessaire pour Zimbra

        // Ajout des membres à la liste
        $distribListService->addMembers($distribList, $mail);
        $this->distributionListService->addMembers($distribList, $mail);

        // Répertoires
        $inputFolder = $folderService->create($afName . ' | Réception');
        $sentFolder = $folderService->create($afName . ' | Envoi');
        $inputFolder = $this->folderService->create($afName . ' | Réception');
        $sentFolder = $this->folderService->create($afName . ' | Envoi');

        // Filtre de réception
        $filter = new Filter;
@@ -147,7 +138,7 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $action->setFolderPath($inputFolder->absFolderPath);
        $filter->addAction($action);
        $filter->addAction(new FilterActionKeep);
        $filterService->createInput($filter);
        $this->filterService->createInput($filter);

        return $this;
    }
@@ -165,33 +156,27 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $afName = $this->getMailName($adresseFonctionnelle);
        $afNewName = $this->getMailName($newName);

        // récupération des services
        $accountService = $this->getZimbraAccountService();
        $distribListService = $this->getZimbraDistributionListService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();

        // Travail sur la boite générique
        $bg = $accountService->get($mail);
        $folderService->setAccount($bg);
        $filterService->setAccount($bg);
        $bg = $this->accountService->get($mail);
        $this->folderService->setAccount($bg);
        $this->filterService->setAccount($bg);

        // Liste de distribution
        // la suppression de la liste de distribution permet de supprimer les droits (ACE) sur celle-ci
        $distribListService->delete($distribListService->get($adresseFonctionnelle));
        $distribList = $distribListService->create($newName);
        $this->distributionListService->delete($this->distributionListService->get($adresseFonctionnelle));
        $distribList = $this->distributionListService->create($newName);
        usleep(self::ZIMBRA_TEMPORISATION); // temporisation nécessaire pour Zimbra

        // Ajout des membres à la liste
        $distribListService->addMembers($distribList, $mail);
        $this->distributionListService->addMembers($distribList, $mail);

        // Répertoires
        $inputFolder = $folderService->rename($folderService->get($afName . ' | Réception'), $afNewName . ' | Réception');
        $sentFolder = $folderService->rename($folderService->get($afName . ' | Envoi'), $afNewName . ' | Envoi');
        $inputFolder = $this->folderService->rename($this->folderService->get($afName . ' | Réception'), $afNewName . ' | Réception');
        $sentFolder = $this->folderService->rename($this->folderService->get($afName . ' | Envoi'), $afNewName . ' | Envoi');

        // Filtre entrant
        $filter = new Filter;
//	    $filter = $filterService->getInput()[$afName.' | Réception'];
//	    $filter = $this->filterService->getInput()[$afName.' | Réception'];
        $filter->setName($afNewName . ' | Réception')
            ->setCondition($filter::CONDITION_ANYOF);
        $test1 = new FilterTestAddress();
@@ -213,8 +198,8 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $filter->addAction($action);
        $filter->addAction(new FilterActionKeep);

        $filterService->deleteInput($afName . ' | Réception');
        $filterService->createInput($filter);
        $this->filterService->deleteInput($afName . ' | Réception');
        $this->filterService->createInput($filter);

        return $this;
    }
@@ -230,26 +215,20 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
    {
        $afName = $this->getMailName($adresseFonctionnelle);

        // récupération des services
        $accountService = $this->getZimbraAccountService();
        $distribListService = $this->getZimbraDistributionListService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();

        // Travail sur la boite générique
        $bg = $accountService->get($mail);
        $folderService->setAccount($bg);
        $filterService->setAccount($bg);
        $bg = $this->accountService->get($mail);
        $this->folderService->setAccount($bg);
        $this->filterService->setAccount($bg);

        // Liste de distribution
        $distribListService->delete($distribListService->get($adresseFonctionnelle));
        $this->distributionListService->delete($this->distributionListService->get($adresseFonctionnelle));

        // Répertoires
        $folderService->delete($folderService->get($afName . ' | Réception'));
        $folderService->delete($folderService->get($afName . ' | Envoi'));
        $this->folderService->delete($this->folderService->get($afName . ' | Réception'));
        $this->folderService->delete($this->folderService->get($afName . ' | Envoi'));

        // Filtres
        $filterService->deleteInput($afName . ' | Réception');
        $this->filterService->deleteInput($afName . ' | Réception');

        return $this;
    }
@@ -263,12 +242,10 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
     */
    public function getGrantsOfAdresseFonctionnelle($adresseFonctionnelle)
    {
        $distribListService = $this->getZimbraDistributionListService();
        $rightService = $this->getZimbraRightService();

        $ace = new Right;
        $ace->setTarget($distribListService->get($adresseFonctionnelle));
        return $rightService->getGrants($ace);
        $ace->setTarget($this->distributionListService->get($adresseFonctionnelle));

        return $this->rightService->getGrants($ace);
    }

    /**
@@ -282,15 +259,8 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
    {
        $afName = $this->getMailName($adresseFonctionnelle);

        $distribListService = $this->getZimbraDistributionListService();
        $accountService = $this->getZimbraAccountService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();
        $rightService = $this->getZimbraRightService();
        $identityService = $this->getZimbraIdentityService();

        // Travail sur la boite générique
        $dlAccount = $distribListService->get($adresseFonctionnelle);
        $dlAccount = $this->distributionListService->get($adresseFonctionnelle);
        foreach($dlAccount->members as $member) {
            if(preg_match('/bg-.*/', $member)) {
                $bgAccount = $member;
@@ -299,26 +269,26 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        }
        $bgAccount = $bgAccount ?: $dlAccount->members[0];

        $userAccount = $accountService->get($userMail);
        $folderService->setAccount($bgAccount);
        $userAccount = $this->accountService->get($userMail);
        $this->folderService->setAccount($bgAccount);

        // Partages
        $inputFolder = $folderService->get($afName . ' | Réception');
        $sentFolder = $folderService->get($afName . ' | Envoi');
        $inputFolder = $this->folderService->get($afName . ' | Réception');
        $sentFolder = $this->folderService->get($afName . ' | Envoi');

        $grant = new Grant;
        $grant->setGrantee($userAccount);
        $grant->perm = Grant::PERM_MANAGE;

        $folderService->addGrant($inputFolder, $grant, ZimbraFolderService::GRANT_ACTION_NONE)
        $this->folderService->addGrant($inputFolder, $grant, ZimbraFolderService::GRANT_ACTION_NONE)
            ->createMountPoint($inputFolder, $userAccount, $inputFolder->absFolderPath)
            ->addGrant($sentFolder, $grant, ZimbraFolderService::GRANT_ACTION_NONE)
            ->createMountPoint($sentFolder, $userAccount, $sentFolder->absFolderPath);

        // Travail sur la boite utilisateur
        $filterService->setAccount($userAccount);
        $identityService->setAccount($userAccount);
        $folderService->setAccount($userAccount);
        $this->filterService->setAccount($userAccount);
        $this->identityService->setAccount($userAccount);
        $this->folderService->setAccount($userAccount);

        // Filtre d'envoi
        $filter = new Filter;
@@ -335,14 +305,14 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $action = new FilterActionFileInto;
        $action->setFolderPath($sentFolder->absFolderPath);
        $filter->addAction($action);
        $filterService->createOutput($filter);
        $this->filterService->createOutput($filter);

        // ACE
        $ace = new Right;
        $ace->setTarget($dlAccount)
            ->setGrantee($userAccount)
            ->setRightByRightName('sendAsDistList');
        $rightService->grantRight($ace);
        $this->rightService->grantRight($ace);

        // Avatar
        $identity = new Identity;
@@ -350,13 +320,13 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $identity->zimbraPrefFromAddress = $adresseFonctionnelle;
        $identity->zimbraPrefFromAddressType = 'sendAs';
        $identity->zimbraPrefFromDisplay = $afName;
        $identity->zimbraPrefWhenInFolderIds = $folderService->get($afName . ' | Réception')->getId();
        $identity->zimbraPrefWhenInFolderIds = $this->folderService->get($afName . ' | Réception')->getId();
        $identity->zimbraPrefWhenInFoldersEnabled = true;
        $identity->zimbraPrefReplyToAddress = $adresseFonctionnelle;
        $identity->zimbraPrefReplyToEnabled = true;
        $identity->zimbraPrefWhenSentToAddresses = $adresseFonctionnelle;
        $identity->zimbraPrefWhenSentToEnabled = true;
        $identityService->create($identity);
        $this->identityService->create($identity);

        return $this;
    }
@@ -372,47 +342,42 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
    {
        $afName = $this->getMailName($adresseFonctionnelle);

        $distribListService = $this->getZimbraDistributionListService();
        $accountService = $this->getZimbraAccountService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();
        $rightService = $this->getZimbraRightService();
        $identityService = $this->getZimbraIdentityService();

        // Travail sur la boite générique
        $dlAccount = $distribListService->get($adresseFonctionnelle);
        $dlAccount = $this->distributionListService->get($adresseFonctionnelle);
        foreach($dlAccount->members as $member) {
            if(preg_match('/bg-.*/', $member)) {
                $bgAccount = $member;
                break;
            }
        }
        $userAccount = $accountService->get($userMail);
        $folderService->setAccount($bgAccount);
        $userAccount = $athis->ccountService->get($userMail);
        $this->folderService->setAccount($bgAccount);

        // Suppression des partages
        $inputFolder = $folderService->get($afName . ' | Réception');
        $sentFolder = $folderService->get($afName . ' | Envoi');
        $inputFolder = $this->folderService->get($afName . ' | Réception');
        $sentFolder = $this->folderService->get($afName . ' | Envoi');

        $folderService->revokeGrant($inputFolder, $userAccount)
        $this->folderService
            ->revokeGrant($inputFolder, $userAccount)
            ->revokeGrant($sentFolder, $userAccount);

        // Travail sur la boite utilisateur
        $filterService->setAccount($userAccount);
        $identityService->setAccount($userAccount);
        $this->filterService->setAccount($userAccount);
        $this->identityService->setAccount($userAccount);

        // Filtres
        $filterService->deleteOutput($afName . ' | Envoi');
        $this->filterService->deleteOutput($afName . ' | Envoi');

        // ACE
        $ace = new Right;
        $ace->setTarget($dlAccount)
            ->setGrantee($userAccount)
            ->setRightByRightName('sendAsDistList');
        $rightService->revokeRight($ace);
        $this->rightService->revokeRight($ace);

        // Avatar
        $identityService->delete($identityService->get($afName));
        $this->identityService->delete($this->identityService->get($afName));

        return $this;
    }

@@ -429,26 +394,19 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $afName = $this->getMailName($adresseFonctionnelle);
        $afNewName = $this->getMailName($newName);

        $distribListService = $this->getZimbraDistributionListService();
        $accountService = $this->getZimbraAccountService();
        $folderService = $this->getZimbraFolderService();
        $filterService = $this->getZimbraFilterService();
        $rightService = $this->getZimbraRightService();
        $identityService = $this->getZimbraIdentityService();

        // Travail sur la boite utilisateur
        $userAccount = $accountService->get($userMail);
        $folderService->setAccount($userAccount);
        $filterService->setAccount($userAccount);
        $identityService->setAccount($userAccount);
        $userAccount = $this->accountService->get($userMail);
        $this->folderService->setAccount($userAccount);
        $this->filterService->setAccount($userAccount);
        $this->identityService->setAccount($userAccount);

        // Répertoires
        $inputFolder = $folderService->rename($inputFolder = $folderService->get($afName . ' | Réception'), $afNewName . ' | Réception');
        $sentFolder = $folderService->rename($sentFolder = $folderService->get($afName . ' | Envoi'), $afNewName . ' | Envoi');
        $inputFolder = $this->folderService->rename($inputFolder = $this->folderService->get($afName . ' | Réception'), $afNewName . ' | Réception');
        $sentFolder = $this->folderService->rename($sentFolder = $this->folderService->get($afName . ' | Envoi'), $afNewName . ' | Envoi');

        // Filtre sortant
        $filter = new Filter;
//	    $filter = $filterService->getOutput()[$afName.' | Envoi'];
//	    $filter = $this->filterService->getOutput()[$afName.' | Envoi'];
        $filter->setName($afNewName . ' | Envoi');
        $test = new FilterTestAddress();
        $test->setHeader('from')->setStringComparison('contains')->setPart('all')
@@ -459,18 +417,18 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $action->setFolderPath($afNewName . ' | Envoi');
        $filter->addAction($action);

        $filterService->deleteOutput($afName . ' | Envoi');
        $filterService->createOutput($filter);
        $this->filterService->deleteOutput($afName . ' | Envoi');
        $this->filterService->createOutput($filter);

        // ACE
        $newAce = new Right();
        $newAce->setTarget($distribListService->get($newName))
        $newAce->setTarget($this->distributionListService->get($newName))
            ->setGrantee($userAccount)
            ->setRightByRightName('sendAsDistList');
        $rightService->grantRight($newAce);
        $this->rightService->grantRight($newAce);

        // Avatar
        $identityService->delete($identityService->get($afName)); // suppression ancienne identité
        $this->identityService->delete($this->identityService->get($afName)); // suppression ancienne identité
        $identity = new Identity();
        $identity->setName($afNewName);
        $identity->zimbraPrefFromAddress = $newName;
@@ -482,7 +440,7 @@ class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
        $identity->zimbraPrefReplyToEnabled = true;
        $identity->zimbraPrefWhenSentToAddresses = $newName;
        $identity->zimbraPrefWhenSentToEnabled = true;
        $identityService->create($identity);
        $this->identityService->create($identity);

        return $this;
    }