source: branches/2.1/ws.php @ 6289

Last change on this file since 6289 was 6276, checked in by plg, 14 years ago

merge r6265 from trunk to branch 2.1

Correct text alignement in .infos, .errors
30px => 53px

File size: 13.5 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24define ('PHPWG_ROOT_PATH', './');
25
26include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
27check_status(ACCESS_FREE);
28include_once(PHPWG_ROOT_PATH.'include/ws_core.inc.php');
29
30if ( !$conf['allow_web_services'] )
31{
32  page_forbidden('Web services are disabled');
33}
34
35/**
36 * event handler that registers standard methods with the web service
37 */
38function ws_addDefaultMethods( $arr )
39{
40  include_once(PHPWG_ROOT_PATH.'include/ws_functions.inc.php');
41  global $conf, $user;
42  $service = &$arr[0];
43  $service->addMethod('pwg.getVersion', 'ws_getVersion', null,
44      'retrieves the PWG version');
45
46  $service->addMethod('pwg.caddie.add', 'ws_caddie_add',
47      array(
48        'image_id'=> array( 'flags'=>WS_PARAM_FORCE_ARRAY ),
49      ),
50      'adds the elements to the caddie');
51
52  $service->addMethod('pwg.categories.getImages', 'ws_categories_getImages',
53      array(
54        'cat_id'=>array('default'=>0, 'flags'=>WS_PARAM_FORCE_ARRAY),
55        'recursive'=>array('default'=>false),
56        'per_page' => array('default'=>100, 'maxValue'=>$conf['ws_max_images_per_page']),
57        'page' => array('default'=>0),
58        'order' => array('default'=>null),
59        'f_min_rate' => array( 'default'=> null ),
60        'f_max_rate' => array( 'default'=> null ),
61        'f_min_hit' => array( 'default'=> null ),
62        'f_max_hit' => array( 'default'=> null ),
63        'f_min_date_available' => array( 'default'=> null ),
64        'f_max_date_available' => array( 'default'=> null ),
65        'f_min_date_created' => array( 'default'=> null ),
66        'f_max_date_created' => array( 'default'=> null ),
67        'f_min_ratio' => array( 'default'=> null ),
68        'f_max_ratio' => array( 'default'=> null ),
69        'f_with_thumbnail' => array( 'default'=> false ),
70      ),
71      'Returns elements for the corresponding categories.
72<br><b>cat_id</b> can be empty if <b>recursive</b> is true. Can be sent as an array.
73<br><b>order</b> comma separated fields for sorting (file,id, average_rate,...)'
74    );
75
76  $service->addMethod('pwg.categories.getList', 'ws_categories_getList',
77      array(
78        'cat_id' => array('default'=>0),
79        'recursive' => array('default'=>false),
80        'public' => array('default'=>false),
81      ),
82      'retrieves a list of categories' );
83
84  $service->addMethod('pwg.images.addComment', 'ws_images_addComment',
85      array(
86        'image_id' => array(),
87        'author' => array( 'default' => is_a_guest()? 'guest':$user['username']),
88        'content' => array(),
89        'key' => array(),
90      ),
91      'add a comment to an image' );
92
93  $service->addMethod('pwg.images.getInfo', 'ws_images_getInfo',
94      array(
95        'image_id' => array(),
96        'comments_page' => array('default'=>0 ),
97        'comments_per_page' => array(
98              'default' => $conf['nb_comment_page'],
99              'maxValue' => 2*$conf['nb_comment_page'],
100            ),
101      ),
102      'retrieves information about the given photo' );
103
104  $service->addMethod('pwg.images.rate', 'ws_images_rate',
105      array(
106        'image_id' => array(),
107        'rate' =>     array(),
108      ),
109      'rate the image' );
110
111  $service->addMethod('pwg.images.search', 'ws_images_search',
112      array(
113        'query'=>array(),
114        'per_page' => array('default'=>100, 'maxValue'=>$conf['ws_max_images_per_page']),
115        'page' => array('default'=>0),
116        'order' => array('default'=>null),
117        'f_min_rate' => array( 'default'=> null ),
118        'f_max_rate' => array( 'default'=> null ),
119        'f_min_hit' => array( 'default'=> null ),
120        'f_max_hit' => array( 'default'=> null ),
121        'f_min_date_available' => array( 'default'=> null ),
122        'f_max_date_available' => array( 'default'=> null ),
123        'f_min_date_created' => array( 'default'=> null ),
124        'f_max_date_created' => array( 'default'=> null ),
125        'f_min_ratio' => array( 'default'=> null ),
126        'f_max_ratio' => array( 'default'=> null ),
127        'f_with_thumbnail' => array( 'default'=> false ),
128      ),
129      'Returns elements for the corresponding query search.'
130    );
131
132  $service->addMethod(
133    'pwg.images.setPrivacyLevel',
134    'ws_images_setPrivacyLevel',
135    array(
136      'image_id' => array('flags'=>WS_PARAM_FORCE_ARRAY),
137      'level' => array('maxValue'=>$conf['available_permission_levels']),
138      ),
139    'sets the privacy levels for the images (POST method only)'
140    );
141
142  $service->addMethod('pwg.session.getStatus', 'ws_session_getStatus', null, '' );
143  $service->addMethod('pwg.session.login', 'ws_session_login',
144    array('username', 'password'),
145    'POST method only' );
146  $service->addMethod('pwg.session.logout', 'ws_session_logout', null, '');
147
148  $service->addMethod('pwg.tags.getList', 'ws_tags_getList',
149    array('sort_by_counter' => array('default' =>false) ),
150    'retrieves a list of available tags');
151  $service->addMethod('pwg.tags.getImages', 'ws_tags_getImages',
152      array(
153        'tag_id'=>array('default'=>null, 'flags'=>WS_PARAM_FORCE_ARRAY ),
154        'tag_url_name'=>array('default'=>null, 'flags'=>WS_PARAM_FORCE_ARRAY ),
155        'tag_name'=>array('default'=>null, 'flags'=>WS_PARAM_FORCE_ARRAY ),
156        'tag_mode_and'=>array('default'=>false),
157        'per_page' => array('default'=>100, 'maxValue'=>$conf['ws_max_images_per_page']),
158        'page' => array('default'=>0),
159        'order' => array('default'=>null),
160        'f_min_rate' => array( 'default'=> null ),
161        'f_max_rate' => array( 'default'=> null ),
162        'f_min_hit' => array( 'default'=> null ),
163        'f_max_hit' => array( 'default'=> null ),
164        'f_min_date_available' => array( 'default'=> null ),
165        'f_max_date_available' => array( 'default'=> null ),
166        'f_min_date_created' => array( 'default'=> null ),
167        'f_max_date_created' => array( 'default'=> null ),
168        'f_min_ratio' => array( 'default'=> null ),
169        'f_max_ratio' => array( 'default'=> null ),
170        'f_with_thumbnail' => array( 'default'=> false ),
171      ),
172      'Returns elements for the corresponding tags. Note that tag_id, tag_url_name, tag_name an be arrays. Fill at least one of them. '
173    );
174
175  $service->addMethod(
176    'pwg.images.addChunk',
177    'ws_images_add_chunk',
178    array(
179      'data' => array(),
180      'original_sum' => array(),
181      'type' => array(),
182      'position' => array(),
183      ),
184    'POST method only. For admin only.'
185    );
186
187  $service->addMethod(
188    'pwg.images.addFile',
189    'ws_images_addFile',
190    array(
191      'image_id' => array(),
192      'type' => array(),
193      'sum' => array(),
194      ),
195    'Add or update a file for an existing photo. pwg.images.addChunk must have been called  before (maybe several times)'
196    );
197
198
199  $service->addMethod(
200    'pwg.images.add',
201    'ws_images_add',
202    array(
203      'file_sum' => array(),
204      'thumbnail_sum' => array(),
205      'high_sum' => array('default' => null),
206      'original_sum' => array(),
207      'original_filename' => array('default' => null),
208      'name' => array('default' => null),
209      'author' => array('default' => null),
210      'date_creation' => array('default' => null),
211      'comment' => array('default' => null),
212      'categories' => array('default' => null),
213      'tag_ids' => array('default' => null),
214      'level' => array(
215        'default' => 0,
216        'maxValue' => $conf['available_permission_levels']
217        ),
218      ),
219    'POST method only.
220<br><b>categories</b> is a string list "category_id[,rank];category_id[,rank]" The rank is optional and is equivalent to "auto" if not given.'
221    );
222
223  $service->addMethod(
224    'pwg.categories.getAdminList',
225    'ws_categories_getAdminList',
226    array(),
227    'administration method only'
228    );
229
230  $service->addMethod(
231    'pwg.categories.add',
232    'ws_categories_add',
233    array(
234      'name' => array(),
235      'parent' => array('default' => null),
236      ),
237    'administration method only'
238    );
239
240  $service->addMethod(
241    'pwg.tags.getAdminList',
242    'ws_tags_getAdminList',
243    array(),
244    'administration method only'
245    );
246
247  $service->addMethod(
248    'pwg.tags.add',
249    'ws_tags_add',
250    array(
251      'name' => array(),
252      ),
253    'administration method only'
254    );
255
256  $service->addMethod(
257    'pwg.images.exist',
258    'ws_images_exist',
259    array(
260      'md5sum_list'=> array('default' => null),
261      'filename_list' => array('default' => null),
262      ),
263    'check existence of a photo list'
264    );
265
266  $service->addMethod(
267    'pwg.images.checkFiles',
268    'ws_images_checkFiles',
269    array(
270      'image_id' => array(),
271      'thumbnail_sum' => array('default' => null),
272      'file_sum' => array('default' => null),
273      'high_sum' => array('default' => null),
274      ),
275    'check if you have updated version of your files for a given photo, for each requested file type, the answer can be "missing", "equals" or "differs"'
276    );
277
278  $service->addMethod(
279    'pwg.images.checkUpload',
280    'ws_images_checkUpload',
281    null,
282    'check if Piwigo is ready for upload'
283    );
284
285  $service->addMethod(
286    'pwg.images.setInfo',
287    'ws_images_setInfo',
288    array(
289      'image_id' => array(),
290
291      'name' => array('default' => null),
292      'author' => array('default' => null),
293      'date_creation' => array('default' => null),
294      'comment' => array('default' => null),
295      'categories' => array('default' => null),
296      'tag_ids' => array('default' => null),
297      'level' => array(
298        'default' => 0,
299        'maxValue' => $conf['available_permission_levels']
300        ),
301      'single_value_mode' => array('default' => 'fill_if_empty'),
302      'multiple_value_mode' => array('default' => 'append'),
303      ),
304    'POST method only. Admin only
305<br><b>categories</b> is a string list "category_id[,rank];category_id[,rank]" The rank is optional and is equivalent to "auto" if not given.
306<br><b>single_value_mode</b> can be "fill_if_empty" (only use the input value if the corresponding values is currently empty) or "replace" (overwrite any existing value) and applies to single values properties like name/author/date_creation/comment
307<br><b>multiple_value_mode</b> can be "append" (no change on existing values, add the new values) or "replace" and applies to multiple values properties like tag_ids/categories'
308    );
309
310  $service->addMethod(
311    'pwg.categories.setInfo',
312    'ws_categories_setInfo',
313    array(
314      'category_id' => array(),
315
316      'name' => array('default' => null),
317      'comment' => array('default' => null),
318      ),
319    'POST method only.'
320    );
321}
322
323add_event_handler('ws_add_methods', 'ws_addDefaultMethods');
324
325
326add_event_handler('ws_invoke_allowed', 'ws_isInvokeAllowed', EVENT_HANDLER_PRIORITY_NEUTRAL, 3);
327
328$requestFormat = null;
329$responseFormat = null;
330
331if ( isset($_GET['format']) )
332{
333  $responseFormat = $_GET['format'];
334}
335
336if ( isset($HTTP_RAW_POST_DATA) )
337{
338  $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
339  if ( strncmp($HTTP_RAW_POST_DATA, '<?xml', 5) == 0 )
340  {
341  }
342  else
343  {
344    $requestFormat = "json";
345  }
346}
347else
348{
349  $requestFormat = "rest";
350}
351
352if ( !isset($responseFormat) and isset($requestFormat) )
353{
354  $responseFormat = $requestFormat;
355}
356
357$service = new PwgServer();
358
359if (!is_null($requestFormat))
360{
361  $handler = null;
362  switch ($requestFormat)
363  {
364    case 'rest':
365      include_once(PHPWG_ROOT_PATH.'include/ws_protocols/rest_handler.php');
366      $handler = new PwgRestRequestHandler();
367      break;
368  }
369  $service->setHandler($requestFormat, $handler);
370}
371
372if (!is_null($responseFormat))
373{
374  $encoder = null;
375  switch ($responseFormat)
376  {
377    case 'rest':
378      include_once(PHPWG_ROOT_PATH.'include/ws_protocols/rest_encoder.php');
379      $encoder = new PwgRestEncoder();
380      break;
381    case 'php':
382      include_once(PHPWG_ROOT_PATH.'include/ws_protocols/php_encoder.php');
383      $encoder = new PwgSerialPhpEncoder();
384      break;
385    case 'json':
386      include_once(PHPWG_ROOT_PATH.'include/ws_protocols/json_encoder.php');
387      $encoder = new PwgJsonEncoder();
388      break;
389    case 'xmlrpc':
390      include_once(PHPWG_ROOT_PATH.'include/ws_protocols/xmlrpc_encoder.php');
391      $encoder = new PwgXmlRpcEncoder();
392      break;
393  }
394  $service->setEncoder($responseFormat, $encoder);
395}
396
397set_make_full_url();
398$service->run();
399
400?>
Note: See TracBrowser for help on using the repository browser.