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

Passage à ZF3 et ajout de fonctions au service ZimbraAccount

parent dfcd0759
No related branches found
No related tags found
No related merge requests found
Showing
with 688 additions and 245 deletions
CHANGELOG
=========
3.0.0 (03/09/2020)
------------------
- Adaptation du code pour le passage à ZF3.
- Ajout de fonctions au Service "ZimbraAccount" : ajout/suppression alias, ajout/suppression forward et modifications de quelques options du compte Zimbra.
......@@ -2,16 +2,11 @@
namespace UnicaenZimbra;
use Zend\Loader\StandardAutoloader;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
/**
* Point d'entrée du module de gestion de Zimbra.
*
* @author Laurent LECLUSE <laurent.lecluse@unicaen.fr>
*/
class Module implements ConfigProviderInterface, ServiceProviderInterface
class Module implements ConfigProviderInterface
{
/**
......@@ -31,54 +26,12 @@ class Module implements ConfigProviderInterface, ServiceProviderInterface
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
return [
StandardAutoloader::class => [
'namespaces' => [
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
/**
*
* @return array
* @see ServiceProviderInterface
*/
public function getServiceConfig()
{
$services = array(
'Account', 'Alias', 'Cos', 'DistributionList',
'Domain', 'Filter', 'Folder', 'Gal',
'Identity', 'MailBox', 'Resource', 'Right', 'Server'
);
$processus = array(
'BoiteGenerique'
);
$factories = array(
'zimbra' => function($sm){
return new Zimbra;
},
'zimbraOptions' => 'UnicaenZimbra\Options\ModuleOptionsFactory',
);
foreach( $services as $service ){
$factories['zimbraService'.$service] = function($sm) use ($service){
$className = 'UnicaenZimbra\\Service\\'.$service;
return new $className;
};
}
foreach( $processus as $proc ){
$factories['zimbraProcessus'.$proc] = function($sm) use ($proc){
$className = 'UnicaenZimbra\\Processus\\'.$proc;
return new $className;
};
}
return array(
'factories' => $factories,
);
],
],
];
}
}
\ No newline at end of file
# UnicaenZimbra
* [Introduction](#introduction)
* [Installation](#installation)
* [Configuration](#configuration)
## Introduction
Ce module permet d'utiliser l'[API SOAP Zimbra](https://wiki.zimbra.com/wiki/SOAP_API_Reference_Material_Beginning_with_ZCS_8) et de piloter le serveur Zimbra de l'université.
## Pré-requis
L'utilisation de ce module nécessite l'installation de l'extension `ext-curl` de PHP.
## Installation
```bash
$ composer require unicaen/zimbra
```
## Configuration
> Récupérer les fichiers de config du module
```bash
$ cp -n vendor/unicaen/zimbra/config/unicaen-zimbra.global.php.dist config/autoload/unicaen-zimbra.global.php
$ cp -n vendor/unicaen/zimbra/config/unicaen-zimbra.local.php.dist config/autoload/unicaen-zimbra.local.php
```
> Adapter le contenu à vos besoins en configurant notamment les paramètres de connexion au serveur Zimbra.
```php
'unicaen-zimbra' => [
'server' => 'test-zimbra.unicaen.fr',
'port' => 7071,
'email' => 'test@unicaen.fr',
'password' => 'xxxx',
'domain' => 'unicaen.fr',
'boite_generique_cos_id' => 'e00428a1-0c00-11d9-836a-000d93afea2a',
'debug_mode' => false,
]
```
\ No newline at end of file
<?php
// Generated by ZF2's ./bin/classmap_generator.php
return array(
);
\ No newline at end of file
<?php
$settings = array(
namespace UnicaenZimbra;
);
use UnicaenZimbra\Options\ModuleOptionsFactory;
use UnicaenZimbra\Processus\ZimbraBoiteGeneriqueProcessus;
use UnicaenZimbra\Processus\ZimbraBoiteGeneriqueProcessusFactory;
use UnicaenZimbra\Service\ZimbraAccountService;
use UnicaenZimbra\Service\ZimbraAccountServiceFactory;
use UnicaenZimbra\Service\ZimbraAliasService;
use UnicaenZimbra\Service\ZimbraAliasServiceFactory;
use UnicaenZimbra\Service\ZimbraCosService;
use UnicaenZimbra\Service\ZimbraCosServiceFactory;
use UnicaenZimbra\Service\ZimbraDistributionListService;
use UnicaenZimbra\Service\ZimbraDistributionListServiceFactory;
use UnicaenZimbra\Service\ZimbraDomainService;
use UnicaenZimbra\Service\ZimbraDomainServiceFactory;
use UnicaenZimbra\Service\ZimbraFilterService;
use UnicaenZimbra\Service\ZimbraFilterServiceFactory;
use UnicaenZimbra\Service\ZimbraFolderService;
use UnicaenZimbra\Service\ZimbraFolderServiceFactory;
use UnicaenZimbra\Service\ZimbraGalService;
use UnicaenZimbra\Service\ZimbraGalServiceFactory;
use UnicaenZimbra\Service\ZimbraIdentityService;
use UnicaenZimbra\Service\ZimbraIdentityServiceFactory;
use UnicaenZimbra\Service\ZimbraMailBoxService;
use UnicaenZimbra\Service\ZimbraMailBoxServiceFactory;
use UnicaenZimbra\Service\ZimbraResourceService;
use UnicaenZimbra\Service\ZimbraResourceServiceFactory;
use UnicaenZimbra\Service\ZimbraRightService;
use UnicaenZimbra\Service\ZimbraRightServiceFactory;
use UnicaenZimbra\Service\ZimbraServerService;
use UnicaenZimbra\Service\ZimbraServerServiceFactory;
return array(
'unicaen-zimbra' => $settings
);
\ No newline at end of file
return [
'unicaen-zimbra' => [],
'service_manager' => [
'aliases' => [
// services
'zimbraServiceAccount' => ZimbraAccountService::class,
'zimbraServiceAlias' => ZimbraAliasService::class,
'zimbraServiceCos' => ZimbraCosService::class,
'zimbraServiceDistributionList' => ZimbraDistributionListService::class,
'zimbraServiceDomain' => ZimbraDomainService::class,
'zimbraServiceFilter' => ZimbraFilterService::class,
'zimbraServiceFolder' => ZimbraFolderService::class,
'zimbraServiceGal' => ZimbraGalService::class,
'zimbraServiceIdentity' => ZimbraIdentityService::class,
'zimbraServiceMailBox' => ZimbraMailBoxService::class,
'zimbraServiceResource' => ZimbraResourceService::class,
'zimbraServiceRight' => ZimbraRightService::class,
'zimbraServiceServer' => ZimbraServerService::class,
// processus
'zimbraProcessusBoiteGenerique' => BoiteGeneriqueProcessus::class,
],
'factories' => [
'zimbra' => ZimbraFactory::class,
'zimbraOptions' => ModuleOptionsFactory::class,
// services
ZimbraAccountService::class => ZimbraAccountServiceFactory::class,
ZimbraAliasService::class => ZimbraAliasServiceFactory::class,
ZimbraCosService::class => ZimbraCosServiceFactory::class,
ZimbraDistributionListService::class => ZimbraDistributionListServiceFactory::class,
ZimbraDomainService::class => ZimbraDomainServiceFactory::class,
ZimbraFilterService::class => ZimbraFilterServiceFactory::class,
ZimbraFolderService::class => ZimbraFolderServiceFactory::class,
ZimbraGalService::class => ZimbraGalServiceFactory::class,
ZimbraIdentityService::class => ZimbraIdentityServiceFactory::class,
ZimbraMailBoxService::class => ZimbraMailBoxServiceFactory::class,
ZimbraResourceService::class => ZimbraResourceServiceFactory::class,
ZimbraRightService::class => ZimbraRightServiceFactory::class,
ZimbraServerService::class => ZimbraServerServiceFactory::class,
// Zimbra processus
ZimbraBoiteGeneriqueProcessus::class => ZimbraBoiteGeneriqueProcessusFactory::class,
],
],
];
\ No newline at end of file
<?php
/**
* Compte Mail Zimbra
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Entity;
class Account extends Entity
......@@ -20,9 +14,44 @@ class Account extends Entity
if (is_array($this->zimbraMailAlias))
return $this->zimbraMailAlias;
elseif(is_string($this->zimbraMailAlias))
return array($this->zimbraMailAlias);
return [$this->zimbraMailAlias];
else
return array();
return [];
}
/**
* Retourne la liste des forwards
*
* @return string[]
*/
public function getForward()
{
if(is_string($this->zimbraPrefMailForwardingAddress)) {
return preg_split('/,\s*/', $this->zimbraPrefMailForwardingAddress);
}
else {
return [];
}
}
/**
* Conservation d'une copie des messages dans la boîte locale ?
*
* @return bool
*/
public function getLocalDelivery()
{
return $this->zimbraPrefMailLocalDeliveryDisabled ? false : true;
}
/**
* Synchronisation du mobile (ActiveSync) ?
*
* @return bool
*/
public function getSynchroMobile()
{
return $this->zimbraFeatureMobileSyncEnabled;
}
/**
......
......@@ -10,4 +10,9 @@ namespace UnicaenZimbra\Entity;
class Cos extends Entity
{
const COS_ETUDIANTS = 'cos_etudiants';
const COS_PERSONNEL = 'cos_personnel';
const COS_PERSONNEL_SYNCHRO = 'cos_personnel_synchro';
const COS_PERSONNEL_VIP = 'cos_personnel_6g';
const COS_PERSONNEL_VIP_SYNCHRO = 'cos_personnel_synchro_6g';
}
\ No newline at end of file
<?php
namespace UnicaenZimbra\Options;
use Zend\Stdlib\AbstractOptions;
/**
* Classe encapsulant les options de fonctionnement du module.
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
class ModuleOptions extends AbstractOptions
{
/**
......
......@@ -2,25 +2,22 @@
namespace UnicaenZimbra\Options;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
/**
* Description of ModuleOptionsFactory
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
class ModuleOptionsFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
* @return ModuleOptions|object
*/
public function createService(ServiceLocatorInterface $serviceLocator)
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$config = $serviceLocator->get('Configuration');
$config = $container->get('Configuration');
$moduleConfig = isset($config['unicaen-zimbra']) ? $config['unicaen-zimbra'] : array();
return new ModuleOptions($moduleConfig);
}
......
<?php
namespace UnicaenZimbra\Processus;
use UnicaenZimbra\Service\ZimbraAccountServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraCosServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraDistributionListServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraFilterServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraFolderServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraIdentityServiceAwareTrait;
use UnicaenZimbra\Service\ZimbraRightServiceAwareTrait;
use UnicaenZimbra\Zimbra;
abstract class AbstractProcessus
{
use ZimbraAccountServiceAwareTrait;
use ZimbraCosServiceAwareTrait;
use ZimbraDistributionListServiceAwareTrait;
use ZimbraFilterServiceAwareTrait;
use ZimbraFolderServiceAwareTrait;
use ZimbraIdentityServiceAwareTrait;
use ZimbraRightServiceAwareTrait;
/**
* @var Zimbra
*/
protected $zimbra;
/**
* @param Zimbra $zimbra
* @return $this
*/
public function setZimbra(Zimbra $zimbra) : self
{
$this->zimbra = $zimbra;
return $this;
}
/**
* @return Zimbra
*/
public function getZimbra() : Zimbra
{
return $this->zimbra;
}
}
\ No newline at end of file
<?php
/**
* Processus de gestion des boites génériques
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Processus;
use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
abstract class Processus implements ServiceManagerAwareInterface {
/**
* @var ServiceManager
*/
protected $serviceManager;
/**
* Get service manager
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager
*
* @param ServiceManager $serviceManager
* @return self
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
}
\ No newline at end of file
<?php
/**
* Processus de gestion des boites génériques
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Processus;
use UnicaenZimbra\Entity\Account;
......@@ -17,12 +11,36 @@ 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\Options\ModuleOptions;
use UnicaenZimbra\Service\Folder as FolderService;
use UnicaenZimbra\Service\ZimbraGalService;
class BoiteGenerique extends Processus
class ZimbraBoiteGeneriqueProcessus extends AbstractProcessus
{
const ZIMBRA_TEMPORISATION = 5000000; // microsecondes
/**
* @var ModuleOptions
*/
protected $options;
/**
* @param ModuleOptions $moduleOptions
*/
public function setOptions(ModuleOptions $moduleOptions)
{
$this->options = $moduleOptions;
}
/**
* @return ModuleOptions
*/
public function getOptions()
{
return $this->options;
}
/**
* Créer une boite générique
*
......@@ -34,13 +52,13 @@ class BoiteGenerique extends Processus
*/
public function create($mail, $password, $name, $description)
{
$accountService = $this->getServiceManager()->get('zimbraServiceAccount');
$cosService = $this->getServiceManager()->get('zimbraServiceCos');
$accountService = $this->getZimbraAccountService();
$cosService = $this->getZimbraCosService();
$account = new Account;
$account->name = $mail;
$account->description = $description;
$account->zimbraCOSId = $this->getServiceManager()->get('zimbraOptions')->getBoiteGeneriqueCosId();
$account->zimbraCOSId = $this->getOptions()->getBoiteGeneriqueCosId();
$accountService->create($account, $password);
$accountService->addAlias($account, $name . substr($mail, strpos($mail, '@')));
return $this;
......@@ -55,7 +73,7 @@ class BoiteGenerique extends Processus
*/
public function rename($mail, $newName)
{
$accountService = $this->getServiceManager()->get('zimbraServiceAccount');
$accountService = $this->getZimbraAccountService();
$accountService->rename($accountService->get($mail), $newName);
return $this;
}
......@@ -68,7 +86,7 @@ class BoiteGenerique extends Processus
*/
public function delete($mail)
{
$accountService = $this->getServiceManager()->get('zimbraServiceAccount');
$accountService = $this->getZimbraAccountService();
$accountService->delete($accountService->get($mail));
return $this;
}
......@@ -85,10 +103,10 @@ 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');
$accountService = $this->getZimbraAccountService();
$distribListService = $this->getZimbraDistributionListService();
$folderService = $this->getZimbraFolderService();
$filterService = $this->getZimbraFilterService();
// Travail sur la boite générique
$bg = $accountService->get($mail);
......@@ -148,10 +166,10 @@ class BoiteGenerique extends Processus
$afNewName = $this->getMailName($newName);
// 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');
$accountService = $this->getZimbraAccountService();
$distribListService = $this->getZimbraDistributionListService();
$folderService = $this->getZimbraFolderService();
$filterService = $this->getZimbraFilterService();
// Travail sur la boite générique
$bg = $accountService->get($mail);
......@@ -213,10 +231,10 @@ 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');
$accountService = $this->getZimbraAccountService();
$distribListService = $this->getZimbraDistributionListService();
$folderService = $this->getZimbraFolderService();
$filterService = $this->getZimbraFilterService();
// Travail sur la boite générique
$bg = $accountService->get($mail);
......@@ -245,8 +263,8 @@ class BoiteGenerique extends Processus
*/
public function getGrantsOfAdresseFonctionnelle($adresseFonctionnelle)
{
$distribListService = $this->getServiceManager()->get('zimbraServiceDistributionList');
$rightService = $this->getServiceManager()->get('zimbraServiceRight');
$distribListService = $this->getZimbraDistributionListService();
$rightService = $this->getZimbraRightService();
$ace = new Right;
$ace->setTarget($distribListService->get($adresseFonctionnelle));
......@@ -264,12 +282,12 @@ class BoiteGenerique extends Processus
{
$afName = $this->getMailName($adresseFonctionnelle);
$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');
$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);
......@@ -352,12 +370,12 @@ class BoiteGenerique extends Processus
{
$afName = $this->getMailName($adresseFonctionnelle);
$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');
$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);
......@@ -409,12 +427,12 @@ class BoiteGenerique extends Processus
$afName = $this->getMailName($adresseFonctionnelle);
$afNewName = $this->getMailName($newName);
$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');
$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);
......
<?php
namespace UnicaenZimbra\Service;
trait ZimbraBoiteGeneriqueProcessusAwareTrait
{
/**
* @var BoiteGeneriqueProcessus
*/
protected $boiteGeneriqueProcessus;
/**
* @param BoiteGeneriqueProcessus $boiteGeneriqueProcessus
*/
public function setBoiteGeneriqueProcessus(BoiteGeneriqueProcessus $boiteGeneriqueProcessus)
{
$this->boiteGeneriqueProcessus = $boiteGeneriqueProcessus;
}
/**
* @return BoiteGeneriqueProcessus
*/
public function getBoiteGeneriqueProcessus()
{
return $this->boiteGeneriqueProcessus;
}
}
\ No newline at end of file
<?php
namespace UnicaenZimbra\Processus;
use Interop\Container\ContainerInterface;
use UnicaenZimbra\Options\ModuleOptions;
use UnicaenZimbra\Service\ZimbraAccountService;
use UnicaenZimbra\Service\ZimbraCosService;
use UnicaenZimbra\Service\ZimbraDistributionListService;
use UnicaenZimbra\Service\ZimbraFilterService;
use UnicaenZimbra\Service\ZimbraFolderService;
use UnicaenZimbra\Service\ZimbraIdentityService;
use UnicaenZimbra\Service\ZimbraRightService;
use UnicaenZimbra\Zimbra;
use Zend\ServiceManager\Factory\FactoryInterface;
class ZimbraBoiteGeneriqueProcessusFactory implements FactoryInterface
{
/**
* Create processus
*
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
* @return object|BoiteGeneriqueProcessus
*/
public function __invoke(ContainerInterface $container, $requestedName, array $options = null) : BoiteGeneriqueProcessus
{
/**
* @var Zimbra $zimbra
* @var ModuleOptions $moduleOptions
* @var ZimbraAccountService $accountService
* @var ZimbraCosService $cosService
* @var ZimbraDistributionListService $distributionListService
* @var ZimbraFilterService $filterService
* @var ZimbraFolderService $folderService
* @var ZimbraIdentityService $identityService
* @var ZimbraRightService $rightService
*/
$zimbra = $container->get('zimbra');
$moduleOptions = $container->get('zimbraOptions');
$accountService = $container->get(ZimbraAccountService::class);
$cosService = $container->get(ZimbraCosService::class);
$distributionListService = $container->get(ZimbraDistributionListService::class);
$filterService = $container->get(ZimbraFilterService::class);
$folderService = $container->get(ZimbraFolderService::class);
$identityService = $container->get(ZimbraIdentityService::class);
$rightService = $container->get(ZimbraRightService::class);
$processus = new ZimbraBoiteGeneriqueProcessus();
$processus->setZimbra($zimbra);
$processus->setOptions($moduleOptions);
$processus->setZimbraAccountService($accountService);
$processus->setZimbraCosService($cosService);
$processus->setZimbraDistributionListService($distributionListService);
$processus->setZimbraFilterService($filterService);
$processus->setZimbraFolderService($folderService);
$processus->setZimbraIdentityService($identityService);
$processus->setZimbraRightService($rightService);
return $processus;
}
}
\ No newline at end of file
<?php
/**
* Classe abstraite de gestion de Service Zimbra
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Service;
use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use UnicaenZimbra\Zimbra;
abstract class Service implements ServiceManagerAwareInterface {
abstract class AbstractService
{
/**
* @var Zimbra
*/
protected $zimbra;
/**
* Nombre d'occurences renvoyées par la dernière requête en date
......@@ -23,43 +19,22 @@ abstract class Service implements ServiceManagerAwareInterface {
protected $count;
/**
* @var ServiceManager
*/
protected $serviceManager;
/**
*
* @return Zimbra
* @param Zimbra $zimbra
* @return $this
*/
public function getZimbra()
public function setZimbra(Zimbra $zimbra) : self
{
return $this->getServiceManager()->get('zimbra');
}
$this->zimbra = $zimbra;
/**
* Get service manager
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
return $this;
}
/**
* Set service manager
*
* @param ServiceManager $serviceManager
* @return self
* @return Zimbra
*/
public function setServiceManager(ServiceManager $serviceManager)
public function getZimbra() : Zimbra
{
$this->serviceManager = $serviceManager;
return $this;
return $this->zimbra;
}
/**
......
<?php
/**
* Service de comptes mail Zimbra
*
* @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Service;
use UnicaenZimbra\Entity\Account as AccountEntity;
use UnicaenZimbra\Entity\Cos;
use UnicaenZimbra\Zimbra;
class Account extends Service {
class ZimbraAccountService extends AbstractService
{
use ZimbraCosServiceAwareTrait;
/**
* Retourne la liste des comptes
......@@ -24,8 +21,9 @@ class Account extends Service {
* @param string $sort
* @param string $query
* @return AccountEntity[]
* @throws \UnicaenZimbra\Exception
*/
public function getList( $domain, $limit=Zimbra::DEFAULT_LIMIT, $offset=Zimbra::DEFAULT_OFFSET, $sort=null, $query=null )
public function getList( $domain, $limit = Zimbra::DEFAULT_LIMIT, $offset = Zimbra::DEFAULT_OFFSET, $sort = null, $query = null ): array
{
$accounts = $this->getZimbra()->searchDirectory($domain, $limit, $offset, 'accounts', $sort, $query);
......@@ -36,6 +34,7 @@ class Account extends Service {
$account->populate($accountXml);
$results[$account->getId()] = $account;
}
return $results;
}
......@@ -46,20 +45,23 @@ class Account extends Service {
*
* @param string $value
* @param string $by
* @return boolean
* @return bool
* @throws \UnicaenZimbra\Exception
*/
public function exists($value, $by='name')
public function exists(string $value, string $by = 'name'): bool
{
return $this->getZimbra()->exists($value, $by, 'accounts');
}
/**
* Retourne un compte en fonction de la valeur donnée et de son type (son nom par défaut)
*
* @param string $value
* @param string $by
* @return AccountEntity
* @throws \UnicaenZimbra\Exception
*/
public function get( $value, $by='name' )
public function get(string $value, string $by = 'name'): AccountEntity
{
$params = array(
'account' => array(
......@@ -73,6 +75,7 @@ class Account extends Service {
$account = new AccountEntity;
$account->populate($accounts[0]);
$this->count = 1;
return $account;
}
......@@ -83,8 +86,9 @@ class Account extends Service {
* @param integer $limit
* @param integer $offset
* @return AccountEntity[]
* @throws \UnicaenZimbra\Exception
*/
public function search( $query='', $limit=Zimbra::DEFAULT_LIMIT, $offset=Zimbra::DEFAULT_OFFSET )
public function search($query = '', $limit = Zimbra::DEFAULT_LIMIT, $offset = Zimbra::DEFAULT_OFFSET): array
{
$params = array(
'query' => $query,
......@@ -100,6 +104,7 @@ class Account extends Service {
$account->populate($accountXml);
$results[$account->getId()] = $account;
}
return $results;
}
......@@ -112,8 +117,9 @@ class Account extends Service {
* @param array $sort
* @param string $targetServer
* @return array
* @throws \UnicaenZimbra\Exception
*/
public function getQuotas(array $attributes, $sort = null, $targetServer = null)
public function getQuotas(array $attributes, $sort = null, $targetServer = null): array
{
$results = array();
......@@ -143,12 +149,14 @@ class Account extends Service {
}
/**
* Renomme un compte
*
* @param string|AccountEntity $id
* @param string $newName
* @return AccountEntity
* @throws \UnicaenZimbra\Exception
*/
public function rename($id, $newName)
public function rename($id, $newName): AccountEntity
{
if ($id instanceof AccountEntity) {
$aid = $id->getId();
......@@ -167,17 +175,19 @@ class Account extends Service {
$accounts = $response->children()->RenameAccountResponse->children();
$account->populate($accounts[0]);
$this->count = 1;
return $account;
}
/**
* Prend soit le nom du nouveau compte, soit un nouvel objet AccountEntity
* Créé un nouveau compte
*
* @param string|AccountEntity $value
* @param string|AccountEntity $value nom du compte ou objet AccountEntity
* @param string $password
* @return AccountEntity
* @throws \UnicaenZimbra\Exception
*/
public function create( $value, $password )
public function create($value, string $password): AccountEntity
{
$attrs = array();
......@@ -199,13 +209,16 @@ class Account extends Service {
$accounts = $response->children()->CreateAccountResponse->children();
$account->populate($accounts[0]);
$this->count = 1;
return $account;
}
/**
* Modifie un compte
*
* @param AccountEntity $account
* @return AccountEntity
* @throws \UnicaenZimbra\Exception
*/
public function modify(AccountEntity $account)
{
......@@ -216,46 +229,37 @@ class Account extends Service {
$response = $this->getZimbra()->request('ModifyAccountRequest', $attrs, $params);
$accounts = $response->children()->ModifyAccountResponse->children();
$account->populate($accounts[0]);
$this->count = 1;
return $account;
}
/**
* Supprimer un compte
*
* @param AccountEntity|string $id
* @return boolean
* @return bool
* @throws \UnicaenZimbra\Exception
*/
public function delete( $id )
public function delete($id): bool
{
if ($id instanceof AccountEntity) $id = $id->getId();
$this->getZimbra()->request('DeleteAccountRequest', array('id' => $id), array());
$this->count = 1;
return true;
}
/**
*
* @param string|AccountEntity $id
* @return string[]
*/
public function getAlias( $id ){
if (is_string($id)){
$id = $this->get($id, 'id');
}
$alias = $id->getAlias();
$this->count = count($alias);
return $alias;
return true;
}
/**
* Ajoute un alias de messagerie
*
* @param string|AccountEntity $id
* @param string $alias
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function addAlias( $id, $alias )
public function addAlias($id, $alias): self
{
if ($id instanceof AccountEntity) {
$account = $id;
......@@ -281,12 +285,62 @@ class Account extends Service {
}
/**
* Modifie la conservation des messages dans la boite aux lettres Zimbra
*
* @param string|AccountEntity $id
* @param bool $localDelivery
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function modifyLocalDelivery($id, bool $localDelivery): self
{
$account = $id instanceof AccountEntity ? $id : $this->get($id);
$account->zimbraPrefMailLocalDeliveryDisabled = $localDelivery;
$this->modify($account);
return $this;
}
/**
* Modifie la synchronisation du mobile avec Zimbra
*
* @param string|AccountEntity $id
* @param bool $synchroMobile
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function modifySynchroMobile($id, bool $synchroMobile): self
{
$account = $id instanceof AccountEntity ? $id : $this->get($id);
$cos = $this->getZimbraCosService()->get($account->zimbraCOSId, 'id');
switch ($cos->getName()) {
case Cos::COS_PERSONNEL:
case Cos::COS_PERSONNEL_SYNCHRO:
$cosName = ($synchroMobile) ? Cos::COS_PERSONNEL_SYNCHRO : Cos::COS_PERSONNEL;
break;
case Cos::COS_PERSONNEL_VIP:
case Cos::COS_PERSONNEL_VIP_SYNCHRO:
$cosName = ($synchroMobile) ? Cos::COS_PERSONNEL_VIP_SYNCHRO : Cos::COS_PERSONNEL_VIP;
break;
}
$account->zimbraCOSId = $this->getZimbraCosService()->get($cosName ?: $cos->getName())->getId();
$this->modify($account);
return $this;
}
/**
* Supprimer un alias de messagerie
*
* @param string|AccountEntity $id
* @param string $alias
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function removeAlias($id, $alias)
public function removeAlias($id, string $alias): self
{
if ($id instanceof AccountEntity){
$account = $id;
......@@ -312,4 +366,49 @@ class Account extends Service {
return $this;
}
/**
* Ajoute une adresse de redirection
*
* @param string|AccountEntity $id
* @param string $forward
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function addForward($id, string $forward): self
{
$account = $id instanceof AccountEntity ? $id : $this->get($id);
$zimbraForward = $account->getForward();
$zimbraForward[] = $forward;
$account->zimbraPrefMailForwardingAddress = implode(',', $zimbraForward);
$this->modify($account);
return $this;
}
/**
* Supprimer une adresse de redirection
*
* @param string|AccountEntity $id
* @param string $forward
* @return self
* @throws \UnicaenZimbra\Exception
*/
public function removeForward($id, string $forward): self
{
$account = $id instanceof AccountEntity ? $id : $this->get($id);
$zimbraForward = $account->getForward();
$zimbraForward = array_filter($zimbraForward, function ($v) use ($forward) {
return $v != $forward;
});
$account->zimbraPrefMailForwardingAddress = implode(',', $zimbraForward);
if(empty($zimbraForward)) {
$account->zimbraPrefMailLocalDeliveryDisabled = false;
}
$this->modify($account);
return $this;
}
}
\ No newline at end of file
<?php
namespace UnicaenZimbra\Service;
trait ZimbraAccountServiceAwareTrait
{
/**
* @var ZimbraAccountService
*/
protected $accountService;
/**
* @param ZimbraAccountService $accountService
*/
public function setZimbraAccountService(ZimbraAccountService $accountService)
{
$this->accountService = $accountService;
}
/**
* @return ZimbraAccountService
*/
public function getZimbraAccountService()
{
return $this->accountService;
}
}
\ No newline at end of file
<?php
namespace UnicaenZimbra\Service;
use Interop\Container\ContainerInterface;
use UnicaenZimbra\Zimbra;
use Zend\ServiceManager\Factory\FactoryInterface;
class ZimbraAccountServiceFactory implements FactoryInterface
{
/**
* Create service
*
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
* @return object|AccountService
*/
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
/**
* @var Zimbra $zimbra
*/
$zimbra = $container->get('zimbra');
$cosService = $container->get(ZimbraCosService::class);
$service = new ZimbraAccountService();
$service->setZimbra($zimbra);
$service->setZimbraCosService($cosService);
return $service;
}
}
\ No newline at end of file
<?php
/**
* Service d'alias Zimbra
*
* @author Laurent LECLUSE <laurent.lecluse at unicaen.fr>
*/
namespace UnicaenZimbra\Service;
use UnicaenZimbra\Zimbra;
use UnicaenZimbra\Entity\Alias as AliasEntity;
use UnicaenZimbra\Exception;
use UnicaenZimbra\Zimbra;
class Alias extends Service {
class ZimbraAliasService extends AbstractService
{
/**
* Retourne la liste des alias
......
<?php
namespace UnicaenZimbra\Service;
trait ZimbraAliasServiceAwareTrait
{
/**
* @var ZimbraAliasService
*/
protected $aliasService;
/**
* @param ZimbraAliasService $aliasService
*/
public function setZimbraAliasService(ZimbraAliasService $aliasService)
{
$this->aliasService = $aliasService;
}
/**
* @return ZimbraAliasService
*/
public function getZimbraAliasService()
{
return $this->aliasService;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment