set json api functions parameter names
[tine20] / tine20 / Tinebase / CustomField / Config.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Tinebase
6  * @subpackage  Backend
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Philipp Schüle <p.schuele@metaways.de>
9  * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
10  */
11
12 /**
13  * abstract backend for custom field configs
14  *
15  * @package     Tinebase
16  * @subpackage  Backend
17  */
18 class Tinebase_CustomField_Config extends Tinebase_Backend_Sql_Abstract
19 {
20     /**
21      * Table name without prefix
22      *
23      * @var string
24      */
25     protected $_tableName = 'customfield_config';
26
27     /**
28      * Model name
29      *
30      * @var string
31      */
32     protected $_modelName = 'Tinebase_Model_CustomField_Config';
33
34     /**
35      * default column(s) for count
36      *
37      * @var string
38      */
39     protected $_defaultCountCol = 'id';
40
41     /**
42      * get customfield config ids by grant
43      * 
44      * @param int $_accountId
45      * @param string $_grant if grant is empty, all grants are returned
46      * @return array
47      */
48     public function getByAcl($_grant, $_accountId)
49     {
50         $select = $this->_getAclSelect('id');
51         $select->where($this->_db->quoteInto($this->_db->quoteIdentifier('customfield_acl.account_grant') . ' = ?', $_grant));
52         
53         // use grants sql helper fn of Tinebase_Container to add account and grant values
54         Tinebase_Container::addGrantsSql($select, $_accountId, $_grant, 'customfield_acl');
55
56         //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $select->__toString());
57         
58         $stmt = $this->_db->query($select);
59         $rows = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
60         
61         $result = array();
62         foreach ($rows as $row) {
63             $result[] = $row['id'];
64         }
65         
66         return $result;
67     }
68
69     /**
70      * get acl select
71      * 
72      * @param string $_cols
73      * @return Zend_Db_Select
74      */
75     protected function _getAclSelect($_cols = '*')
76     {
77         return $this->_getSelect($_cols)
78             ->join(array(
79                 /* table  */ 'customfield_acl' => SQL_TABLE_PREFIX . 'customfield_acl'), 
80                 /* on     */ "{$this->_db->quoteIdentifier('customfield_acl.customfield_id')} = {$this->_db->quoteIdentifier('customfield_config.id')}",
81                 /* select */ array()
82             );
83     }
84     
85     /**
86      * all grants for configs given by array of ids
87      * 
88      * @param string $_accountId
89      * @param array $_id => account_grants
90      */
91     public function getAclForIds($_accountId, $_ids)
92     {
93         $result = array();
94         if (empty($_ids)) {
95             return $result;
96         }
97         
98         $select = $this->_getAclSelect(array('id' => 'customfield_config.id', 'account_grants' => $this->_dbCommand->getAggregate('customfield_acl.account_grant')));
99         $select->where($this->_db->quoteInto($this->_db->quoteIdentifier('customfield_config.id') . ' IN (?)', (array)$_ids))
100                ->group(array('customfield_config.id', 'customfield_acl.account_type', 'customfield_acl.account_id'));
101         Tinebase_Container::addGrantsSql($select, $_accountId, Tinebase_Model_CustomField_Grant::getAllGrants(), 'customfield_acl');
102         
103         //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $select->__toString());
104         
105         $stmt = $this->_db->query($select);
106         $rows = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
107         
108         foreach ($rows as $row) {
109             $result[$row['id']] = $row['account_grants'];
110         }
111         
112         return $result;
113     }
114     
115     /**
116      * (non-PHPdoc)
117      * @see tine20/Tinebase/Backend/Sql/Abstract.php::_rawDataToRecordSet()
118      */
119     protected function _recordToRawData($_record)
120     {
121         $data = $_record->toArray();
122         if (is_object($data['definition']) && method_exists($data['definition'], 'toArray')) {
123             $data['definition'] = $data['definition']->toArray();
124         }
125         if (is_array($data['definition'])) {
126             $data['definition'] = Zend_Json::encode($data['definition']);
127         }
128         return $data;
129     }
130 }