source: extensions/autoupdate/trunk/ws_functions.inc.php @ 9935

Last change on this file since 9935 was 9935, checked in by patdenice, 13 years ago
File size: 8.1 KB
Line 
1<?php
2
3if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
4
5global $conf;
6
7$service = &$arr[0];
8
9$service->addMethod(
10  'pwg.plugins.update',
11  'ws_plugins_update',
12  array(
13    'id' => array(),
14    'revision' => array(),
15    'pwg_token' => array(),
16  ),
17  'Update a plugin. Webmaster only.'
18);
19
20$service->addMethod(
21  'pwg.themes.update',
22  'ws_themes_update',
23  array(
24    'id' => array(),
25    'revision' => array(),
26    'pwg_token' => array(),
27  ),
28  'Update a theme. Webmaster only.'
29);
30
31$service->addMethod(
32  'pwg.languages.update',
33  'ws_languages_update',
34  array(
35    'id' => array(),
36    'revision'=> array(),
37    'pwg_token' => array(),
38  ),
39  'Update a language. Webmaster only.'
40);
41
42$service->addMethod(
43  'pwg.extensions.checkUpdates',
44  'ws_extensions_checkupdates',
45  array(),
46  'Check if piwigo or extensions are up to date.'
47);
48
49$service->addMethod(
50  'pwg.extensions.ignoreUpdates',
51  'ws_extensions_ignoreupdates',
52  array(
53    'type' => array('default'=>null),
54    'id' => array('default'=>null),
55    'reset' => array('default'=>null),
56    'pwg_token' => array(),
57  ),
58  'Ignore an extension if it need update.'
59);
60
61function ws_plugins_update($params, &$service)
62{
63  if (!is_webmaster())
64  {
65    return new PwgError(401, l10n('Webmaster status is required.'));
66  }
67
68  if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token'])
69  {
70    return new PwgError(403, 'Invalid security token');
71  }
72
73  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
74  include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php');
75  $plugins = new plugins();
76
77  if (isset($params['upgradestatus']) and isset($params['id']))
78  {
79    switch ($params['upgradestatus'])
80    {
81      case 'ok':
82        return sprintf(l10n('%s has been successfully upgraded.'), $plugins->fs_plugins[$params['id']]['name']);
83
84      case 'temp_path_error':
85        return new PwgError(null, l10n('Can\'t create temporary file.'));
86
87      case 'dl_archive_error':
88        return new PwgError(null, l10n('Can\'t download archive.'));
89
90      case 'archive_error':
91        return new PwgError(null, l10n('Can\'t read or extract archive.'));
92
93      default:
94        return new PwgError(null, sprintf(l10n('An error occured during extraction (%s).'), $params['upgradestatus']));
95    }
96  }
97
98  if (empty($params['id']) or empty($params['revision']))
99  {
100    return new PwgError(null, 'Wrong parameters');
101  }
102
103  $plugin_id = $params['id'];
104  $revision = $params['revision'];
105
106  if (isset($plugins->db_plugins_by_id[$plugin_id])
107    and $plugins->db_plugins_by_id[$plugin_id]['state'] == 'active')
108  {
109    $plugins->perform_action('deactivate', $plugin_id);
110
111    redirect(PHPWG_ROOT_PATH
112      . 'ws.php'
113      . '?method=pwg.plugins.update'
114      . '&revision=' . $revision
115      . '&id=' . $plugin_id
116      . '&reactivate=true'
117      . '&pwg_token=' . get_pwg_token()
118      . '&format=json'
119    );
120  }
121
122  $upgrade_status = $plugins->extract_plugin_files('upgrade', $revision, $plugin_id);
123
124  if (isset($params['reactivate']))
125  {
126    $plugins->perform_action('activate', $plugin_id);
127  }
128
129  global $template;
130  $template->delete_compiled_templates();
131
132  redirect(PHPWG_ROOT_PATH
133    . 'ws.php'
134    . '?method=pwg.plugins.update'
135    . '&revision=' . $revision
136    . '&id=' . $plugin_id
137    . '&upgradestatus='.$upgrade_status
138    . '&pwg_token=' . get_pwg_token()
139    . '&format=json'
140  );
141}
142
143function ws_themes_update($params, &$service)
144{
145  if (!is_webmaster())
146  {
147    return new PwgError(401, l10n('Webmaster status is required.'));
148  }
149
150  if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token'])
151  {
152    return new PwgError(403, 'Invalid security token');
153  }
154
155  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
156  include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
157  $themes = new themes();
158
159  $theme_id = $params['id'];
160  $revision = $params['revision'];
161
162  $upgrade_status = $themes->extract_theme_files('upgrade', $revision, $theme_id);
163
164  global $template;
165  $template->delete_compiled_templates();
166
167  switch ($upgrade_status)
168  {
169    case 'ok':
170      return sprintf(l10n('%s has been successfully upgraded.'), $themes->fs_themes[$theme_id]['name']);
171
172    case 'temp_path_error':
173      return new PwgError(null, l10n('Can\'t create temporary file.'));
174
175    case 'dl_archive_error':
176      return new PwgError(null, l10n('Can\'t download archive.'));
177
178    case 'archive_error':
179      return new PwgError(null, l10n('Can\'t read or extract archive.'));
180
181    default:
182      return new PwgError(null, sprintf(l10n('An error occured during extraction (%s).'), $upgrade_status));
183  }
184}
185
186function ws_languages_update($params, &$service)
187{
188  if (!is_webmaster())
189  {
190    return new PwgError(401, l10n('Webmaster status is required.'));
191  }
192
193  if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token'])
194  {
195    return new PwgError(403, 'Invalid security token');
196  }
197
198  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
199  include_once(PHPWG_ROOT_PATH.'admin/include/languages.class.php');
200  $languages = new languages();
201
202  $language_id = $params['id'];
203  $revision = $params['revision'];
204
205  $upgrade_status = $languages->extract_language_files('upgrade', $revision, $language_id);
206
207  global $template;
208  $template->delete_compiled_templates();
209
210  switch ($upgrade_status)
211  {
212    case 'ok':
213      return sprintf(l10n('%s has been successfully upgraded.'), $languages->fs_languages[$language_id]['name']);
214
215    case 'temp_path_error':
216      return new PwgError(null, l10n('Can\'t create temporary file.'));
217
218    case 'dl_archive_error':
219      return new PwgError(null, l10n('Can\'t download archive.'));
220
221    case 'archive_error':
222      return new PwgError(null, l10n('Can\'t read or extract archive.'));
223
224    default:
225      return new PwgError(null, sprintf(l10n('An error occured during extraction (%s).'), $upgrade_status));
226  }
227}
228
229function ws_extensions_checkupdates($params, &$service)
230{
231  define('IN_ADMIN', true);
232  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
233  include_once(AUTOUPDATE_PATH.'include/autoupdate.class.php');
234  $autoupdate = new autoupdate();
235
236  if (!is_webmaster())
237  {
238    return new PwgError(401, 'Access denied');
239  }
240
241  // Check if gallery or plugins are up to date
242  load_language('plugin.lang', dirname(dirname(__FILE__)).'/');
243
244  function autoupdate_error()
245  {
246    unset($_SESSION['extensions_need_update']);
247    return new PwgError(null, 'An error occured');
248  }
249
250  if (!isset($_SESSION['need_update']))
251    $autoupdate->check_piwigo_upgrade();
252
253  if ($_SESSION['need_update'])
254    return 'piwigo_upgrade';
255
256  // Gallery is up to date -> check extensions
257  if (!isset($_SESSION['extensions_need_update']))
258    $autoupdate->check_extensions();
259  else
260    $autoupdate->check_updated_extensions();
261
262  if (!empty($_SESSION['extensions_need_update']))
263    return 'ext_upgrade';
264  elseif ($_SESSION['need_update'] === false and $_SESSION['extensions_need_update'] === array())
265    return 'up_to_date';
266
267  autoupdate_error();
268}
269
270function ws_extensions_ignoreupdates($params, &$service)
271{
272  global $conf;
273
274  define('IN_ADMIN', true);
275  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
276
277  if (!is_webmaster())
278  {
279    return new PwgError(401, 'Access denied');
280  }
281
282  if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token'])
283  {
284    return new PwgError(403, 'Invalid security token');
285  }
286
287  if ($params['reset'])
288  {
289    $conf['AU_ignore'] = array('plugins'=>array(),'themes'=>array(),'languages'=>array());
290    conf_update_param('autoupdate_ignore_list', pwg_db_real_escape_string(serialize($conf['AU_ignore'])));
291    unset($_SESSION['extensions_need_update']);
292    return true;
293  }
294
295  if (empty($params['id']) or empty($params['type'])
296    or !in_array($params['type'], array('plugins', 'themes', 'languages')))
297  {
298    return new PwgError(null, 'Invalid parameters');
299  }
300
301  // Add or remove plugin from ignore list
302  if (!in_array($params['id'], $conf['AU_ignore'][$params['type']]))
303  {
304    array_push($conf['AU_ignore'][$params['type']], $params['id']);
305  }
306  conf_update_param('autoupdate_ignore_list', pwg_db_real_escape_string(serialize($conf['AU_ignore'])));
307  unset($_SESSION['extensions_need_update']);
308  return true;
309}
310
311?>
Note: See TracBrowser for help on using the repository browser.