Esempio n. 1
0
 /**
  * Register a service definition.
  *
  * This will register the definition as a service.
  *
  * @param string                           $id         Service Id.
  * @param Zikula_ServiceManager_Definition $definition Service definition.
  * @param boolean                          $shared     Shared type.
  *
  * @deprecated since 1.4.0
  * @see \Symfony\Component\DependencyInjection\ContainerBuilder::setDefinition()
  *
  * @throws InvalidArgumentException If service ID is already registered.
  *
  * @return void
  */
 public function registerService($id, Zikula_ServiceManager_Definition $definition, $shared = true)
 {
     if ($shared) {
         $definition->setScope(self::SCOPE_CONTAINER);
     } else {
         $definition->setScope(self::SCOPE_PROTOTYPE);
     }
     return $this->setDefinition($id, $definition);
 }
Esempio n. 2
0
 /**
  * Listen for the 'core.preinit' event.
  *
  * @param Zikula_Event $event Event.
  *
  * @return void
  */
 public function request(Zikula_Event $event)
 {
     $requestDef = new Zikula_ServiceManager_Definition('Zikula_Request_Http');
     $requestDef->addMethod('setSession', array(new Zikula_ServiceManager_Reference('session')));
     $this->serviceManager->registerService('request', $requestDef);
 }
Esempio n. 3
0
    /**
     * Initialise.
     *
     * Runs ar plugin init time.
     *
     * @throws InvalidArgumentException If invalid configuration given.
     *
     * @return void
     */
    public function initialize()
    {
        define('SWIFT_REQUIRED_LOADED', true);
        define('SWIFT_INIT_LOADED', true);

        // register namespace
        ZLoader::addAutoloader('Swift', dirname(__FILE__) . '/lib/vendor/SwiftMailer/classes');

        // initialize Swift
        //require_once realpath($this->baseDir . '/lib/vendor/SwiftMailer/swift_init.php'); // dont use this as it fails in virtual hosting environments with open_basedir restrictions
        // Load in dependency maps
        require_once dirname(__FILE__) . '/lib/vendor/SwiftMailer/dependency_maps/cache_deps.php';
        require_once dirname(__FILE__) . '/lib/vendor/SwiftMailer/dependency_maps/mime_deps.php';
        require_once dirname(__FILE__) . '/lib/vendor/SwiftMailer/dependency_maps/transport_deps.php';

        // load configuration (todo: move this to persistence).
        include dirname(__FILE__) . '/configuration/config.php';

        $this->serviceManager['swiftmailer.preferences.sendmethod'] = $config['sendmethod'];

        $preferences = Swift_Preferences::getInstance();
        $this->serviceManager['swiftmailer.preferences.charset'] = $config['charset'];
        $this->serviceManager['swiftmailer.preferences.cachetype'] = $config['cachetype'];
        $this->serviceManager['swiftmailer.preferences.tempdir'] = $config['tempdir'];
        $preferences->setCharset($config['charset']);
        $preferences->setCacheType($config['cachetype']);
        $preferences->setTempDir($config['tempdir']);

        // determine the correct transport
        $type = $config['transport']['type'];
        $args = $config['transport'][$type];
        switch ($type) {
            case 'mail':
                $this->serviceManager['swiftmailer.transport.mail.extraparams'] = $args['extraparams'];
                $definition = new Zikula_ServiceManager_Definition('Swift_MailTransport', array(new Zikula_ServiceManager_Argument('swiftmailer.transport.mail.extraparams')));
                break;

            case 'smtp':
                $this->serviceManager['swiftmailer.transport.smtp.host'] = $args['host'];
                $this->serviceManager['swiftmailer.transport.smtp.port'] = $args['port'];
                $definition = new Zikula_ServiceManager_Definition('Swift_SmtpTransport', array(
                                new Zikula_ServiceManager_Argument('swiftmailer.transport.smtp.host'),
                                new Zikula_ServiceManager_Argument('swiftmailer.transport.smtp.port')));

                if ($args['username'] && $args['password']) {
                    $this->serviceManager['swiftmailer.transport.smtp.username'] = $args['username'];
                    $this->serviceManager['swiftmailer.transport.smtp.password'] = $args['password'];
                    $definition->addMethod('setUserName', new Zikula_ServiceManager_Argument('swiftmailer.transport.smtp.username'));
                    $definition->addMethod('setPassword', new Zikula_ServiceManager_Argument('swiftmailer.transport.smtp.password'));
                }
                if (isset($args['encryption'])) {
                    $this->serviceManager['swiftmailer.transport.smtp.encryption'] = $args['encryption'];
                    $definition->addMethod('setEncryption', new Zikula_ServiceManager_Argument('swiftmailer.transport.smtp.encryption'));
                }
                break;

            case 'sendmail':
                $this->serviceManager['swiftmailer.transport.mail.command'] = $args['command'];
                $definition = new Zikula_ServiceManager_Definition('Swift_SendmailTransport', array(new Zikula_ServiceManager_Argument('swiftmailer.transport.mail.command')));
                break;

            default:
                // error
                throw new InvalidArgumentException('Invalid transport type, must be mail, smtp or sendmail');
                break;
        }

        // register transport
        $this->serviceManager->registerService('swiftmailer.transport', $definition);

        // define and register mailer using transport service
        $definition = new Zikula_ServiceManager_Definition('Swift_Mailer', array(new Zikula_ServiceManager_Reference('swiftmailer.transport')));
        $this->serviceManager->registerService('mailer', $definition, false);

        // register simple mailer service
        $definition = new Zikula_ServiceManager_Definition('SystemPlugins_SwiftMailer_Mailer', array(new Zikula_ServiceManager_Reference('zikula.servicemanager')));
        $this->serviceManager->registerService('mailer.simple', $definition);
    }
Esempio n. 4
0
 /**
  * Dynamically create the service according to the Definition class.
  *
  * @param Zikula_ServiceManager_Definition $definition The definition class.
  *
  * @return object The newly created service.
  */
 private function createService(Zikula_ServiceManager_Definition $definition)
 {
     $reflection = new ReflectionClass($definition->getClassName());
     if ($reflection->hasMethod('__construct') || $reflection->hasMethod($definition->getClassName()) && $definition->hasConstructorArgs()) {
         $service = $reflection->newInstanceArgs($this->compileArguments($definition->getConstructorArgs()));
     } else {
         $service = $reflection->newInstance();
     }
     if ($definition->hasMethods()) {
         foreach ($definition->getMethods() as $method => $arguments) {
             foreach ($arguments as $args) {
                 $reflectionMethod = new ReflectionMethod($definition->getClassName(), $method);
                 if (count($args) > 0) {
                     $reflectionMethod->invokeArgs($service, $this->compileArguments($args));
                 } else {
                     // no args
                     $reflectionMethod->invoke($service);
                 }
             }
         }
     }
     return $service;
 }