0011666: Some fixes for Expressodriver
[tine20] / tine20 / Expressodriver / Frontend / Json.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Expressodriver
6  * @subpackage  Frontend
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2007-2014 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @copyright   Copyright (c) 2014 Serpro (http://www.serpro.gov.br)
10  * @author      Marcelo Teixeira <marcelo.teixeira@serpro.gov.br>
11  * @author      Edgar de Lucca <edgar.lucca@serpro.gov.br>
12  *
13  */
14
15 /**
16  * backend class for Zend_Json_Server
17  *
18  * This class handles all Json requests for the Expressodriver application
19  *
20  * @package     Expressodriver
21  * @subpackage  Frontend
22  */
23 class Expressodriver_Frontend_Json extends Tinebase_Frontend_Json_Abstract
24 {
25     /**
26      * app name
27      *
28      * @var string
29      */
30     protected $_applicationName = 'Expressodriver';
31
32     /**
33      * search file/directory nodes
34      *
35      * @param  array $filter
36      * @param  array $paging
37      * @return array of tree nodes
38      */
39     public function searchNodes($filter, $paging)
40     {
41
42         $controller = Expressodriver_Controller_Node::getInstance();
43         $result = $this->_search($filter, $paging, $controller, 'Expressodriver_Model_NodeFilter');
44         $this->_removeAppIdFromPathFilter($result);
45
46         return $result;
47     }
48
49     /**
50      * remove app id (base path) from filter
51      *
52      * @param array $_result
53      *
54      * @todo is this really needed? perhaps we can set the correct path in Tinebase_Model_Tree_Node_PathFilter::toArray
55      */
56     protected function _removeAppIdFromPathFilter(&$_result)
57     {
58         $app = Tinebase_Application::getInstance()->getApplicationByName($this->_applicationName);
59
60         foreach ($_result['filter'] as $idx => &$filter) {
61             if ($filter['field'] === 'path') {
62                 if (is_array($filter['value'])) {
63                     $filter['value']['path'] = Tinebase_Model_Tree_Node_Path::removeAppIdFromPath($filter['value']['path'], $app);
64                 } else {
65                     $filter['value'] = Tinebase_Model_Tree_Node_Path::removeAppIdFromPath($filter['value'], $app);
66                 }
67             }
68         }
69     }
70
71     /**
72      * create node
73      *
74      * @param array $filename
75      * @param string $type directory or file
76      * @param string $tempFileId
77      * @param boolean $forceOverwrite
78      * @return array from tree node
79      */
80     public function createNode($filename, $type, $tempFileId, $forceOverwrite)
81     {
82         $nodes = Expressodriver_Controller_Node::getInstance()->createNodes((array)$filename, $type, (array)$tempFileId, $forceOverwrite);
83         $result = (count($nodes) === 0) ? array() : $this->_recordToJson($nodes->getFirstRecord());
84
85         return $result;
86     }
87
88     /**
89      * create nodes
90      *
91      * @param string|array $filenames
92      * @param string $type directory or file
93      * @param string|array $tempFileIds
94      * @param boolean $forceOverwrite
95      * @return array from tree nodes
96      */
97     public function createNodes($filenames, $type, $tempFileIds, $forceOverwrite)
98     {
99         $nodes = Expressodriver_Controller_Node::getInstance()->createNodes((array)$filenames, $type, (array)$tempFileIds, $forceOverwrite);
100
101         return $this->_multipleRecordsToJson($nodes);
102     }
103
104     /**
105      * copy node(s)
106      *
107      * @param string|array $sourceFilenames string->single file, array->multiple
108      * @param string|array $destinationFilenames string->singlefile OR directory, array->multiple files
109      * @param boolean $forceOverwrite
110      * @return array from tree nodes
111      *
112      * @todo: deal with copying between different adapters and controllers
113      */
114     public function copyNodes($sourceFilenames, $destinationFilenames, $forceOverwrite)
115     {
116         $nodes = Expressodriver_Controller_Node::getInstance()->copyNodes((array)$sourceFilenames, $destinationFilenames, $forceOverwrite);
117
118         return $this->_multipleRecordsToJson($nodes);
119     }
120
121     /**
122      * move node(s)
123      *
124      * @param string|array $sourceFilenames string->single file, array->multiple
125      * @param string|array $destinationFilenames string->singlefile OR directory, array->multiple files
126      * @param boolean $forceOverwrite
127      * @return array for tree nodes
128      *
129      * @todo: deal with moving between different adapters and controllers
130      */
131     public function moveNodes($sourceFilenames, $destinationFilenames, $forceOverwrite)
132     {
133         $nodes = Expressodriver_Controller_Node::getInstance()->moveNodes((array)$sourceFilenames, $destinationFilenames, $forceOverwrite);
134
135         return $this->_multipleRecordsToJson($nodes);
136     }
137
138     /**
139      * delete node(s)
140      *
141      * @param string|array $filenames string->single file, array->multiple
142      * @return array with status
143      */
144     public function deleteNodes($filenames)
145     {
146         Expressodriver_Controller_Node::getInstance()->deleteNodes((array)$filenames);
147
148         return array(
149             'status'    => 'success'
150         );
151     }
152
153     /**
154      * returns the node record
155      *
156      * @param string $id
157      * @return array with tree node
158      */
159     public function getNode($id)
160     {
161         $record = Expressodriver_Controller_Node::getInstance()->get($id);
162         return $this->_recordToJson($record);
163     }
164
165     /**
166      * save node
167      * save node here in json fe just updates meta info (name, description, relations, customfields, tags, notes),
168      * if record already exists (after it had been uploaded)
169      * @param array with record data
170      * @return array with tree node
171      */
172     public function saveNode($recordData)
173     {
174         if((isset($recordData['created_by']) || array_key_exists('created_by', $recordData))) {
175             return $this->_save($recordData, Expressodriver_Controller_Node::getInstance(), 'Node');
176         } else {    // on upload complete
177             return $recordData;
178         }
179     }
180
181      /**
182      * Returns settings for expressodriver app
183      *
184      * @return  array record data
185      *
186      */
187     public function getSettings()
188     {
189         $result = Expressodriver_Controller::getInstance()->getConfigSettings();
190
191         return $result;
192     }
193
194     /**
195      * creates/updates settings
196      *
197      * @return array created/updated settings
198      */
199     public function saveSettings($recordData)
200     {
201         $result = Expressodriver_Controller::getInstance()->saveConfigSettings($recordData);
202
203         return $result;
204     }
205
206     /**
207      * Returns registry data of Expressodriver.
208      * @see Tinebase_Application_Json_Abstract
209      *
210      * @return mixed array 'variable name' => 'data'
211      */
212     public function getRegistryData() {
213         $registryData = array(
214             'settings'        => $this->getSettings(),
215         );
216         return $registryData;
217     }
218
219     /**
220      * set credentials for given adapter
221      *
222      * @param string $adapterName
223      * @param string $password
224      * @return array
225      */
226     public function setCredentials($adapterName, $password)
227     {
228         return Expressodriver_Controller::getInstance()->setCredentials($adapterName, $password);
229     }
230
231
232 }