0009932: Parametrize references to e-mail application
[tine20] / tine20 / Tinebase / EmailUser / Factory.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Tinebase
6  * @subpackage  EmailUser
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2009-2015 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @copyright   Copyright (c) 2014-2015 Serpro (http://www.serpro.gov.br)
10  * @author      Fl├ívio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
11  *
12  */
13
14 /**
15  * class Tinebase_EmailUser_Factory
16  *
17  * @package    Tinebase
18  * @subpackage EmailUser
19  */
20 class Tinebase_EmailUser_Factory
21 {
22     /**
23      * 
24      * @var Tinebase_Model_Application
25      */
26     protected static $_emailApplication = NULL;
27     
28     /**
29      * Return name of configured mail application
30      * 
31      * @return string
32      */
33     public static function getMailApplicationName()
34     {
35         if (NULL === self::$_emailApplication){
36             $applications = Tinebase_Core::getUser()->getApplications();
37             
38             foreach (array('Felamimail', 'Expressomail') as $emailApplication) {
39                 if (self::$_emailApplication = $applications->find('name', $emailApplication)) {
40                     break;
41                 }
42             }
43         }
44         
45         return self::$_emailApplication->name;
46     }
47     
48     /**
49      * if class could be for instance Felamimail_Controller_Account,
50      * namespaceWithoutBasePrefix is only Controller_Account
51      * class must implements getInstance() method
52      *
53      * @param string $namespaceWithoutBasePrefix
54      * @return mixed
55      */
56     public static function getInstance($namespaceWithoutBasePrefix)
57     {
58         $class = self::getMailApplicationName() . '_' . $namespaceWithoutBasePrefix;
59         
60         return $class::getInstance();
61     }
62     
63     /**
64      * if class could be for instance Felamimail_Controller_Account,
65      * namespaceWithoutBasePrefix is only Controller_Account
66      * class must implements getInstance() method
67
68      * @param string $namespaceWithoutBasePrefix
69      * @param string $name constant name
70      * @return mixed
71      */
72     public static function getConstant($namespaceWithoutBasePrefix, $name)
73     {
74         $class = self::getMailApplicationName() . '_' . $namespaceWithoutBasePrefix;
75         
76         return constant($class . '::' . $name);
77     }
78     
79     /**
80      * Calls a static method from email application
81      *
82      * if class could be for instance Felamimail_Controller_Account,
83      * namespaceWithoutBasePrefix is only Controller_Account
84      * class must implements getInstance() method
85      * @param string $namespaceWithoutBasePrefix
86      * @param string $method
87      * @param array $args
88      * @return mixed
89      */
90     public static function callStatic($namespaceWithoutBasePrefix, $method, array $args)
91     {
92         $class = self::getMailApplicationName() . '_' . $namespaceWithoutBasePrefix;
93         
94         if (!class_exists($class)) {
95             $class = 'Tinebase_' . $namespaceWithoutBasePrefix;
96         }
97         
98         return call_user_func_array(array($class, $method), $args);
99     }
100     
101     /**
102      * Adds the properly filter according e-mail application
103      * @param Tinebase_DateTime $received
104      */
105     public static function getPeriodFilter($received)
106     {
107         $mailApplication = self::getMailApplicationName();
108         
109         if ($mailApplication !== 'Felamimail') {
110             $class = $mailApplication . '_Model_Filter_DateTime';
111             return new $class('received', 'after', $received->get(Tinebase_Record_Abstract::ISO8601LONG));
112         } else {
113             return new Tinebase_Model_Filter_DateTime('received', 'after', $received->get(Tinebase_Record_Abstract::ISO8601LONG));
114         }
115     }
116 }