diff --git a/admin/include/add_core_tabs.inc.php b/admin/include/add_core_tabs.inc.php
index 628cea866..7b0146fd8 100644
--- a/admin/include/add_core_tabs.inc.php
+++ b/admin/include/add_core_tabs.inc.php
@@ -153,6 +153,11 @@ function add_core_tabs($sheets, $tab_id)
global $my_base_url;
$sheets['synchronization'] = array('caption' => l10n('Database synchronization with files'), 'url' => $my_base_url.'site_update&site=1');
break;
+ case 'maintenance':
+ global $my_base_url;
+ $sheets['actions'] = array('caption' => ''.l10n('Actions'), 'url' => $my_base_url.'maintenance&tab=actions');
+ $sheets['env'] = array('caption' => ''.l10n('Environment'), 'url' => $my_base_url.'maintenance&tab=env');
+ break;
}
return $sheets;
diff --git a/admin/maintenance.php b/admin/maintenance.php
index b2765c268..f24c37763 100644
--- a/admin/maintenance.php
+++ b/admin/maintenance.php
@@ -26,342 +26,26 @@ if (isset($_GET['action']))
}
// +-----------------------------------------------------------------------+
-// | actions |
+// | tabs |
// +-----------------------------------------------------------------------+
-$action = isset($_GET['action']) ? $_GET['action'] : '';
+include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
+$my_base_url = get_root_url().'admin.php?page=';
-switch ($action)
+if (isset($_GET['tab']))
{
- case 'phpinfo' :
- {
- phpinfo();
- exit();
- }
- case 'lock_gallery' :
- {
- conf_update_param('gallery_locked', 'true');
- redirect(get_root_url().'admin.php?page=maintenance');
- break;
- }
- case 'unlock_gallery' :
- {
- conf_update_param('gallery_locked', 'false');
- $_SESSION['page_infos'] = array(l10n('Gallery unlocked'));
- redirect(get_root_url().'admin.php?page=maintenance');
- break;
- }
- case 'categories' :
- {
- images_integrity();
- categories_integrity();
- update_uppercats();
- update_category('all');
- update_global_rank();
- invalidate_user_cache(true);
- break;
- }
- case 'images' :
- {
- images_integrity();
- update_path();
- include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
- update_rating_score();
- invalidate_user_cache();
- break;
- }
- case 'delete_orphan_tags' :
- {
- delete_orphan_tags();
- break;
- }
- case 'user_cache' :
- {
- empty_lounge(false);
- invalidate_user_cache();
- break;
- }
- case 'history_detail' :
- {
- $query = '
-DELETE
- FROM '.HISTORY_TABLE.'
-;';
- pwg_query($query);
- break;
- }
- case 'history_summary' :
- {
- $query = '
-DELETE
- FROM '.HISTORY_SUMMARY_TABLE.'
-;';
- pwg_query($query);
- break;
- }
- case 'sessions' :
- {
- pwg_session_gc();
-
- // delete all sessions associated to invalid user ids (it should never happen)
- $query = '
-SELECT
- id,
- data
- FROM '.SESSIONS_TABLE.'
-;';
- $sessions = query2array($query);
-
- $query = '
-SELECT
- '.$conf['user_fields']['id'].' AS id
- FROM '.USERS_TABLE.'
-;';
- $all_user_ids = query2array($query, 'id', null);
-
- $sessions_to_delete = array();
-
- foreach ($sessions as $session)
- {
- if (preg_match('/pwg_uid\|i:(\d+);/', $session['data'], $matches))
- {
- if (!isset($all_user_ids[ $matches[1] ]))
- {
- $sessions_to_delete[] = $session['id'];
- }
- }
- }
-
- if (count($sessions_to_delete) > 0)
- {
- $query = '
-DELETE
- FROM '.SESSIONS_TABLE.'
- WHERE id IN (\''.implode("','", $sessions_to_delete).'\')
-;';
- pwg_query($query);
- }
-
- break;
- }
- case 'feeds' :
- {
- $query = '
-DELETE
- FROM '.USER_FEED_TABLE.'
- WHERE last_check IS NULL
-;';
- pwg_query($query);
- break;
- }
- case 'database' :
- {
- do_maintenance_all_tables();
- break;
- }
- case 'c13y' :
- {
- include_once(PHPWG_ROOT_PATH.'admin/include/check_integrity.class.php');
- $c13y = new check_integrity();
- $c13y->maintenance();
- break;
- }
- case 'search' :
- {
- $query = '
-DELETE
- FROM '.SEARCH_TABLE.'
-;';
- pwg_query($query);
- break;
- }
- case 'compiled-templates':
- {
- $template->delete_compiled_templates();
- FileCombiner::clear_combined_files();
- $persistent_cache->purge(true);
- unset($_SESSION['cachedir_info']);
- break;
- }
- case 'derivatives':
- {
- clear_derivative_cache($_GET['type']);
- unset($_SESSION['cachedir_info']);
- break;
- }
-
- case 'check_upgrade':
- {
- if (!fetchRemote(PHPWG_URL.'/download/latest_version', $result))
- {
- $page['errors'][] = l10n('Unable to check for upgrade.');
- }
- else
- {
- $versions = array('current' => PHPWG_VERSION);
- $lines = @explode("\r\n", $result);
-
- // if the current version is a BSF (development branch) build, we check
- // the first line, for stable versions, we check the second line
- if (preg_match('/^BSF/', $versions['current']))
- {
- $versions['latest'] = trim($lines[0]);
-
- // because integer are limited to 4,294,967,296 we need to split BSF
- // versions in date.time
- foreach ($versions as $key => $value)
- {
- $versions[$key] =
- preg_replace('/BSF_(\d{8})(\d{4})/', '$1.$2', $value);
- }
- }
- else
- {
- $versions['latest'] = trim($lines[1]);
- }
-
- if ('' == $versions['latest'])
- {
- $page['errors'][] = l10n('Check for upgrade failed for unknown reasons.');
- }
- // concatenation needed to avoid automatic transformation by release
- // script generator
- else if ('%'.'PWGVERSION'.'%' == $versions['current'])
- {
- $page['infos'][] = l10n('You are running on development sources, no check possible.');
- }
- else if (version_compare($versions['current'], $versions['latest']) < 0)
- {
- $page['infos'][] = l10n('A new version of Piwigo is available.');
- }
- else
- {
- $page['infos'][] = l10n('You are running the latest version of Piwigo.');
- }
- }
- }
-
- default :
- {
- break;
- }
-}
-
-
-// +-----------------------------------------------------------------------+
-// | template init |
-// +-----------------------------------------------------------------------+
-
-$template->set_filenames(array('maintenance'=>'maintenance.tpl'));
-
-$url_format = get_root_url().'admin.php?page=maintenance&action=%s&pwg_token='.get_pwg_token();
-
-$purge_urls[l10n('All')] = sprintf($url_format, 'derivatives').'&type=all';
-foreach(ImageStdParams::get_defined_type_map() as $params)
-{
- $purge_urls[ l10n($params->type) ] = sprintf($url_format, 'derivatives').'&type='.$params->type;
-}
-$purge_urls[ l10n(IMG_CUSTOM) ] = sprintf($url_format, 'derivatives').'&type='.IMG_CUSTOM;
-
-$php_current_timestamp = date("Y-m-d H:i:s");
-$db_version = pwg_get_db_version();
-list($db_current_date) = pwg_db_fetch_row(pwg_query('SELECT now();'));
-
-$template->assign(
- array(
- 'U_MAINT_CATEGORIES' => sprintf($url_format, 'categories'),
- 'U_MAINT_IMAGES' => sprintf($url_format, 'images'),
- 'U_MAINT_ORPHAN_TAGS' => sprintf($url_format, 'delete_orphan_tags'),
- 'U_MAINT_USER_CACHE' => sprintf($url_format, 'user_cache'),
- 'U_MAINT_HISTORY_DETAIL' => sprintf($url_format, 'history_detail'),
- 'U_MAINT_HISTORY_SUMMARY' => sprintf($url_format, 'history_summary'),
- 'U_MAINT_SESSIONS' => sprintf($url_format, 'sessions'),
- 'U_MAINT_FEEDS' => sprintf($url_format, 'feeds'),
- 'U_MAINT_DATABASE' => sprintf($url_format, 'database'),
- 'U_MAINT_C13Y' => sprintf($url_format, 'c13y'),
- 'U_MAINT_SEARCH' => sprintf($url_format, 'search'),
- 'U_MAINT_COMPILED_TEMPLATES' => sprintf($url_format, 'compiled-templates'),
- 'U_MAINT_DERIVATIVES' => sprintf($url_format, 'derivatives'),
- 'purge_derivatives' => $purge_urls,
- 'U_HELP' => get_root_url().'admin/popuphelp.php?page=maintenance',
-
- 'PHPWG_URL' => PHPWG_URL,
- 'PWG_VERSION' => PHPWG_VERSION,
- 'U_CHECK_UPGRADE' => sprintf($url_format, 'check_upgrade'),
- 'OS' => PHP_OS,
- 'PHP_VERSION' => phpversion(),
- 'DB_ENGINE' => 'MySQL',
- 'DB_VERSION' => $db_version,
- 'U_PHPINFO' => sprintf($url_format, 'phpinfo'),
- 'PHP_DATATIME' => $php_current_timestamp,
- 'DB_DATATIME' => $db_current_date,
- )
- );
-
-// graphics library
-switch (pwg_image::get_library())
-{
- case 'imagick':
- $library = 'ImageMagick';
- $img = new Imagick();
- $version = $img->getVersion();
- if (preg_match('/ImageMagick \d+\.\d+\.\d+-?\d*/', $version['versionString'], $match))
- {
- $library = $match[0];
- }
- $template->assign('GRAPHICS_LIBRARY', $library);
- break;
-
- case 'ext_imagick':
- $library = 'External ImageMagick';
- exec($conf['ext_imagick_dir'].'convert -version', $returnarray);
- if (preg_match('/Version: ImageMagick (\d+\.\d+\.\d+-?\d*)/', $returnarray[0], $match))
- {
- $library .= ' ' . $match[1];
- }
- $template->assign('GRAPHICS_LIBRARY', $library);
- break;
-
- case 'gd':
- $gd_info = gd_info();
- $template->assign('GRAPHICS_LIBRARY', 'GD '.@$gd_info['GD Version']);
- break;
-}
-
-if ($conf['gallery_locked'])
-{
- $template->assign(
- array(
- 'U_MAINT_UNLOCK_GALLERY' => sprintf($url_format, 'unlock_gallery'),
- )
- );
+ check_input_parameter('tab', $_GET, false, '/^(actions|env)$/');
+ $page['tab'] = $_GET['tab'];
}
else
{
- $template->assign(
- array(
- 'U_MAINT_LOCK_GALLERY' => sprintf($url_format, 'lock_gallery'),
- )
- );
+ $page['tab'] = 'actions';
}
-// +-----------------------------------------------------------------------+
-// | Define advanced features |
-// +-----------------------------------------------------------------------+
-$advanced_features = array();
+$tabsheet = new tabsheet();
+$tabsheet->set_id('maintenance');
+$tabsheet->select($page['tab']);
+$tabsheet->assign();
-//$advanced_features is array of array composed of CAPTION & URL
-$advanced_features = trigger_change(
- 'get_admin_advanced_features_links',
- $advanced_features
- );
-
-$template->assign('advanced_features', $advanced_features);
-
-// +-----------------------------------------------------------------------+
-// | sending html code |
-// +-----------------------------------------------------------------------+
-
-$template->assign_var_from_handle('ADMIN_CONTENT', 'maintenance');
-?>
\ No newline at end of file
+include(PHPWG_ROOT_PATH.'admin/maintenance_'.$page['tab'].'.php');
diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css
index c55bcf909..f2c649c74 100644
--- a/admin/themes/default/theme.css
+++ b/admin/themes/default/theme.css
@@ -2691,7 +2691,8 @@ a#showPermissions:hover {text-decoration: none;}
}
.user-list-checkbox .select-checkbox,
-.tag-container .tag-box .select-checkbox {
+.tag-container .tag-box .select-checkbox,
+.delete-size-check .select-checkbox {
display: none;
width: 15px;
height: 15px;
@@ -2705,23 +2706,28 @@ a#showPermissions:hover {text-decoration: none;}
display: inline-block;
}
-.tag-container.selection .tag-box .select-checkbox {
+.tag-container.selection .tag-box .select-checkbox,
+.delete-size-check .select-checkbox {
display: block;
}
.user-list-checkbox:hover .select-checkbox,
.user-list-checkbox[data-selected='1'] .select-checkbox,
.tag-container .tag-box:hover .select-checkbox,
-.tag-container .tag-box[data-selected='1'] .select-checkbox {
+.tag-container .tag-box[data-selected='1'] .select-checkbox,
+.delete-size-check:hover .select-checkbox,
+.delete-size-check[data-selected='1'] .select-checkbox {
background-color: #ffa646;
}
-.tag-container .tag-box .select-checkbox.show {
+.tag-container .tag-box .select-checkbox.show,
+.delete-size-check .select-checkbox.show {
display: block;
}
.user-list-checkbox .select-checkbox i,
-.tag-container .tag-box .select-checkbox i {
+.tag-container .tag-box .select-checkbox i,
+.delete-size-check .select-checkbox i {
display: none;
font-size: 14px;
transform: translate(-10px , -3px);
@@ -2733,7 +2739,8 @@ a#showPermissions:hover {text-decoration: none;}
}
.user-list-checkbox[data-selected='1'] .select-checkbox i,
-.tag-container .tag-box[data-selected='1'] .select-checkbox i {
+.tag-container .tag-box[data-selected='1'] .select-checkbox i,
+.delete-size-check[data-selected='1'] .select-checkbox i {
display: inline;
}
@@ -5058,4 +5065,4 @@ color:#FF7B00;
}
.user-property-input.user-property-input-password:hover {
background-color: #f0f0f0;
-}
\ No newline at end of file
+}
diff --git a/admin/themes/roma/theme.css b/admin/themes/roma/theme.css
index 587b15e58..06b61d6e0 100644
--- a/admin/themes/roma/theme.css
+++ b/admin/themes/roma/theme.css
@@ -991,7 +991,8 @@ li.plupload_delete a:hover {background: url("images/cancelhover.svg")!important;
box-shadow: none;
}
-.tag-container .tag-box[data-selected="1"] .select-checkbox {
+.tag-container .tag-box[data-selected="1"] .select-checkbox,
+.delete-size-check[data-selected="1"] .select-checkbox {
background-color: #c76a23;
border-color: #c76a23;
}