diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..b00977a30e9ea59180ca02f65c41acdbc00168d5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +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. + diff --git a/Module.php b/Module.php index fc58ad0115529bef3f03766d080b297bf4845ce4..09bd67b513554b16dfaf214e45be1f6fc02d6779 100644 --- a/Module.php +++ b/Module.php @@ -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 diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6bda1aa6b00a253f09b703c50e5f50f58fafa4ba --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# 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 diff --git a/autoload_classmap.php b/autoload_classmap.php deleted file mode 100644 index 1f29108fdf04df2de3fe882de2424564ca50b2f6..0000000000000000000000000000000000000000 --- a/autoload_classmap.php +++ /dev/null @@ -1,4 +0,0 @@ -<?php -// Generated by ZF2's ./bin/classmap_generator.php -return array( -); \ No newline at end of file diff --git a/config/module.config.php b/config/module.config.php index 967aa92d5adf7676768a584b0a4dcce55a4a8b68..a55c05c4473a2f407403f2264b93951827fe0e8a 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -1,9 +1,81 @@ <?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 diff --git a/src/UnicaenZimbra/Entity/Account.php b/src/UnicaenZimbra/Entity/Account.php index a86dc3493a7b163c79ae91b4898041c14c155565..2400b00858471b399ea66efe81ee73e01f20ee56 100644 --- a/src/UnicaenZimbra/Entity/Account.php +++ b/src/UnicaenZimbra/Entity/Account.php @@ -1,11 +1,5 @@ <?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; } /** diff --git a/src/UnicaenZimbra/Entity/Cos.php b/src/UnicaenZimbra/Entity/Cos.php index 26f9052fdcf07053c8e25994260dd98a19f5c344..44522d220a826836bb3d0bd7d43ca52b53b2676e 100644 --- a/src/UnicaenZimbra/Entity/Cos.php +++ b/src/UnicaenZimbra/Entity/Cos.php @@ -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 diff --git a/src/UnicaenZimbra/Options/ModuleOptions.php b/src/UnicaenZimbra/Options/ModuleOptions.php index bd73b15b923c2b36a04ad8ab8e0294864205660a..a598be8910f16fb544d067339c10e79f892266aa 100644 --- a/src/UnicaenZimbra/Options/ModuleOptions.php +++ b/src/UnicaenZimbra/Options/ModuleOptions.php @@ -1,13 +1,9 @@ <?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 { /** diff --git a/src/UnicaenZimbra/Options/ModuleOptionsFactory.php b/src/UnicaenZimbra/Options/ModuleOptionsFactory.php index 6c64914098da0ec65e3b680d8b62c5c8309a37c7..3efe4b341e1234eb78517e90488eda32d5e6b237 100644 --- a/src/UnicaenZimbra/Options/ModuleOptionsFactory.php +++ b/src/UnicaenZimbra/Options/ModuleOptionsFactory.php @@ -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); } diff --git a/src/UnicaenZimbra/Processus/AbstractProcessus.php b/src/UnicaenZimbra/Processus/AbstractProcessus.php new file mode 100644 index 0000000000000000000000000000000000000000..a48b967e7fc3031c110e4c8b0be0260886d747a7 --- /dev/null +++ b/src/UnicaenZimbra/Processus/AbstractProcessus.php @@ -0,0 +1,48 @@ +<?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 diff --git a/src/UnicaenZimbra/Processus/Processus.php b/src/UnicaenZimbra/Processus/Processus.php deleted file mode 100644 index 3b57385fe8db76b23c9c704de646d137f9e8e742..0000000000000000000000000000000000000000 --- a/src/UnicaenZimbra/Processus/Processus.php +++ /dev/null @@ -1,45 +0,0 @@ -<?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 diff --git a/src/UnicaenZimbra/Processus/BoiteGenerique.php b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessus.php similarity index 83% rename from src/UnicaenZimbra/Processus/BoiteGenerique.php rename to src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessus.php index 9d9771b4972c2a167fb4ef376a40918c4f8304fc..505e5ce82bfb2e86dd3b2e27c5498691d250b96a 100644 --- a/src/UnicaenZimbra/Processus/BoiteGenerique.php +++ b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessus.php @@ -1,11 +1,5 @@ <?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); diff --git a/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusAwareTrait.php b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..951de4c1cba7fa69f3c28773ff6e7c456523e9fd --- /dev/null +++ b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusAwareTrait.php @@ -0,0 +1,28 @@ +<?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 diff --git a/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusFactory.php b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9d46d33b07711bce0499f3e726b5ed2648ed5c0c --- /dev/null +++ b/src/UnicaenZimbra/Processus/ZimbraBoiteGeneriqueProcessusFactory.php @@ -0,0 +1,63 @@ +<?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 diff --git a/src/UnicaenZimbra/Service/AbstractService.php b/src/UnicaenZimbra/Service/AbstractService.php new file mode 100644 index 0000000000000000000000000000000000000000..9a0ad3a7eba023c5a968dfdf6bfa584925b396ad --- /dev/null +++ b/src/UnicaenZimbra/Service/AbstractService.php @@ -0,0 +1,49 @@ +<?php + +namespace UnicaenZimbra\Service; + +use UnicaenZimbra\Zimbra; + +abstract class AbstractService +{ + /** + * @var Zimbra + */ + protected $zimbra; + + /** + * Nombre d'occurences renvoyées par la dernière requête en date + * + * @var integer + */ + protected $count; + + /** + * @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; + } + + /** + * Retourne le nombre d'occurences renvoyées par la dernière requête renvoyant des données + * + * @return integer + */ + public function getLastCount() + { + return $this->count; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Service.php b/src/UnicaenZimbra/Service/Service.php deleted file mode 100644 index 8e57434311f9fe9872b70e78ed269ecde7a99202..0000000000000000000000000000000000000000 --- a/src/UnicaenZimbra/Service/Service.php +++ /dev/null @@ -1,74 +0,0 @@ -<?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 { - - /** - * Nombre d'occurences renvoyées par la dernière requête en date - * - * @var integer - */ - protected $count; - - /** - * @var ServiceManager - */ - protected $serviceManager; - - - - - - /** - * - * @return Zimbra - */ - public function getZimbra() - { - return $this->getServiceManager()->get('zimbra'); - } - - /** - * 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; - } - - /** - * Retourne le nombre d'occurences renvoyées par la dernière requête renvoyant des données - * - * @return integer - */ - public function getLastCount() - { - return $this->count; - } -} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Account.php b/src/UnicaenZimbra/Service/ZimbraAccountService.php similarity index 56% rename from src/UnicaenZimbra/Service/Account.php rename to src/UnicaenZimbra/Service/ZimbraAccountService.php index 31f6ab5a1db0465eb1d7758f228ebf31f0698342..3b259f33f95acc8682ef6c8b98ad7c21e54461ac 100644 --- a/src/UnicaenZimbra/Service/Account.php +++ b/src/UnicaenZimbra/Service/ZimbraAccountService.php @@ -1,17 +1,14 @@ <?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,25 +45,28 @@ 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( - '@content' => $value, - '@attributes' => array( 'by' => $by ) + '@content' => $value, + '@attributes' => array('by' => $by) ) ); @@ -73,7 +75,8 @@ class Account extends Service { $account = new AccountEntity; $account->populate($accounts[0]); $this->count = 1; - return $account; + + return $account; } /** @@ -83,12 +86,13 @@ 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, - 'limit' => $limit, + 'query' => $query, + 'limit' => $limit, 'offset' => $offset ); $accounts = $this->getZimbra()->request('SearchAccountsRequest', array(), $params); @@ -100,6 +104,7 @@ class Account extends Service { $account->populate($accountXml); $results[$account->getId()] = $account; } + return $results; } @@ -112,16 +117,17 @@ 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(); if (!empty($sort)) { - list( $attributes['sortBy'], $attributes['sortAscending'] ) = $sort; + list($attributes['sortBy'], $attributes['sortAscending']) = $sort; } - if (! empty($targetServer)) { + if (!empty($targetServer)) { $this->getZimbra()->addContextChild('targetServer', $targetServer); } $response = $this->getZimbra()->request('GetQuotaUsageRequest', $attributes); @@ -132,9 +138,9 @@ class Account extends Service { $b = explode('.', $account[0]); if (!in_array($b[0], $this->getZimbra()->getSystemUsers())) { - $results[(string) $quota['name']] = array( - 'used' => (integer) $quota['used'], - 'limit' => (integer) $quota['limit'], + $results[(string)$quota['name']] = array( + 'used' => (integer)$quota['used'], + 'limit' => (integer)$quota['limit'], ); } } @@ -143,23 +149,25 @@ 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){ + if ($id instanceof AccountEntity) { $aid = $id->getId(); $account = $id; - }else{ + } else { $aid = $id; $account = new AccountEntity; } $attributes = array( - 'id' => $aid, + 'id' => $aid, 'newName' => $newName ); @@ -167,27 +175,29 @@ 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 - * - * @param string|AccountEntity $value + * Créé un nouveau compte + * + * @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(); - if ($value instanceof AccountEntity){ + if ($value instanceof AccountEntity) { $attrs['name'] = $value->getName(); $params = $value->getConvertedChanges(); if (isset($params['name'])) unset($params['name']); - $params = $this->getZimbra()->makeZimbraAttributes( $params ); + $params = $this->getZimbra()->makeZimbraAttributes($params); $account = $value; - }elseif(is_string($value)){ + } elseif (is_string($value)) { $attrs['name'] = $value; $params = array(); $account = new AccountEntity; @@ -199,79 +209,73 @@ 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) { $attrs = array( - 'id' => $account->getId(), + 'id' => $account->getId(), ); - $params = $this->getZimbra()->makeZimbraAttributes( $account->getConvertedChanges() ); + $params = $this->getZimbra()->makeZimbraAttributes($account->getConvertedChanges()); $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){ + if ($id instanceof AccountEntity) { $account = $id; $id = $id->getId(); - }else{ + } else { $account = null; } $attributes = array( - 'id' => $id, + 'id' => $id, 'alias' => $alias ); - $this->getZimbra()->request('AddAccountAliasRequest', $attributes ); + $this->getZimbra()->request('AddAccountAliasRequest', $attributes); - if (! empty($account)){ + if (!empty($account)) { $lastAlias = $account->getAlias(); $lastAlias[] = $alias; $account->zimbraMailAlias = $lastAlias; @@ -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 diff --git a/src/UnicaenZimbra/Service/ZimbraAccountServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraAccountServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..171cd4d45f8ae39e04af077430d1706a046c9015 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraAccountServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?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 diff --git a/src/UnicaenZimbra/Service/ZimbraAccountServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraAccountServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..db0c746f503f359dc1cbd2d98d521059f56d4fdb --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraAccountServiceFactory.php @@ -0,0 +1,33 @@ +<?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 diff --git a/src/UnicaenZimbra/Service/Alias.php b/src/UnicaenZimbra/Service/ZimbraAliasService.php similarity index 94% rename from src/UnicaenZimbra/Service/Alias.php rename to src/UnicaenZimbra/Service/ZimbraAliasService.php index f1ce6bc5282bbccbf684aab8447d3fda90d85f9c..56e75b24fb9856f49de33a1541c19023ed2b3ccb 100644 --- a/src/UnicaenZimbra/Service/Alias.php +++ b/src/UnicaenZimbra/Service/ZimbraAliasService.php @@ -1,18 +1,13 @@ <?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 diff --git a/src/UnicaenZimbra/Service/ZimbraAliasServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraAliasServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..6f27a5e8ea6b6538072c40e4ed0944cea2374d7d --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraAliasServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?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 diff --git a/src/UnicaenZimbra/Service/ZimbraAliasServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraAliasServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9e928d69dfe3292e2cc26fc2cde124eacf43bcef --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraAliasServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraAliasServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|AliasService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraAliasService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Cos.php b/src/UnicaenZimbra/Service/ZimbraCosService.php similarity index 96% rename from src/UnicaenZimbra/Service/Cos.php rename to src/UnicaenZimbra/Service/ZimbraCosService.php index a7219e626dc54c85fc8ed60afd0525e1918f508e..cd3d087480d4897bcd8e2a8882b3e17a89d7c77c 100644 --- a/src/UnicaenZimbra/Service/Cos.php +++ b/src/UnicaenZimbra/Service/ZimbraCosService.php @@ -10,7 +10,8 @@ namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Cos as CosEntity; -class Cos extends Service { +class ZimbraCosService extends AbstractService +{ /** * Retourne la liste des COS @@ -49,6 +50,7 @@ class Cos extends Service { /** * Retourne un COS en fonction de la valeur donnée et de son type (son nom par défaut) + * * @param string $value * @param string $by * @return CosEntity diff --git a/src/UnicaenZimbra/Service/ZimbraCosServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraCosServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..eb14b9d980c64c7caebef2016ca68e0a435044c9 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraCosServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraCosServiceAwareTrait +{ + /** + * @var ZimbraCosService + */ + protected $cosService; + + + /** + * @param ZimbraCosService $cosService + */ + public function setZimbraCosService(ZimbraCosService $cosService) + { + $this->cosService = $cosService; + } + + /** + * @return ZimbraCosService + */ + public function getZimbraCosService() + { + return $this->cosService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraCosServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraCosServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..2396488ee7321b6d961700265f91c6eb3fda1196 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraCosServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraCosServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|CosService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraCosService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/DistributionList.php b/src/UnicaenZimbra/Service/ZimbraDistributionListService.php similarity index 98% rename from src/UnicaenZimbra/Service/DistributionList.php rename to src/UnicaenZimbra/Service/ZimbraDistributionListService.php index fc0d8838db5c6e4767da23cba81f098c2bd1d635..e52f6139988f36581cebb7b91abfa3f6cac6bc78 100644 --- a/src/UnicaenZimbra/Service/DistributionList.php +++ b/src/UnicaenZimbra/Service/ZimbraDistributionListService.php @@ -1,18 +1,13 @@ <?php -/** - * Service de liste de distribution Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\DistributionList as DistributionListEntity; use UnicaenZimbra\Entity\Account as AccountEntity; use UnicaenZimbra\Zimbra; -class DistributionList extends Service { +class ZimbraDistributionListService extends AbstractService +{ /** * Retourne la liste des listes de distribution diff --git a/src/UnicaenZimbra/Service/ZimbraDistributionListServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraDistributionListServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..30ed4530bd44675b77fbcc152c8c86a31b64e66c --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraDistributionListServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraDistributionListServiceAwareTrait +{ + /** + * @var ZimbraDistributionListService + */ + protected $distributionListService; + + + /** + * @param ZimbraDistributionListService $distributionListService + */ + public function setZimbraDistributionListService(ZimbraDistributionListService $distributionListService) + { + $this->distributionListService = $distributionListService; + } + + /** + * @return ZimbraDistributionListService + */ + public function getZimbraDistributionListService() + { + return $this->distributionListService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraDistributionListServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraDistributionListServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..a18865352bed107bdcff47c18efc42be3b3c987c --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraDistributionListServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraDistributionListServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|DistributionListService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraDistributionListService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Domain.php b/src/UnicaenZimbra/Service/ZimbraDomainService.php similarity index 94% rename from src/UnicaenZimbra/Service/Domain.php rename to src/UnicaenZimbra/Service/ZimbraDomainService.php index 647e52d96bc1fa041cab93722aa5e950da534b89..276c57c5bbab652d113a53842b92773b1e292d03 100644 --- a/src/UnicaenZimbra/Service/Domain.php +++ b/src/UnicaenZimbra/Service/ZimbraDomainService.php @@ -1,16 +1,12 @@ <?php -/** - * Service de domaines Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Domain as DomainEntity; -class Domain extends Service { +class ZimbraDomainService extends AbstractService +{ /** * Retourne la liste des domaines diff --git a/src/UnicaenZimbra/Service/ZimbraDomainServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraDomainServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..7cb9a2acc85c2cc7e4b473ecd00e8713ef70e5c8 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraDomainServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraDomainServiceAwareTrait +{ + /** + * @var ZimbraDomainService + */ + protected $domainService; + + + /** + * @param ZimbraDomainService $domainService + */ + public function setZimbraDomainService(ZimbraDomainService $domainService) + { + $this->domainService = $domainService; + } + + /** + * @return ZimbraDomainService + */ + public function getZimbraDomainService() + { + return $this->domainService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraDomainServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraDomainServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..5cb11989697f254e436eec867fe39aaf95b572f4 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraDomainServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraDomainServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|DomainService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraDomainService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Filter.php b/src/UnicaenZimbra/Service/ZimbraFilterService.php similarity index 96% rename from src/UnicaenZimbra/Service/Filter.php rename to src/UnicaenZimbra/Service/ZimbraFilterService.php index 65a6f564bc8c8f1a516062f7cc1e6ad874044943..7c7a38972d3b72cac2849cd373589267a4459a22 100644 --- a/src/UnicaenZimbra/Service/Filter.php +++ b/src/UnicaenZimbra/Service/ZimbraFilterService.php @@ -1,18 +1,14 @@ <?php -/** - * Service de filtres Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Filter\Filter as FilterEntity; use UnicaenZimbra\Entity\Account as AccountEntity; use UnicaenZimbra\Exception; -class Filter extends Service { +class ZimbraFilterService extends AbstractService +{ + use ZimbraAccountServiceAwareTrait; /** * URN local @@ -56,7 +52,7 @@ class Filter extends Service { */ public function getAccount(){ if (is_string($this->account)){ - return $this->getServiceManager()->get('zimbraServiceAccount')->get($this->account); + return $this->getZimbraAccountService()->get($this->account); }else{ return $this->account; } diff --git a/src/UnicaenZimbra/Service/ZimbraFilterServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraFilterServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..024a3dafec10dbb18a06a77dccf69db912b47e1c --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraFilterServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraFilterServiceAwareTrait +{ + /** + * @var ZimbraFilterService + */ + protected $filterService; + + + /** + * @param ZimbraFilterService $filterService + */ + public function setZimbraFilterService(ZimbraFilterService $filterService) + { + $this->filterService = $filterService; + } + + /** + * @return ZimbraFilterService + */ + public function getZimbraFilterService() + { + return $this->filterService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraFilterServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraFilterServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..b6a2402d07c9aae509392e78f060a1d9113ae082 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraFilterServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraFilterServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|FilterService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + $accountService = $container->get(ZimbraAccountService::class); + + $service = new ZimbraFilterService(); + $service->setZimbra($zimbra); + $service->setZimbraAccountService($accountService); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Folder.php b/src/UnicaenZimbra/Service/ZimbraFolderService.php similarity index 97% rename from src/UnicaenZimbra/Service/Folder.php rename to src/UnicaenZimbra/Service/ZimbraFolderService.php index 1c514038da3c8a1e414d983922aef6788ec8a9d0..95b226a5828dddd4102b3bc61f6a998855611fcc 100644 --- a/src/UnicaenZimbra/Service/Folder.php +++ b/src/UnicaenZimbra/Service/ZimbraFolderService.php @@ -1,11 +1,5 @@ <?php -/** - * Service de comptes mail Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Folder as FolderEntity; @@ -14,7 +8,9 @@ use UnicaenZimbra\Entity\Grant as GrantEntity; use UnicaenZimbra\Entity\Link as LinkEntity; use UnicaenZimbra\Exception; -class Folder extends Service { +class ZimbraFolderService extends AbstractService +{ + use ZimbraAccountServiceAwareTrait; /** * Anvoie un mail lors d'un partage sur un destinataire @@ -73,7 +69,7 @@ class Folder extends Service { */ public function getAccount(){ if (is_string($this->account)){ - return $this->getServiceManager()->get('zimbraServiceAccount')->get($this->account); + return $this->getZimbraAccountService()->get($this->account); }else{ return $this->account; } @@ -360,12 +356,12 @@ class Folder extends Service { switch( $action ){ case self::GRANT_ACTION_SENDMAIL: /* Envoi d'un mail au destinataire pour le partage */ - if (empty($account)) $account = $this->getServiceManager()->get('zimbraServiceAccount')->get($accountId,'id'); + if (empty($account)) $account = $this->getZimbraAccountService()->get($accountId,'id'); $this->sendRevokeNotification($id, $account); break; case self::GRANT_ACTION_LINK: /* Suppression automatique du lien vers le dossier partagé sur le destinataire en cas de partage de usr à usr uniquement */ - if (empty($account)) $account = $this->getServiceManager()->get('zimbraServiceAccount')->get($accountId,'id'); + if (empty($account)) $account = $this->getZimbraAccountService()->get($accountId,'id'); $this->deleteMountPoint($id, $account); break; } diff --git a/src/UnicaenZimbra/Service/ZimbraFolderServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraFolderServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..df149af1d373af267d9c3eef01cf2ed96638ba5d --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraFolderServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraFolderServiceAwareTrait +{ + /** + * @var ZimbraFolderService + */ + protected $folderService; + + + /** + * @param ZimbraFolderService $folderService + */ + public function setZimbraFolderService(ZimbraFolderService $folderService) + { + $this->folderService = $folderService; + } + + /** + * @return ZimbraFolderService + */ + public function getZimbraFolderService() + { + return $this->folderService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraFolderServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraFolderServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9c1635da9518cc9ea00a478faabccd0366fa6857 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraFolderServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraFolderServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|FolderService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + $accountService = $container->get(ZimbraAccountService::class); + + $service = new ZimbraFolderService(); + $service->setZimbra($zimbra); + $service->setZimbraAccountService($accountService); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Gal.php b/src/UnicaenZimbra/Service/ZimbraGalService.php similarity index 87% rename from src/UnicaenZimbra/Service/Gal.php rename to src/UnicaenZimbra/Service/ZimbraGalService.php index 03aaea754b78c5acc9d3cc1fa79f45aefdd49f91..e4e7fec80d6cc3e2ba84b9ab6765ca49cf52dc4e 100644 --- a/src/UnicaenZimbra/Service/Gal.php +++ b/src/UnicaenZimbra/Service/ZimbraGalService.php @@ -1,17 +1,12 @@ <?php -/** - * Service de classes de services (COS) Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Gal as GalEntity; use UnicaenZimbra\Zimbra; -class Gal extends Service { +class ZimbraGalService extends AbstractService +{ /** * Retourne la liste des boites mail diff --git a/src/UnicaenZimbra/Service/ZimbraGalServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraGalServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..ab544e6956289bf0fb3b8dd8102fef20be29be8b --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraGalServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraGalServiceAwareTrait +{ + /** + * @var ZimbraGalService + */ + protected $galService; + + + /** + * @param ZimbraGalService $galService + */ + public function setZimbraGalService(ZimbraGalService $galService) + { + $this->galService = $galService; + } + + /** + * @return ZimbraGalService + */ + public function getZimbraGalService() + { + return $this->galService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraGalServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraGalServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..de682618ae7a557044477a0f5e35328f773e092f --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraGalServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraGalServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|GalService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraGalService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Identity.php b/src/UnicaenZimbra/Service/ZimbraIdentityService.php similarity index 95% rename from src/UnicaenZimbra/Service/Identity.php rename to src/UnicaenZimbra/Service/ZimbraIdentityService.php index a4964129529f0d2a71cb5b0073e1f11a4ea15971..d23cbf6feaaf172fcccec32943725005d4470ee6 100644 --- a/src/UnicaenZimbra/Service/Identity.php +++ b/src/UnicaenZimbra/Service/ZimbraIdentityService.php @@ -1,18 +1,14 @@ <?php -/** - * Service de gestion d'identités de comptes Zimbra - * - * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Identity as IdentityEntity; use UnicaenZimbra\Entity\Account as AccountEntity; use UnicaenZimbra\Exception; -class Identity extends Service { +class ZimbraIdentityService extends AbstractService +{ + use ZimbraAccountServiceAwareTrait; /** * URN local @@ -56,7 +52,7 @@ class Identity extends Service { */ public function getAccount(){ if (is_string($this->account)){ - return $this->getServiceManager()->get('zimbraServiceAccount')->get($this->account); + return $this->getZimbraAccountService()->get($this->account); }else{ return $this->account; } diff --git a/src/UnicaenZimbra/Service/ZimbraIdentityServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraIdentityServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..8b1d20c4e15f010228ad40d7b86dd4f6366b07ac --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraIdentityServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraIdentityServiceAwareTrait +{ + /** + * @var ZimbraIdentityService + */ + protected $identityService; + + + /** + * @param ZimbraIdentityService $identityService + */ + public function setZimbraIdentityService(ZimbraIdentityService $identityService) + { + $this->identityService = $identityService; + } + + /** + * @return ZimbraIdentityService + */ + public function getZimbraIdentityService() + { + return $this->identityService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraIdentityServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraIdentityServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..4e9ae220452f13f097a634bf35320c986f87638c --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraIdentityServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraIdentityServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|IdentityService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + $accountService = $container->get(ZimbraAccountService::class); + + $service = new ZimbraIdentityService(); + $service->setZimbra($zimbra); + $service->setZimbraAccountService($accountService); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/MailBox.php b/src/UnicaenZimbra/Service/ZimbraMailBoxService.php similarity index 92% rename from src/UnicaenZimbra/Service/MailBox.php rename to src/UnicaenZimbra/Service/ZimbraMailBoxService.php index 540d5475d019e32e3fe3539f91417c89d332f142..d3b4fca9687e5f69d07bbddae2e098e6f5a17fcd 100644 --- a/src/UnicaenZimbra/Service/MailBox.php +++ b/src/UnicaenZimbra/Service/ZimbraMailBoxService.php @@ -1,18 +1,13 @@ <?php -/** - * Service de classes de services (COS) Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; -use UnicaenZimbra\Entity\MailBox as MailBoxEntity; use UnicaenZimbra\Entity\Account as AccountEntity; +use UnicaenZimbra\Entity\MailBox as MailBoxEntity; use UnicaenZimbra\Zimbra; -class MailBox extends Service { +class ZimbraMailBoxService extends AbstractService +{ /** * Retourne la liste des boites mail diff --git a/src/UnicaenZimbra/Service/ZimbraMailBoxServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraMailBoxServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..55177e4bfadfecf25bc7c96d628dba356cf06377 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraMailBoxServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraMailBoxServiceAwareTrait +{ + /** + * @var ZimbraMailBoxService + */ + protected $mailBoxService; + + + /** + * @param ZimbraMailBoxService $mailBoxService + */ + public function setZimbraMailBoxService(ZimbraMailBoxService $mailBoxService) + { + $this->mailBoxService = $mailBoxService; + } + + /** + * @return ZimbraMailBoxService + */ + public function getZimbraMailBoxService() + { + return $this->mailBoxService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraMailBoxServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraMailBoxServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..73545bdf12f9094183b1f32d80d04fa5fc1ebfc5 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraMailBoxServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraMailBoxServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|MailBoxService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraMailBoxService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Resource.php b/src/UnicaenZimbra/Service/ZimbraResourceService.php similarity index 97% rename from src/UnicaenZimbra/Service/Resource.php rename to src/UnicaenZimbra/Service/ZimbraResourceService.php index 8308077e064f8e92b050671d7f060e0f7cef1ecf..3850ee4ae6c2e4e8872e3455e9c094c8ce9456f9 100644 --- a/src/UnicaenZimbra/Service/Resource.php +++ b/src/UnicaenZimbra/Service/ZimbraResourceService.php @@ -1,17 +1,12 @@ <?php -/** - * Service de ressources Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Resource as ResourceEntity; use UnicaenZimbra\Zimbra; -class Resource extends Service{ +class ZimbraResourceService extends AbstractService +{ /** * Retourne la liste des ressources diff --git a/src/UnicaenZimbra/Service/ZimbraResourceServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraResourceServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..21d23ba994909b7060e8dc16ce5fc2120825e492 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraResourceServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraResourceServiceAwareTrait +{ + /** + * @var ZimbraResourceService + */ + protected $resourceService; + + + /** + * @param ZimbraResourceService $resourceService + */ + public function setZimbraResourceService(ZimbraResourceService $resourceService) + { + $this->resourceService = $resourceService; + } + + /** + * @return ZimbraResourceService + */ + public function getZimbraResourceService() + { + return $this->resourceService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraResourceServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraResourceServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..72739d9b7c76cf175bee597d7e6a35d9c427dfd0 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraResourceServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraResourceServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|ResourceService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraResourceService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Right.php b/src/UnicaenZimbra/Service/ZimbraRightService.php similarity index 91% rename from src/UnicaenZimbra/Service/Right.php rename to src/UnicaenZimbra/Service/ZimbraRightService.php index 44c668bcc1209db567defed2e530973f1a696f2e..e56148bef06ccec162b200864d879c50e43de6dd 100644 --- a/src/UnicaenZimbra/Service/Right.php +++ b/src/UnicaenZimbra/Service/ZimbraRightService.php @@ -4,14 +4,7 @@ namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Right as RightEntity; -/** - * @version $Id$ - * - * Service de droits Zimbra - * - * @author David Surville <david.surville at unicaen.fr> - */ -class Right extends Service +class ZimbraRightService extends AbstractService { /** * Returns all grants on the specified target entry, or all grants granted diff --git a/src/UnicaenZimbra/Service/ZimbraRightServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraRightServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..9ad1fbb47235b74cc298363286aad76ce8da31bf --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraRightServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraRightServiceAwareTrait +{ + /** + * @var ZimbraRightService + */ + protected $rightService; + + + /** + * @param ZimbraRightService $rightService + */ + public function setZimbraRightService(ZimbraRightService $rightService) + { + $this->rightService = $rightService; + } + + /** + * @return ZimbraRightService + */ + public function getZimbraRightService() + { + return $this->rightService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraRightServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraRightServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..17804810a0b9315a58baab395f6a438d9eb84931 --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraRightServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraRightServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|RightService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraRightService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/Server.php b/src/UnicaenZimbra/Service/ZimbraServerService.php similarity index 90% rename from src/UnicaenZimbra/Service/Server.php rename to src/UnicaenZimbra/Service/ZimbraServerService.php index 8dfa0b7781a949be5ff82447c185aa8797644073..0be5d7d2849f2b1217e877fd6ba6cd86c2f3fe72 100644 --- a/src/UnicaenZimbra/Service/Server.php +++ b/src/UnicaenZimbra/Service/ZimbraServerService.php @@ -1,16 +1,11 @@ <?php -/** - * Service de classes de services (COS) Zimbra - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ - namespace UnicaenZimbra\Service; use UnicaenZimbra\Entity\Server as ServerEntity; -class Server extends Service { +class ZimbraServerService extends AbstractService +{ /** * Retourne la liste des serveurs diff --git a/src/UnicaenZimbra/Service/ZimbraServerServiceAwareTrait.php b/src/UnicaenZimbra/Service/ZimbraServerServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..d173f3d148188d1f4cdfe5392f8bade0c5e01c3b --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraServerServiceAwareTrait.php @@ -0,0 +1,28 @@ +<?php + +namespace UnicaenZimbra\Service; + +trait ZimbraServerServiceAwareTrait +{ + /** + * @var ZimbraServerService + */ + protected $serverService; + + + /** + * @param ZimbraServerService $serverService + */ + public function setZimbraServerService(ZimbraServerService $serverService) + { + $this->serverService = $serverService; + } + + /** + * @return ZimbraServerService + */ + public function getZimbraServerService() + { + return $this->serverService; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Service/ZimbraServerServiceFactory.php b/src/UnicaenZimbra/Service/ZimbraServerServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..62cf2fb0c829f9b5dfc128619c87eb48e6b0625b --- /dev/null +++ b/src/UnicaenZimbra/Service/ZimbraServerServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra\Service; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Zimbra; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraServerServiceFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return object|ServerService + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var Zimbra $zimbra + */ + $zimbra = $container->get('zimbra'); + + $service = new ZimbraServerService(); + $service->setZimbra($zimbra); + + return $service; + } +} \ No newline at end of file diff --git a/src/UnicaenZimbra/Zimbra.php b/src/UnicaenZimbra/Zimbra.php index 6259a3b5fe15aa24e14eb4d9982ab7807ef75698..a4f464f8f9d3276ecaa3fba32954aae690a762c7 100644 --- a/src/UnicaenZimbra/Zimbra.php +++ b/src/UnicaenZimbra/Zimbra.php @@ -1,21 +1,12 @@ <?php -/** - * Zimbra API - * - * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> - */ namespace UnicaenZimbra; -use Zend\ServiceManager\ServiceManager; -use Zend\ServiceManager\ServiceManagerAwareInterface; -use UnicaenZimbra\Options\ModuleOptions; use SimpleXMLElement; -use UnicaenZimbra\Exception; +use UnicaenZimbra\Options\ModuleOptions; -class Zimbra implements ServiceManagerAwareInterface +class Zimbra { - /** * Zimbra ID pour le puvlic (utile pour gérer les droits de partage) */ @@ -30,7 +21,7 @@ class Zimbra implements ServiceManagerAwareInterface * Limite de recherche par défaut */ const DEFAULT_LIMIT = 10; - + /** * Offset par défaut */ @@ -38,29 +29,24 @@ class Zimbra implements ServiceManagerAwareInterface /** * The entire XML message - * - * @var SimpleXMLElement + * + * @var SimpleXMLElement */ private $message; - + /** - * Pointing to the context element - * + * Pointing to the context element + * * @var SimpleXMLElement */ private $context; - + /** * Curl Handle - * + * * @var resource */ private $curlHandle; - - /** - * @var ServiceManager - */ - protected $serviceManager; /** * @var ModuleOptions @@ -75,8 +61,7 @@ class Zimbra implements ServiceManagerAwareInterface protected $connected = false; /** - * - * @var array + * @var array */ private $systemUsers = array( "admin", @@ -86,7 +71,7 @@ class Zimbra implements ServiceManagerAwareInterface "virus-quarantine", "galsync" ); - + /** * * @var string @@ -94,39 +79,12 @@ class Zimbra implements ServiceManagerAwareInterface private $authToken; - - - /** - * Get service manager - * - * @return ServiceManager + * @param ModuleOptions $moduleOptions */ - public function getServiceManager() + public function setOptions(ModuleOptions $moduleOptions) { - return $this->serviceManager; - } - - /** - * Set service manager - * - * @param ServiceManager $serviceManager - * @return self - */ - public function setServiceManager(ServiceManager $serviceManager) - { - $this->serviceManager = $serviceManager; - return $this; - } - - /** - * @param ModuleOptions $options - * @return self - */ - public function setOptions(ModuleOptions $options) - { - $this->options = $options; - return $this; + $this->options = $moduleOptions; } /** @@ -134,16 +92,13 @@ class Zimbra implements ServiceManagerAwareInterface */ public function getOptions() { - if (empty($this->options)) { - $this->setOptions($this->getServiceManager()->get('zimbraOptions')); - } return $this->options; } /** * Retourne la liste des utilisateurs système de Zimbra - * - * @return string[] + * + * @return array|string[] */ public function getSystemUsers() { @@ -152,10 +107,12 @@ class Zimbra implements ServiceManagerAwareInterface /** * Connexion au serveur Zimbra - * + * * @return self + * @throws Exception */ - public function connect(){ + public function connect() + { $options = $this->getOptions(); $this->curlHandle = curl_init(); @@ -181,7 +138,7 @@ class Zimbra implements ServiceManagerAwareInterface /** * Recherche dans l'annuaire LDAP de Zimbra - * + * * @param string $domain * @param integer $limit * @param integer $offset @@ -189,6 +146,7 @@ class Zimbra implements ServiceManagerAwareInterface * @param string $sort * @param string $query * @return SimpleXMLElement + * @throws Exception */ public function searchDirectory($domain, $limit = self::DEFAULT_LIMIT, $offset = self::DEFAULT_OFFSET, $types = 'accounts', $sort = null, $query = null) { @@ -204,11 +162,11 @@ class Zimbra implements ServiceManagerAwareInterface } $attributes = array( - 'limit' => $limit, + 'limit' => $limit, 'offset' => $offset, - 'types' => $types, + 'types' => $types, ); - if ($types != 'coses'){ // pas de domaine pris en compte quand on recherche des COS + if ($types != 'coses') { // pas de domaine pris en compte quand on recherche des COS $attributes['domain'] = $domain; } @@ -228,13 +186,14 @@ class Zimbra implements ServiceManagerAwareInterface * @param string $value * @param string $by * @param string $types - * @return boolean + * @return bool + * @throws Exception */ - public function exists( $value, $by='name', $types='accounts') + public function exists($value, $by = 'name', $types = 'accounts') { $domain = null; $queryField = null; - switch($by){ + switch ($by) { case 'id': $queryField = 'zimbraId'; break; @@ -245,28 +204,28 @@ class Zimbra implements ServiceManagerAwareInterface throw new Exception('La valeur de $by n\'est pas correcte.'); } - if ($types == 'accounts'){ + if ($types == 'accounts') { $ldapQuery = "(&"; $ldapQuery .= "($queryField=$value)"; $ldapQuery .= '(!(zimbraIsSystemAccount=TRUE))'; $ldapQuery .= ')'; - }elseif($types == 'aliases' && $by == 'name'){ - list( $uid, $domain ) = explode( '@', $value ); + } elseif ($types == 'aliases' && $by == 'name') { + list($uid, $domain) = explode('@', $value); $ldapQuery = "uid=$uid"; - }elseif($types == 'domains' && $by == 'name'){ + } elseif ($types == 'domains' && $by == 'name') { $ldapQuery = "zimbraDomainName=$value"; - }elseif($types == 'coses' && $by == 'name'){ + } elseif ($types == 'coses' && $by == 'name') { $ldapQuery = "cn=$value"; - }else{ + } else { $ldapQuery = "$queryField=$value"; } $attributes = array( - 'types' => $types, + 'types' => $types, 'countOnly' => 1 ); - if (! empty($domain) && $types != 'coses'){ // pas de domaine pris en compte quand on recherche des COS + if (!empty($domain) && $types != 'coses') { // pas de domaine pris en compte quand on recherche des COS $attributes['domain'] = $domain; } @@ -282,10 +241,11 @@ class Zimbra implements ServiceManagerAwareInterface * * $id = Zimbra ID * $password = nouveau mot de passe (en clair) - * + * * @param string $id * @param string $password * @return self + * @throws Exception */ public function setPassword($id, $password) { @@ -299,26 +259,27 @@ class Zimbra implements ServiceManagerAwareInterface /** * Retourne les quotas d'utilisation du domaine - * + * * @param string $domain - * @return array + * @return int[] + * @throws Exception */ public function getTotalQuota($domain) { $result = array( - 'diskUsage' => 0, + 'diskUsage' => 0, 'diskProvisioned' => 0, - 'diskLimit' => 0, - 'mailTotal' => 0, - 'mailLimit' => 0, + 'diskLimit' => 0, + 'mailTotal' => 0, + 'mailLimit' => 0, ); $allServers = $this->request('GetAllServersRequest', array()); - + foreach ($allServers->children()->GetAllServersResponse->children() as $server) { - $this->addContextChild('targetServer', (string) $server['id']); + $this->addContextChild('targetServer', (string)$server['id']); $response = $this->request('GetQuotaUsageRequest', array('domain' => $domain)); - $result['mailTotal'] += (string) $response->children()->GetQuotaUsageResponse['searchTotal']; + $result['mailTotal'] += (string)$response->children()->GetQuotaUsageResponse['searchTotal']; foreach ($response->children()->GetQuotaUsageResponse->children() as $quota) { $b = explode('@', $quota['name']); @@ -330,7 +291,7 @@ class Zimbra implements ServiceManagerAwareInterface $result['diskUsage'] += $quota['used']; $result['diskProvisioned'] += $quota['limit']; } elseif ($b[0] = 'postmaster') { - $result['diskLimit'] = (int) $quota['limit']; + $result['diskLimit'] = (int)$quota['limit']; $result['mailTotal'] -= 1; } else { $result['mailTotal'] -= 1; @@ -341,61 +302,69 @@ class Zimbra implements ServiceManagerAwareInterface $params = array( 'domain' => array( '@content' => $domain, - '@attributes' => array( 'by' => 'name' ), + '@attributes' => array('by' => 'name'), ) ); $response = $this->request('GetDomainRequest', array('attrs' => 'zimbraDomainMaxAccounts'), $params); $domains = $response->children()->GetDomainResponse->children(); - $result['mailLimit'] = (int) $domains[0]->zimbraDomainMaxAccounts; + $result['mailLimit'] = (int)$domains[0]->zimbraDomainMaxAccounts; return $result; } /** * Envoie une requête qui ne fait rien + * + * @throws Exception */ public function noOp() { $this->request('NoOpRequest'); } - public function addContextChild($name, $value, $attributes=array()) + /** + * @param string $name + * @param string $value + * @param array $attributes + */ + public function addContextChild($name, $value, $attributes = []) { if (isset($this->context->$name)) { $this->context->$name = $value; - if (array() != $attributes){ - foreach($attributes as $key => $value ){ + if (array() != $attributes) { + foreach ($attributes as $key => $value) { if ((string)$this->context->$name->attributes()->$key != $value) $this->context->$name->addAttribute($key, $value); } } } else { $child = $this->context->addChild($name, $value); - if (array() != $attributes){ - foreach($attributes as $key => $value ){ + if (array() != $attributes) { + foreach ($attributes as $key => $value) { $child->addAttribute($key, $value); } - } + } } } /** * Effectue une requête sur le serveur SOAP - * + * * @param string $name * @param array $attributes * @param array $params * @param string $urn * @return SimpleXMLElement + * @throws Exception */ - public function request($name, array $attributes = array(), array $params = array(), $urn='urn:zimbraAdmin') + public function request($name, array $attributes = array(), array $params = array(), $urn = 'urn:zimbraAdmin') { - if (! $this->connected && 'AuthRequest' != $name ) $this->connect(); + if (!$this->connected && 'AuthRequest' != $name) $this->connect(); unset($this->message->children('soap', true)->Body); $body = $this->message->addChild('Body'); - $this->arrayToNode($body, $name, $attributes, $params, $urn ); + $this->arrayToNode($body, $name, $attributes, $params, $urn); if ($this->getOptions()->getDebugMode()) $this->debugXml($this->message->asXml()); curl_setopt($this->curlHandle, CURLOPT_POSTFIELDS, $this->message->asXml()); $soapMessage = curl_exec($this->curlHandle); @@ -409,7 +378,7 @@ class Zimbra implements ServiceManagerAwareInterface $fault = $xml->children('soap', true)->Body->Fault; if ($fault) { - throw new Exception( $fault->Reason->Text ); + throw new Exception($fault->Reason->Text); } return $xml->children('soap', true)->Body; @@ -419,42 +388,45 @@ class Zimbra implements ServiceManagerAwareInterface * Transforme un tableau en ensemble de noeuds XML * * @param SimpleXMLElement $node + * @param string $name + * @param array $attributes * @param array $data + * @param string $namespace * @return self */ - private function arrayToNode( SimpleXMLElement $node, $name, array $attributes=array(), $data=null, $namespace=null ) + private function arrayToNode(SimpleXMLElement $node, $name, array $attributes = array(), $data = null, $namespace = null) { $nodeContent = null; $hasChildren = false; - if (! is_array($data)){ + if (!is_array($data)) { $nodeContent = $data; - }elseif(isset($data['@content'])){ + } elseif (isset($data['@content'])) { $nodeContent = $data['@content']; unset($data['@content']); $hasChildren = true; - }else{ + } else { $hasChildren = true; } - if (isset($data['@attributes'])){ + if (isset($data['@attributes'])) { $attributes = array_merge($attributes, $data['@attributes']); unset($data['@attributes']); } - $child = $node->addChild( $name, $nodeContent, $namespace ); - foreach( $attributes as $attrKey => $attrValue){ + $child = $node->addChild($name, $nodeContent, $namespace); + foreach ($attributes as $attrKey => $attrValue) { $child->addAttribute($attrKey, $attrValue); } - if ($hasChildren){ - foreach( $data as $childName => $childData ){ - if (0 === strpos($childName, '*')){ + if ($hasChildren) { + foreach ($data as $childName => $childData) { + if (0 === strpos($childName, '*')) { $childName = substr($childName, 1); - foreach( $childData as $childDataItem ){ - $this->arrayToNode($child, $childName, array(), $childDataItem, $namespace ); + foreach ($childData as $childDataItem) { + $this->arrayToNode($child, $childName, array(), $childDataItem, $namespace); } - }else{ - $this->arrayToNode($child, $childName, array(), $childData, $namespace ); + } else { + $this->arrayToNode($child, $childName, array(), $childData, $namespace); } } } @@ -466,37 +438,38 @@ class Zimbra implements ServiceManagerAwareInterface * * @param array $data * @param string $nameField - * @return array + * @return array[] */ - public function makeZimbraAttributes( array $data, $nameField='n' ){ + public function makeZimbraAttributes(array $data, $nameField = 'n') + { $result = array(); - foreach( $data as $key => $value ){ - if (is_array($value)){ - foreach( $value as $val ){ + foreach ($data as $key => $value) { + if (is_array($value)) { + foreach ($value as $val) { $result[] = array( - '@attributes' => array( $nameField => $key ), + '@attributes' => array($nameField => $key), '@content' => $val, ); } - }else{ + } else { $result[] = array( - '@attributes' => array( $nameField => $key ), + '@attributes' => array($nameField => $key), '@content' => $value, ); } } - return array( '*a' => $result ); + return array('*a' => $result); } - public function debugXml( $xml ) + /** + * Debug + * + * @param string $xml + */ + public function debugXml($xml) { echo '<div style="border:1px red solid;margin:1px;padding:1px">'; - if ($this->getServiceManager()->has('Test\Xml')){ - $xmlHighlighter = $this->getServiceManager()->get('Test\Xml'); - $xmlHighlighter->highlight( $xml ); - }else{ - echo htmlentities( $xml ); - } + echo htmlentities($xml); echo '</div>'; } } \ No newline at end of file diff --git a/src/UnicaenZimbra/ZimbraFactory.php b/src/UnicaenZimbra/ZimbraFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..5e0a0f15794a968717d3079a8be3d2214e466294 --- /dev/null +++ b/src/UnicaenZimbra/ZimbraFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace UnicaenZimbra; + +use Interop\Container\ContainerInterface; +use UnicaenZimbra\Options\ModuleOptions; +use Zend\ServiceManager\Factory\FactoryInterface; + +class ZimbraFactory implements FactoryInterface +{ + /** + * Create service + * + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * @return Zimbra|object + */ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + /** + * @var ModuleOptions $moduleOptions + */ + $moduleOptions = $container->get('zimbraOptions'); + + $service = new Zimbra(); + $service->setOptions($moduleOptions); + + return $service; + } +} \ No newline at end of file