11762 use doctrine for schema creation and update
[tine20] / tine20 / Inventory / Controller.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Inventory
6  * @subpackage  Controller
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Stefanie Stamer <s.stamer@metaways.de>
9  * @copyright   Copyright (c) 2007-2016 Metaways Infosystems GmbH (http://www.metaways.de)
10  *
11  */
12
13 /**
14  * Inventory Controller (composite)
15  * 
16  * The Inventory 2.0 Controller manages access (acl) to the different backends and supports
17  * a common interface to the servers/views
18  * 
19  * @package Inventory
20  * @subpackage  Controller
21  */
22 class Inventory_Controller extends Tinebase_Controller_Event implements Tinebase_Container_Interface
23 {
24
25     /**
26      * holds the default Model of this application
27      * @var string
28      */
29     protected static $_defaultModel = 'Inventory_Model_InventoryItem';
30
31     /**
32      * the constructor
33      *
34      * don't use the constructor. use the singleton
35      */
36     private function __construct()
37     {
38         $this->_applicationName = 'Inventory';
39     }
40     
41     /**
42      * don't clone. Use the singleton.
43      *
44      */
45     private function __clone()
46     {
47     }
48     
49     /**
50      * holds self
51      * @var Inventory_Controller
52      */
53     private static $_instance = NULL;
54     
55     /**
56      * singleton
57      *
58      * @return Inventory_Controller
59      */
60     public static function getInstance()
61     {
62         if (self::$_instance === NULL) {
63             self::$_instance = new Inventory_Controller();
64         }
65         return self::$_instance;
66     }
67
68     /**
69      * creates the initial folder for new accounts
70      *
71      * @param mixed[int|Tinebase_Model_User] $_account   the account object
72      * @return Tinebase_Record_RecordSet                            of subtype Tinebase_Model_Container
73      */
74     public function createPersonalFolder($_accountId)
75     {
76         $personalContainer = Tinebase_Container::getInstance()->createDefaultContainer(
77             'Inventory_Model_InventoryItem',
78             'Inventory',
79             $_accountId
80         );
81
82         $container = new Tinebase_Record_RecordSet('Tinebase_Model_Container', array($personalContainer));
83
84         return $container;
85     }
86
87     /**
88      * event handler function
89      * 
90      * all events get routed through this function
91      *
92      * @param Tinebase_Event_Abstract $_eventObject the eventObject
93      */
94     protected function _handleEvent(Tinebase_Event_Abstract $_eventObject)
95     {
96         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . ' (' . __LINE__ . ') handle event of type ' . get_class($_eventObject));
97         
98         switch(get_class($_eventObject)) {
99             case 'Admin_Event_AddAccount':
100                 $this->createPersonalFolder($_eventObject->account);
101                 break;
102             case 'Tinebase_Event_User_DeleteAccount':
103                 /**
104                  * @var Tinebase_Event_User_DeleteAccount $_eventObject
105                  */
106                 if ($_eventObject->deletePersonalContainers()) {
107                     $this->deletePersonalFolder($_eventObject->account);
108                 }
109                 break;
110         }
111     }
112 }