Skip to content
Snippets Groups Projects
Commit e4177c40 authored by David Surville's avatar David Surville
Browse files

Modification du processus de création d'une adresse fonctionnelle et...

Modification du processus de création d'une adresse fonctionnelle et d'ouverture des droits à un utilisateur
parent 01e7af08
No related branches found
No related tags found
No related merge requests found
<?php
namespace UnicaenZimbra\Entity\Filter\Action;
use SimpleXMLElement;
/**
* @version $Id$
*
* Action de keep pour filtre Zimbra
*
* @author David Surville <david.surville at unicaen.fr>
*/
class Keep extends Action
{
/**
*
* @param SimpleXMLElement $node
* @return self
*/
protected function populate( SimpleXMLElement $node )
{
/* Aucune propriété particulière n'est requise */
return $this;
}
/**
* Retourne la liste des propriétés de l'objet sous forme de tableau associatif
*
* @return array
*/
public function getArrayCopy()
{
return array();
}
}
......@@ -11,10 +11,12 @@ namespace UnicaenZimbra\Processus;
use UnicaenZimbra\Entity\Account;
use UnicaenZimbra\Entity\Identity;
use UnicaenZimbra\Entity\Grant;
use UnicaenZimbra\Entity\Right;
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\Filter\Action\Stop as FilterActionStop;
use UnicaenZimbra\Service\Folder as FolderService;
......@@ -68,37 +70,43 @@ class BoiteGenerique extends Processus
{
$afName = $this->getMailName( $adresseFonctionnelle );
// récupération des services
$accountService = $this->getServiceManager()->get('zimbraServiceAccount');
$distribListService = $this->getServiceManager()->get('zimbraServiceDistributionList');
$folderService = $this->getServiceManager()->get('zimbraServiceFolder');
$filterService = $this->getServiceManager()->get('zimbraServiceFilter');
/****** Travail sur la boite générique ******/
// Travail sur la boite générique
$bg = $accountService->get( $mail );
$folderService->setAccount($bg );
$filterService->setAccount($bg );
/* Alias */
$accountService->addAlias( $bg, $adresseFonctionnelle );
// Liste de distribution
$distribList = $distribListService->create($adresseFonctionnelle);
$distribListService->addMembers($distribList, $mail);
/* Répertoires */
// Répertoires
$inputFolder = $folderService->create($afName.' | Réception');
$sentFolder = $folderService->create($afName.' | Envoi');
/* Filtre de réception */
// Filtre de réception
$filter = new Filter;
$filter->setName($afName.' | Réception');
$test = new FilterTestAddress;
$test->setHeader('to,cc');
$test->setStringComparison('is');
$test->setPart('all');
$test->setValue($adresseFonctionnelle);
$filter->addTest($test);
$filter->setName($afName.' | Réception')
->setCondition($filter::CONDITION_ANYOF);
$test1 = new FilterTestAddress;
$test1->setHeader('to,cc')->setStringComparison('contains')->setPart('all')
->setValue($adresseFonctionnelle);
$test2 = new FilterTestHeader;
$test2->setHeader('X-Zimbra-DL')->setStringComparison('contains')
->setValue($adresseFonctionnelle);
$filter->setTests(array($test1, $test2));
$action = new FilterActionFileInto;
$action->setFolderPath( $inputFolder->absFolderPath );
$filter->addAction($action);
$filter->addAction( new FilterActionStop );
$filter->addAction( new FilterActionKeep );
$filterService->createInput($filter);
return $this;
}
......@@ -145,56 +153,60 @@ class BoiteGenerique extends Processus
{
$afName = $this->getMailName( $adresseFonctionnelle );
$aliasService = $this->getServiceManager()->get('zimbraServiceAlias');
$distribListService = $this->getServiceManager()->get('zimbraServiceDistributionList');
$accountService = $this->getServiceManager()->get('zimbraServiceAccount');
$folderService = $this->getServiceManager()->get('zimbraServiceFolder');
$filterService = $this->getServiceManager()->get('zimbraServiceFilter');
$rightService = $this->getServiceManager()->get('zimbraServiceRight');
$identityService = $this->getServiceManager()->get('zimbraServiceIdentity');
$alias = $aliasService->get( $adresseFonctionnelle );
/****** Travail sur la boite générique ******/
$bgAccount = $accountService->get($alias->zimbraAliasTargetId, 'id');
// Travail sur la boite générique
$bgAccount = $distribListService->getMembers($adresseFonctionnelle, 1)[0];
$userAccount = $accountService->get( $userMail );
$folderService->setAccount($bgAccount);
/* Ajout des partages */
// Partages
$inputFolder = $folderService->get($afName.' | Réception');
$sentFolder = $folderService->get($afName.' | Envoi');
$grant = new Grant;
$grant->setGrantee($userAccount);
$grant->perm = Grant::PERM_MANAGE;
$inputFolder = $folderService->get($afName.' | Réception');
$sentFolder = $folderService->get($afName.' | Envoi');
$folderService->addGrant( $inputFolder, $grant, FolderService::GRANT_ACTION_NONE )
->createMountPoint($inputFolder, $userAccount, $inputFolder->absFolderPath)
->addGrant( $sentFolder, $grant, FolderService::GRANT_ACTION_NONE )
->createMountPoint($sentFolder, $userAccount, $sentFolder->absFolderPath);
/****** Travail sur la boite utilisateur ******/
// Travail sur la boite utilisateur
$filterService->setAccount($userAccount);
$identityService->setAccount($userAccount);
$folderService->setAccount($userAccount);
/* Filtres */
// Filtre d'envoi
$filter = new Filter;
$filter->setName($afName.' | Envoi');
$test = new FilterTestHeader;
$test->setHeader('Reply-to');
$test->setStringComparison('is');
$test->setValue($adresseFonctionnelle);
$test = new FilterTestAddress;
$test->setHeader('from')->setStringComparison('contains')->setPart('all')
->setValue($adresseFonctionnelle);
$filter->addTest($test);
$action = new FilterActionFileInto;
$action->setFolderPath( $afName.' | Envoi' );
$filter->addAction($action);
$filter->addAction( new FilterActionStop );
$filterService->createOutput($filter);
/* Avatar */
// ACE
$ace = new Right;
$ace->setTarget($distribListService->get($adresseFonctionnelle))
->setGrantee($userAccount)
->setRightByRightName('sendAsDistList');
$rightService->grantRight($ace);
// Avatar
$identity = new Identity;
$identity->setName($afName);
$identity->zimbraPrefFromAddress = $userMail;
$identity->zimbraPrefFromAddress = $adresseFonctionnelle;
$identity->zimbraPrefFromAddressType = 'sendAs';
$identity->zimbraPrefFromDisplay = $adresseFonctionnelle;
$identity->zimbraPrefWhenInFolderIds = $folderService->get($afName.' | Réception')->getId();
......@@ -204,6 +216,7 @@ class BoiteGenerique extends Processus
$identity->zimbraPrefWhenSentToAddresses = $adresseFonctionnelle;
$identity->zimbraPrefWhenSentToEnabled = true;
$identityService->create($identity);
return $this;
}
......
......@@ -10,6 +10,7 @@ namespace UnicaenZimbra\Service;
use UnicaenZimbra\Zimbra;
use UnicaenZimbra\Entity\Alias as AliasEntity;
use UnicaenZimbra\Exception;
class Alias extends Service {
......
......@@ -442,11 +442,11 @@ class Folder extends Service {
$currentAccount = $this->account;
$this->account = $account;
$destFolderParent = dirname( $absPath);
if ('.' == $destFolderParent) $destFolderParent = '/';
$destFolderName = basename( $absPath );
$destFolderParent = $this->get($destFolderParent);
$this->account = $currentAccount;
$attributes = array();
$params = array(
......@@ -460,6 +460,8 @@ class Folder extends Service {
);
$this->applyAccountContext();
$this->getZimbra()->request('CreateMountpointRequest', $attributes, $params, self::URN);
$this->account = $currentAccount;
return $this;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment