fix for getAssetHash
[tine20] / tine20 / Admin / Controller / Keyfield.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Admin
6  * @subpackage  Controller
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Cornelius WeiƟ <c.weiss@metaways.de>
9  * @copyright   Copyright (c) 2015 Metaways Infosystems GmbH (http://www.metaways.de)
10  */
11
12 /**
13  * Keyfield Controller for Admin application
14  *
15  * @package     Admin
16  * @subpackage  Controller
17  */
18 class Admin_Controller_Keyfield extends Tinebase_Controller_Record_Abstract
19 {
20     /**
21      * tinebase customfield controller/backend
22      * 
23      * @var Tinebase_Keyfield
24      */
25     protected $_keyfieldController = NULL;
26     
27     /**
28      * the constructor
29      *
30      * don't use the constructor. use the singleton 
31      */
32     private function __construct() 
33     {
34         $this->_applicationName       = 'Admin';
35         $this->_modelName             = 'Tinebase_Config_KeyField';
36         $this->_doContainerACLChecks  = FALSE;
37                 
38         $this->_backend = new Tinebase_CustomField_Config();
39         
40         $this->_keyfieldController = Tinebase_CustomField::getInstance();
41     }
42
43     /**
44      * don't clone. Use the singleton.
45      *
46      */
47     private function __clone() 
48     {
49     }
50
51     /**
52      * holds the instance of the singleton
53      *
54      * @var Admin_Controller_Container
55      */
56     private static $_instance = NULL;
57
58     /**
59      * the singleton pattern
60      *
61      * @return Admin_Controller_Container
62      */
63     public static function getInstance() 
64     {
65         if (self::$_instance === NULL) {
66             self::$_instance = new Admin_Controller_Keyfield;
67         }
68         
69         return self::$_instance;
70     }
71     
72     /**************** overriden methods ***************************/
73     
74     /**
75      * add one record
76      *
77      * @param   Tinebase_Record_Interface $_record
78      * @return  Tinebase_Record_Interface
79      * @throws  Tinebase_Exception_AccessDenied
80      */
81     public function create(Tinebase_Record_Interface $_record)
82     {
83         return $this->_keyfieldController->addCustomField($_record);
84     }
85     
86     /**
87      * get by id
88      *
89      * @param string $_id
90      * @return Tinebase_Record_Interface
91      * @throws  Tinebase_Exception_AccessDenied
92      */
93     public function get($_id)
94     {
95         return $this->_keyfieldController->getCustomField($_id);
96     }
97     
98     /**
99      * Deletes a set of records.
100      *  
101      * @param   array array of record identifiers
102      * @return  array
103      * @throws Tinebase_Exception_NotFound|Tinebase_Exception
104      */
105     public function delete($ids)
106     {
107         $this->_checkCFUsage($ids);
108         foreach ((array) $ids as $id) {
109             $this->_keyfieldController->deleteCustomField($id);
110         }
111         
112         return (array) $ids;
113     }
114     
115     /**
116      * checks if customfield(s) are still in use (have values)
117      * 
118      * @param array $ids
119      * @throws Tinebase_Exception_SystemGeneric
120      */
121     protected function _checkCFUsage($ids)
122     {
123         $filter = new Tinebase_Model_CustomField_ValueFilter(array(array(
124             'field'     => 'customfield_id',
125             'operator'  => 'in',
126             'value'     => (array) $ids
127         )));
128
129         $result = $this->_keyfieldController->search($filter, NULL, FALSE, TRUE);
130         if ($result->count() > 0) {
131             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
132                 . ' ' . count($result) . ' records still have custom field values.');
133             
134             throw new Tinebase_Exception_SystemGeneric('Keyfield is still in use!');
135         }
136     }
137     
138     /**
139     * inspect update of one record (after update)
140     *
141     * @param   Tinebase_Record_Interface $updatedRecord   the just updated record
142     * @param   Tinebase_Record_Interface $record          the update record
143     * @param   Tinebase_Record_Interface $currentRecord   the current record (before update)
144     * @return  void
145     */
146     protected function _inspectAfterUpdate($updatedRecord, $record, $currentRecord)
147     {
148         $this->_keyfieldController->clearCacheForConfig($updatedRecord);
149     }
150 }