source: branches/2.1/admin/site_manager.php @ 6312

Last change on this file since 6312 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: 9.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
24if (!defined('PHPWG_ROOT_PATH'))
25{
26  die ("Hacking attempt!");
27}
28
29include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
30
31// +-----------------------------------------------------------------------+
32// | Check Access and exit when user status is not ok                      |
33// +-----------------------------------------------------------------------+
34check_status(ACCESS_ADMINISTRATOR);
35
36if (!empty($_POST) or isset($_GET['action']))
37{
38  check_pwg_token();
39}
40
41/**
42 * requests the given $url (a remote create_listing_file.php) and fills a
43 * list of lines corresponding to request output
44 *
45 * @param string $url
46 * @return void
47 */
48function remote_output($url)
49{
50  global $template, $page;
51
52  if (fetchRemote($url, $result))
53  {
54    $lines = explode("\r\n", $result);
55    // cleaning lines from HTML tags
56    foreach ($lines as $line)
57    {
58      $line = trim(strip_tags($line));
59      if (preg_match('/^PWG-([A-Z]+)-/', $line, $matches))
60      {
61        $template->append(
62          'remote_output',
63          array(
64            'CLASS' => 'remote'.ucfirst(strtolower($matches[1])),
65            'CONTENT' => $line
66           )
67         );
68      }
69    }
70  }
71  else
72  {
73    array_push($page['errors'], l10n('file create_listing_file.php on remote site was not found'));
74  }
75}
76
77
78// +-----------------------------------------------------------------------+
79// |                             template init                             |
80// +-----------------------------------------------------------------------+
81$template->set_filenames(array('site_manager'=>'site_manager.tpl'));
82
83// +-----------------------------------------------------------------------+
84// |                        new site creation form                         |
85// +-----------------------------------------------------------------------+
86if (isset($_POST['submit']) and !empty($_POST['galleries_url'])
87    and !is_adviser() )
88{
89  $is_remote = url_is_remote( $_POST['galleries_url'] );
90  $url = preg_replace('/[\/]*$/', '', $_POST['galleries_url']);
91  $url.= '/';
92  if (! $is_remote)
93  {
94    if ( ! (strpos($url, '.') === 0 ) )
95    {
96      $url = './' . $url;
97    }
98  }
99
100  // site must not exists
101  $query = '
102SELECT COUNT(id) AS count
103  FROM '.SITES_TABLE.'
104  WHERE galleries_url = \''.$url.'\'
105;';
106  $row = pwg_db_fetch_assoc(pwg_query($query));
107  if ($row['count'] > 0)
108  {
109    array_push($page['errors'],
110      l10n('This site already exists').' ['.$url.']');
111  }
112  if (count($page['errors']) == 0)
113  {
114    if ($is_remote)
115    {
116      if ( ! isset($_POST['no_check']) )
117      {
118        $clf_url = $url.'create_listing_file.php';
119        $clf_url.= '?action=test';
120        $clf_url.= '&version='.PHPWG_VERSION;
121        if (fetchRemote($clf_url, $result))
122        {
123          $lines = explode("\r\n", $result);
124          $first_line = strip_tags($lines[0]);
125          if (!preg_match('/^PWG-INFO-2:/', $first_line))
126          {
127            array_push($page['errors'],
128                       l10n('an error happened').' : '.$first_line);
129          }
130        }
131        else
132        {
133          array_push($page['errors'], l10n('file create_listing_file.php on remote site was not found') );
134        }
135      }
136    }
137    else
138    { // local directory
139      if ( ! file_exists($url) )
140      {
141        array_push($page['errors'],
142          l10n('Directory does not exist').' ['.$url.']');
143      }
144    }
145  }
146
147  if (count($page['errors']) == 0)
148  {
149    $query = '
150INSERT INTO '.SITES_TABLE.'
151  (galleries_url)
152  VALUES
153  (\''.$url.'\')
154;';
155    pwg_query($query);
156    array_push($page['infos'],
157               $url.' '.l10n('created'));
158  }
159}
160
161// +-----------------------------------------------------------------------+
162// |                            actions on site                            |
163// +-----------------------------------------------------------------------+
164if (isset($_GET['site']) and is_numeric($_GET['site']))
165{
166  $page['site'] = $_GET['site'];
167}
168if (isset($_GET['action']) and isset($page['site']) and !is_adviser())
169{
170  $query = '
171SELECT galleries_url
172  FROM '.SITES_TABLE.'
173  WHERE id = '.$page['site'].'
174;';
175  list($galleries_url) = pwg_db_fetch_row(pwg_query($query));
176  switch($_GET['action'])
177  {
178    case 'generate' :
179    {
180      $title = $galleries_url.' : '.l10n('generate listing');
181      remote_output($galleries_url.'create_listing_file.php?action=generate');
182      break;
183    }
184    case 'test' :
185    {
186      $title = $galleries_url.' : '.l10n('test');
187      remote_output($galleries_url.'create_listing_file.php?action=test&version='.PHPWG_VERSION);
188      break;
189    }
190    case 'clean' :
191    {
192      $title = $galleries_url.' : '.l10n('clean');
193      remote_output($galleries_url.'create_listing_file.php?action=clean');
194      break;
195    }
196    case 'delete' :
197    {
198      delete_site($page['site']);
199      array_push($page['infos'],
200                 $galleries_url.' '.l10n('deleted'));
201      break;
202    }
203  }
204}
205
206$template->assign(
207  array(
208    'U_HELP'    => get_root_url().'admin/popuphelp.php?page=site_manager',
209    'F_ACTION'  => get_root_url().'admin.php'.get_query_string_diff(array('action','site','pwg_token')),
210    'PWG_TOKEN' => get_pwg_token(),
211    )
212  );
213
214// +-----------------------------------------------------------------------+
215// |                           remote sites list                           |
216// +-----------------------------------------------------------------------+
217
218if ( is_file(PHPWG_ROOT_PATH.'listing.xml') )
219{
220  $xml_content = getXmlCode(PHPWG_ROOT_PATH.'listing.xml');
221  $local_listing_site_url = getAttribute(
222          getChild($xml_content, 'informations'),
223          'url'
224        );
225  if ( !url_is_remote($local_listing_site_url) )
226  {
227    $local_listing_site_url = null;
228  }
229}
230
231$query = '
232SELECT c.site_id, COUNT(DISTINCT c.id) AS nb_categories, COUNT(i.id) AS nb_images
233  FROM '.CATEGORIES_TABLE.' AS c LEFT JOIN '.IMAGES_TABLE.' AS i
234  ON c.id=i.storage_category_id
235  WHERE c.site_id IS NOT NULL
236  GROUP BY c.site_id
237;';
238$sites_detail = hash_from_query($query, 'site_id'); 
239
240$query = '
241SELECT *
242  FROM '.SITES_TABLE.'
243;';
244$result = pwg_query($query);
245
246while ($row = pwg_db_fetch_assoc($result))
247{
248  $is_remote = url_is_remote($row['galleries_url']);
249  $base_url = PHPWG_ROOT_PATH.'admin.php';
250  $base_url.= '?page=site_manager';
251  $base_url.= '&amp;site='.$row['id'];
252  $base_url.= '&amp;pwg_token='.get_pwg_token();
253  $base_url.= '&amp;action=';
254
255  $update_url = PHPWG_ROOT_PATH.'admin.php';
256  $update_url.= '?page=site_update';
257  $update_url.= '&amp;site='.$row['id'];
258 
259  $tpl_var =
260    array(
261      'NAME' => $row['galleries_url'],
262      'TYPE' => l10n( $is_remote ? 'Remote' : 'Local' ),
263      'CATEGORIES' => (int)@$sites_detail[$row['id']]['nb_categories'],
264      'IMAGES' => (int)@$sites_detail[$row['id']]['nb_images'],
265      'U_SYNCHRONIZE' => $update_url
266     );
267     
268   if ($is_remote)
269   {
270     $tpl_var['remote'] =
271       array(
272         'U_TEST' => $base_url.'test',
273         'U_GENERATE' => $row['galleries_url'].'create_listing_file.php?action=generate',
274         'U_CLEAN' => $base_url.'clean',
275         );
276   }
277
278  if ($row['id'] != 1)
279  {
280    $tpl_var['U_DELETE'] = $base_url.'delete';
281  }
282
283  $plugin_links = array();
284  //$plugin_links is array of array composed of U_HREF, U_HINT & U_CAPTION
285  $plugin_links =
286    trigger_event('get_admins_site_links',
287      $plugin_links, $row['id'], $is_remote);
288  $tpl_var['plugin_links'] = $plugin_links;
289
290  $template->append('sites', $tpl_var);
291
292  if ( isset($local_listing_site_url) and
293       $row['galleries_url']==$local_listing_site_url )
294  {
295    $local_listing_site_id = $row['id'];
296    $template->assign( 'local_listing',
297        array(
298          'URL' =>  $local_listing_site_url,
299          'U_SYNCHRONIZE' => $update_url.'&amp;local_listing=1'
300        )
301      );
302  }
303}
304
305if ( isset($local_listing_site_url) and !isset($local_listing_site_id) )
306{
307  $template->assign( 'local_listing',
308      array(
309        'URL' =>  $local_listing_site_url,
310        'CREATE' => true
311      )
312    );
313}
314
315
316$template->assign_var_from_handle('ADMIN_CONTENT', 'site_manager');
317?>
Note: See TracBrowser for help on using the repository browser.