changes
[tine20] / tine20 / Inventory / Frontend / Json.php
1 <?php
2 /**
3  * Tine 2.0
4  * @package     Inventory
5  * @subpackage  Frontend
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Philipp Schüle <p.schuele@metaways.de>
8  * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
9  * 
10  */
11
12 /**
13  *
14  * This class handles all Json requests for the Inventory application
15  *
16  * @package     Inventory
17  * @subpackage  Frontend
18  */
19 class Inventory_Frontend_Json extends Tinebase_Frontend_Json_Abstract
20 {
21     /**
22      * the controller
23      *
24      * @var Inventory_Controller_InventoryItem
25      */
26     protected $_controller = NULL;
27     
28     /**
29      * user fields (created_by, ...) to resolve in _multipleRecordsToJson and _recordToJson
30      *
31      * @var array
32      */
33     protected $_resolveUserFields = array(
34         'Inventory_Model_InventoryItem' => array('created_by', 'last_modified_by')
35     );
36     
37     /**
38      * the constructor
39      *
40      */
41     public function __construct()
42     {
43         $this->_applicationName = 'Inventory';
44         $this->_controller = Inventory_Controller_InventoryItem::getInstance();
45     }
46     
47     /**
48      * Search for records matching given arguments
49      *
50      * @param  array $filter
51      * @param  array $paging
52      * @return array
53      */
54     public function searchInventoryItems($filter, $paging)
55     {
56         return $this->_search($filter, $paging, $this->_controller, 'Inventory_Model_InventoryItemFilter', TRUE);
57     }     
58     
59     /**
60      * Return a single record
61      *
62      * @param   string $id
63      * @return  array record data
64      */
65     public function getInventoryItem($id)
66     {
67         return $this->_get($id, $this->_controller);
68     }
69
70     /**
71      * creates/updates a record
72      *
73      * @param  array $recordData
74      * @return array created/updated record
75      */
76     public function saveInventoryItem($recordData)
77     {
78         return $this->_save($recordData, $this->_controller, 'InventoryItem');        
79     }
80     
81     /**
82      * deletes existing records
83      *
84      * @param  array  $ids 
85      * @return string
86      */
87     public function deleteInventoryItems($ids)
88     {
89         return $this->_delete($ids, $this->_controller);
90     }    
91     
92     /**
93      * return autocomplete suggestions for a given property and value
94      * 
95      * @todo have spechial controller/backend fns for this
96      * @todo move to abstract json class and have tests
97      *
98      * @param  string   $property
99      * @param  string   $startswith
100      * @return array
101      */
102     public function autoCompleteInventoryItemProperty($property, $startswith)
103     {
104         if (preg_match('/[^A-Za-z0-9_]/', $property)) {
105             // NOTE: it would be better to ask the model for property presece, but we can't atm.
106             throw new Tasks_Exception_UnexpectedValue('bad property name');
107         }
108         
109         $filter = new Inventory_Model_InventoryItemFilter(array(
110             array('field' => $property, 'operator' => 'startswith', 'value' => $startswith),
111         ));
112         
113         $paging = new Tinebase_Model_Pagination(array('sort' => $property));
114         
115         $values = array_unique(Inventory_Controller_InventoryItem::getInstance()->search($filter, $paging)->{$property});
116         
117         $result = array(
118             'results'   => array(),
119             'totalcount' => count($values)
120         );
121         
122         foreach($values as $value) {
123             $result['results'][] = array($property => $value);
124         }
125         
126         return $result;
127     }
128
129     /**
130      * Returns registry data
131      * 
132      * @return array
133      */
134     public function getRegistryData()
135     {   
136         $defaultContainerArray = Tinebase_Container::getInstance()->getDefaultContainer(Tinebase_Core::getUser()->getId(), $this->_applicationName)->toArray();
137         $defaultContainerArray['account_grants'] = Tinebase_Container::getInstance()->getGrantsOfAccount(Tinebase_Core::getUser(), $defaultContainerArray['id'])->toArray();
138         
139         return array(
140             'defaultContainer' => $defaultContainerArray
141         );
142     }
143 }