mirror of
https://github.com/Piwigo/Piwigo.git
synced 2025-04-25 19:00:03 +03:00

create new theme standard pages with tpl, css, js and images update backend to handle pages add config use_standard_pages on update set config to false, on install set config to true add standard pages to no be ingored in git
660 lines
19 KiB
PHP
660 lines
19 KiB
PHP
<?php
|
|
// +-----------------------------------------------------------------------+
|
|
// | This file is part of Piwigo. |
|
|
// | |
|
|
// | For copyright and license information, please view the COPYING.txt |
|
|
// | file that was distributed with this source code. |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
if( !defined("PHPWG_ROOT_PATH") )
|
|
{
|
|
die ("Hacking attempt!");
|
|
}
|
|
|
|
if (!is_webmaster())
|
|
{
|
|
$page['warnings'][] = str_replace('%s', l10n('user_status_webmaster'), l10n('%s status is required to edit parameters.'));
|
|
}
|
|
|
|
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|
include_once(PHPWG_ROOT_PATH.'admin/include/functions_upload.inc.php');
|
|
include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
|
|
|
|
// +-----------------------------------------------------------------------+
|
|
// | Check Access and exit when user status is not ok |
|
|
// +-----------------------------------------------------------------------+
|
|
check_status(ACCESS_ADMINISTRATOR);
|
|
|
|
//-------------------------------------------------------- sections definitions
|
|
|
|
check_input_parameter('section', $_GET, false, '/^[a-z]+$/i');
|
|
|
|
if (!isset($_GET['section']))
|
|
{
|
|
$page['section'] = 'main';
|
|
}
|
|
else
|
|
{
|
|
$page['section'] = $_GET['section'];
|
|
}
|
|
|
|
$main_checkboxes = array(
|
|
'allow_user_registration',
|
|
'obligatory_user_mail_address',
|
|
'rate',
|
|
'rate_anonymous',
|
|
'allow_user_customization',
|
|
'log',
|
|
'history_admin',
|
|
'history_guest',
|
|
'show_mobile_app_banner_in_gallery',
|
|
'show_mobile_app_banner_in_admin',
|
|
'upload_detect_duplicate',
|
|
'use_standard_pages',
|
|
);
|
|
|
|
$sizes_checkboxes = array(
|
|
'original_resize',
|
|
);
|
|
|
|
$comments_checkboxes = array(
|
|
'activate_comments',
|
|
'comments_forall',
|
|
'comments_validation',
|
|
'email_admin_on_comment',
|
|
'email_admin_on_comment_validation',
|
|
'user_can_delete_comment',
|
|
'user_can_edit_comment',
|
|
'email_admin_on_comment_edition',
|
|
'email_admin_on_comment_deletion',
|
|
'comments_author_mandatory',
|
|
'comments_email_mandatory',
|
|
'comments_enable_website',
|
|
);
|
|
|
|
$display_checkboxes = array(
|
|
'menubar_filter_icon',
|
|
'index_search_in_set_button',
|
|
'index_search_in_set_action',
|
|
'index_sort_order_input',
|
|
'index_flat_icon',
|
|
'index_posted_date_icon',
|
|
'index_created_date_icon',
|
|
'index_slideshow_icon',
|
|
'index_sizes_icon',
|
|
'index_new_icon',
|
|
'index_edit_icon',
|
|
'index_caddie_icon',
|
|
'display_fromto',
|
|
'picture_metadata_icon',
|
|
'picture_slideshow_icon',
|
|
'picture_favorite_icon',
|
|
'picture_sizes_icon',
|
|
'picture_download_icon',
|
|
'picture_edit_icon',
|
|
'picture_caddie_icon',
|
|
'picture_representative_icon',
|
|
'picture_navigation_icons',
|
|
'picture_navigation_thumb',
|
|
'picture_menu',
|
|
);
|
|
|
|
$display_info_checkboxes = array(
|
|
'author',
|
|
'created_on',
|
|
'posted_on',
|
|
'dimensions',
|
|
'file',
|
|
'filesize',
|
|
'tags',
|
|
'categories',
|
|
'visits',
|
|
'rating_score',
|
|
);
|
|
|
|
// image order management
|
|
$sort_fields = array(
|
|
'' => '',
|
|
'file ASC' => l10n('File name, A → Z'),
|
|
'file DESC' => l10n('File name, Z → A'),
|
|
'name ASC' => l10n('Photo title, A → Z'),
|
|
'name DESC' => l10n('Photo title, Z → A'),
|
|
'date_creation DESC' => l10n('Date created, new → old'),
|
|
'date_creation ASC' => l10n('Date created, old → new'),
|
|
'date_available DESC' => l10n('Date posted, new → old'),
|
|
'date_available ASC' => l10n('Date posted, old → new'),
|
|
'rating_score DESC' => l10n('Rating score, high → low'),
|
|
'rating_score ASC' => l10n('Rating score, low → high'),
|
|
'hit DESC' => l10n('Visits, high → low'),
|
|
'hit ASC' => l10n('Visits, low → high'),
|
|
'id ASC' => l10n('Numeric identifier, 1 → 9'),
|
|
'id DESC' => l10n('Numeric identifier, 9 → 1'),
|
|
'`rank` ASC' => l10n('Manual sort order'),
|
|
);
|
|
|
|
$comments_order = array(
|
|
'ASC' => l10n('Show oldest comments first'),
|
|
'DESC' => l10n('Show latest comments first'),
|
|
);
|
|
|
|
$mail_themes = array(
|
|
'clear' => 'Clear',
|
|
'dark' => 'Dark',
|
|
);
|
|
|
|
//------------------------------ verification and registration of modifications
|
|
if (isset($_POST['submit']))
|
|
{
|
|
check_pwg_token();
|
|
$int_pattern = '/^\d+$/';
|
|
|
|
switch ($page['section'])
|
|
{
|
|
case 'main' :
|
|
{
|
|
if ( !isset($conf['order_by_custom']) and !isset($conf['order_by_inside_category_custom']) )
|
|
{
|
|
if ( !empty($_POST['order_by']) )
|
|
{
|
|
check_input_parameter('order_by', $_POST, true, '/^('.implode('|', array_keys($sort_fields)).')$/');
|
|
|
|
$used = array();
|
|
foreach ($_POST['order_by'] as $i => $val)
|
|
{
|
|
if (empty($val) or isset($used[$val]))
|
|
{
|
|
unset($_POST['order_by'][$i]);
|
|
}
|
|
else
|
|
{
|
|
$used[$val] = true;
|
|
}
|
|
}
|
|
if ( !count($_POST['order_by']) )
|
|
{
|
|
$page['errors'][] = l10n('No order field selected');
|
|
}
|
|
else
|
|
{
|
|
// limit to the number of available parameters
|
|
$order_by = $order_by_inside_category = array_slice($_POST['order_by'], 0, ceil(count($sort_fields)/2));
|
|
|
|
// there is no rank outside categories
|
|
if ( ($i = array_search('`rank` ASC', $order_by)) !== false)
|
|
{
|
|
unset($order_by[$i]);
|
|
}
|
|
|
|
// must define a default order_by if user want to order by rank only
|
|
if ( count($order_by) == 0 )
|
|
{
|
|
$order_by = array('id ASC');
|
|
}
|
|
|
|
$_POST['order_by'] = 'ORDER BY '.implode(', ', $order_by);
|
|
$_POST['order_by_inside_category'] = 'ORDER BY '.implode(', ', $order_by_inside_category);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$page['errors'][] = l10n('No order field selected');
|
|
}
|
|
}
|
|
|
|
if (empty($_POST['email_admin_on_new_user']))
|
|
{
|
|
$_POST['email_admin_on_new_user'] = 'none';
|
|
}
|
|
elseif ('all' == $_POST['email_admin_on_new_user_filter'])
|
|
{
|
|
$_POST['email_admin_on_new_user'] = 'all';
|
|
}
|
|
else
|
|
{
|
|
if (empty($_POST['email_admin_on_new_user_filter_group']))
|
|
{
|
|
$_POST['email_admin_on_new_user'] = 'all';
|
|
}
|
|
else
|
|
{
|
|
$_POST['email_admin_on_new_user'] = 'group:'.$_POST['email_admin_on_new_user_filter_group'];
|
|
}
|
|
}
|
|
|
|
foreach( $main_checkboxes as $checkbox)
|
|
{
|
|
$_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
|
|
}
|
|
break;
|
|
}
|
|
case 'watermark' :
|
|
{
|
|
include(PHPWG_ROOT_PATH.'admin/include/configuration_watermark_process.inc.php');
|
|
break;
|
|
}
|
|
case 'sizes' :
|
|
{
|
|
include(PHPWG_ROOT_PATH.'admin/include/configuration_sizes_process.inc.php');
|
|
break;
|
|
}
|
|
case 'comments' :
|
|
{
|
|
// the number of comments per page must be an integer between 5 and 50
|
|
// included
|
|
if (!preg_match($int_pattern, $_POST['nb_comment_page'])
|
|
or $_POST['nb_comment_page'] < 5
|
|
or $_POST['nb_comment_page'] > 50)
|
|
{
|
|
$page['errors'][] = l10n('The number of comments a page must be between 5 and 50 included.');
|
|
}
|
|
foreach( $comments_checkboxes as $checkbox)
|
|
{
|
|
$_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
|
|
}
|
|
break;
|
|
}
|
|
case 'default' :
|
|
{
|
|
// Never go here
|
|
break;
|
|
}
|
|
case 'display' :
|
|
{
|
|
if (!preg_match($int_pattern, $_POST['nb_categories_page'])
|
|
or $_POST['nb_categories_page'] < 4)
|
|
{
|
|
$page['errors'][] = l10n('The number of albums a page must be above 4.');
|
|
}
|
|
foreach( $display_checkboxes as $checkbox)
|
|
{
|
|
$_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
|
|
}
|
|
foreach( $display_info_checkboxes as $checkbox)
|
|
{
|
|
$_POST['picture_informations'][$checkbox] =
|
|
empty($_POST['picture_informations'][$checkbox])? false : true;
|
|
}
|
|
$_POST['picture_informations'] = addslashes(serialize($_POST['picture_informations']));
|
|
break;
|
|
}
|
|
}
|
|
|
|
// updating configuration if no error found
|
|
if (!in_array($page['section'], array('sizes', 'watermark')) and count($page['errors']) == 0 and is_webmaster())
|
|
{
|
|
//echo '<pre>'; print_r($_POST); echo '</pre>';
|
|
$result = pwg_query('SELECT param FROM '.CONFIG_TABLE);
|
|
while ($row = pwg_db_fetch_assoc($result))
|
|
{
|
|
if (isset($_POST[$row['param']]))
|
|
{
|
|
$value = $_POST[$row['param']];
|
|
|
|
if ('gallery_title' == $row['param'])
|
|
{
|
|
if (!$conf['allow_html_descriptions'])
|
|
{
|
|
$value = strip_tags($value);
|
|
}
|
|
}
|
|
|
|
$query = '
|
|
UPDATE '.CONFIG_TABLE.'
|
|
SET value = \''. str_replace("\'", "''", $value).'\'
|
|
WHERE param = \''.$row['param'].'\'
|
|
;';
|
|
pwg_query($query);
|
|
}
|
|
}
|
|
$page['infos'][] = l10n('Your configuration settings are saved');
|
|
pwg_activity('system', ACTIVITY_SYSTEM_CORE, 'config', array('config_section'=>$page['section']));
|
|
}
|
|
|
|
//------------------------------------------------------ $conf reinitialization
|
|
load_conf_from_db();
|
|
}
|
|
|
|
// restore default derivatives settings
|
|
if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings' == $_GET['action'])
|
|
{
|
|
ImageStdParams::set_and_save( ImageStdParams::get_default_sizes() );
|
|
pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'');
|
|
clear_derivative_cache();
|
|
|
|
$page['infos'][] = l10n('Your configuration settings are saved');
|
|
pwg_activity('system', ACTIVITY_SYSTEM_CORE, 'config', array('config_section'=>$page['section'],'config_action'=>$_GET['action']));
|
|
}
|
|
|
|
//----------------------------------------------------- template initialization
|
|
$template->set_filename('config', 'configuration_' . $page['section'] . '.tpl');
|
|
|
|
// TabSheet
|
|
$tabsheet = new tabsheet();
|
|
$tabsheet->set_id('configuration');
|
|
$tabsheet->select($page['section']);
|
|
$tabsheet->assign();
|
|
|
|
$action = get_root_url().'admin.php?page=configuration';
|
|
$action.= '&section='.$page['section'];
|
|
|
|
$template->assign(
|
|
array(
|
|
'U_HELP' => get_root_url().'admin/popuphelp.php?page=configuration',
|
|
'PWG_TOKEN' => get_pwg_token(),
|
|
'F_ACTION'=>$action
|
|
));
|
|
|
|
switch ($page['section'])
|
|
{
|
|
case 'main' :
|
|
{
|
|
|
|
function order_by_is_local()
|
|
{
|
|
$conf = array();
|
|
include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
|
|
@include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
|
|
if (isset($conf['local_dir_site']))
|
|
{
|
|
@include(PHPWG_ROOT_PATH.PWG_LOCAL_DIR. 'config/config.inc.php');
|
|
}
|
|
|
|
return isset($conf['order_by']) or isset($conf['order_by_inside_category']);
|
|
}
|
|
|
|
if (order_by_is_local())
|
|
{
|
|
$page['warnings'][] = l10n('You have specified <i>$conf[\'order_by\']</i> in your local configuration file, this parameter in deprecated, please remove it or rename it into <i>$conf[\'order_by_custom\']</i> !');
|
|
}
|
|
|
|
if ( isset($conf['order_by_custom']) or isset($conf['order_by_inside_category_custom']) )
|
|
{
|
|
$order_by = array('');
|
|
$template->assign('ORDER_BY_IS_CUSTOM', true);
|
|
}
|
|
else
|
|
{
|
|
$out = array();
|
|
$order_by = trim($conf['order_by_inside_category']);
|
|
$order_by = str_replace('ORDER BY ', false, $order_by);
|
|
$order_by = explode(', ', $order_by);
|
|
}
|
|
|
|
$template->assign(
|
|
'main',
|
|
array(
|
|
'CONF_GALLERY_TITLE' => htmlspecialchars($conf['gallery_title']),
|
|
'CONF_PAGE_BANNER' => htmlspecialchars($conf['page_banner']),
|
|
'week_starts_on_options' => array(
|
|
'sunday' => $lang['day'][0],
|
|
'monday' => $lang['day'][1],
|
|
),
|
|
'week_starts_on_options_selected' => $conf['week_starts_on'],
|
|
'mail_theme' => $conf['mail_theme'],
|
|
'mail_theme_options' => $mail_themes,
|
|
'order_by' => $order_by,
|
|
'order_by_options' => $sort_fields,
|
|
'email_admin_on_new_user' => 'none' != $conf['email_admin_on_new_user'],
|
|
'email_admin_on_new_user_filter' => in_array($conf['email_admin_on_new_user'], array('none', 'all')) ? 'all' : 'group',
|
|
'email_admin_on_new_user_filter_group' => preg_match('/^group:(\d+)$/', $conf['email_admin_on_new_user'], $matches) ? $matches[1] : -1,
|
|
)
|
|
);
|
|
|
|
// list of groups
|
|
$query = '
|
|
SELECT
|
|
id,
|
|
name
|
|
FROM `'.GROUPS_TABLE.'`
|
|
;';
|
|
$groups = query2array($query, 'id', 'name');
|
|
natcasesort($groups);
|
|
|
|
$template->assign(
|
|
array(
|
|
'group_options' => $groups,
|
|
)
|
|
);
|
|
|
|
foreach ($main_checkboxes as $checkbox)
|
|
{
|
|
$template->append(
|
|
'main',
|
|
array(
|
|
$checkbox => $conf[$checkbox]
|
|
),
|
|
true
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
case 'comments' :
|
|
{
|
|
$template->assign(
|
|
'comments',
|
|
array(
|
|
'NB_COMMENTS_PAGE'=>$conf['nb_comment_page'],
|
|
'comments_order'=>$conf['comments_order'],
|
|
'comments_order_options'=> $comments_order
|
|
)
|
|
);
|
|
|
|
foreach ($comments_checkboxes as $checkbox)
|
|
{
|
|
$template->append(
|
|
'comments',
|
|
array(
|
|
$checkbox => $conf[$checkbox]
|
|
),
|
|
true
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
case 'default' :
|
|
{
|
|
$edit_user = build_user($conf['guest_id'], false);
|
|
include_once(PHPWG_ROOT_PATH.'profile.php');
|
|
|
|
$errors = array();
|
|
if (save_profile_from_post($edit_user, $errors))
|
|
{
|
|
// Reload user
|
|
$edit_user = build_user($conf['guest_id'], false);
|
|
$page['infos'][] = l10n('Information data registered in database');
|
|
}
|
|
$page['errors'] = array_merge($page['errors'], $errors);
|
|
|
|
load_profile_in_template(
|
|
$action,
|
|
'',
|
|
$edit_user,
|
|
'GUEST_'
|
|
);
|
|
$template->assign('default', array());
|
|
break;
|
|
}
|
|
case 'display' :
|
|
{
|
|
foreach ($display_checkboxes as $checkbox)
|
|
{
|
|
$template->append(
|
|
'display',
|
|
array(
|
|
$checkbox => $conf[$checkbox]
|
|
),
|
|
true
|
|
);
|
|
}
|
|
$template->append(
|
|
'display',
|
|
array(
|
|
'picture_informations' => unserialize($conf['picture_informations']),
|
|
'NB_CATEGORIES_PAGE' => $conf['nb_categories_page'],
|
|
),
|
|
true
|
|
);
|
|
break;
|
|
}
|
|
case 'sizes' :
|
|
{
|
|
// we only load the derivatives if it was not already loaded: it occurs
|
|
// when submitting the form and an error remains
|
|
if (!isset($page['sizes_loaded_in_tpl']))
|
|
{
|
|
$is_gd = (pwg_image::get_library()=='gd')? true : false;
|
|
$template->assign('is_gd', $is_gd);
|
|
$template->assign(
|
|
'sizes',
|
|
array(
|
|
'original_resize_maxwidth' => $conf['original_resize_maxwidth'],
|
|
'original_resize_maxheight' => $conf['original_resize_maxheight'],
|
|
'original_resize_quality' => $conf['original_resize_quality'],
|
|
)
|
|
);
|
|
|
|
foreach ($sizes_checkboxes as $checkbox)
|
|
{
|
|
$template->append(
|
|
'sizes',
|
|
array(
|
|
$checkbox => $conf[$checkbox]
|
|
),
|
|
true
|
|
);
|
|
}
|
|
|
|
// derivatives = multiple size
|
|
$enabled = ImageStdParams::get_defined_type_map();
|
|
$disabled = @unserialize(@$conf['disabled_derivatives']);
|
|
if ($disabled === false)
|
|
{
|
|
$disabled = array();
|
|
}
|
|
|
|
$tpl_vars = array();
|
|
foreach(ImageStdParams::get_all_types() as $type)
|
|
{
|
|
$tpl_var = array();
|
|
|
|
$tpl_var['must_square'] = ($type==IMG_SQUARE ? true : false);
|
|
$tpl_var['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB || $type==$conf['derivative_default_size'])? true : false;
|
|
|
|
if ($params = @$enabled[$type])
|
|
{
|
|
$tpl_var['enabled'] = true;
|
|
}
|
|
else
|
|
{
|
|
$tpl_var['enabled']=false;
|
|
$params=@$disabled[$type];
|
|
}
|
|
|
|
if ($params)
|
|
{
|
|
list($tpl_var['w'],$tpl_var['h']) = $params->sizing->ideal_size;
|
|
if ( ($tpl_var['crop'] = round(100*$params->sizing->max_crop)) > 0)
|
|
{
|
|
list($tpl_var['minw'],$tpl_var['minh']) = $params->sizing->min_size;
|
|
}
|
|
else
|
|
{
|
|
$tpl_var['minw'] = $tpl_var['minh'] = "";
|
|
}
|
|
$tpl_var['sharpen'] = $params->sharpen;
|
|
}
|
|
$tpl_vars[$type]=$tpl_var;
|
|
}
|
|
$template->assign('derivatives', $tpl_vars);
|
|
$template->assign('resize_quality', ImageStdParams::$quality);
|
|
|
|
$tpl_vars = array();
|
|
$now = time();
|
|
foreach(ImageStdParams::$custom as $custom=>$time)
|
|
{
|
|
$tpl_vars[$custom] = ($now-$time<=24*3600) ? l10n('today') : time_since($time, 'day');
|
|
}
|
|
$template->assign('custom_derivatives', $tpl_vars);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 'watermark' :
|
|
{
|
|
$watermark_files = array();
|
|
foreach (glob(PHPWG_ROOT_PATH.'themes/default/watermarks/*.png') as $file)
|
|
{
|
|
$watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
|
|
}
|
|
if ( ($glob=glob(PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'watermarks/*.png')) !== false)
|
|
{
|
|
foreach ($glob as $file)
|
|
{
|
|
$watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
|
|
}
|
|
}
|
|
$watermark_filemap = array( '' => '---' );
|
|
foreach( $watermark_files as $file)
|
|
{
|
|
$display = basename($file);
|
|
$watermark_filemap[$file] = $display;
|
|
}
|
|
$template->assign('watermark_files', $watermark_filemap);
|
|
|
|
if ($template->get_template_vars('watermark') === null)
|
|
{
|
|
$wm = ImageStdParams::get_watermark();
|
|
|
|
$position = 'custom';
|
|
if ($wm->xpos == 0 and $wm->ypos == 0)
|
|
{
|
|
$position = 'topleft';
|
|
}
|
|
if ($wm->xpos == 100 and $wm->ypos == 0)
|
|
{
|
|
$position = 'topright';
|
|
}
|
|
if ($wm->xpos == 50 and $wm->ypos == 50)
|
|
{
|
|
$position = 'middle';
|
|
}
|
|
if ($wm->xpos == 0 and $wm->ypos == 100)
|
|
{
|
|
$position = 'bottomleft';
|
|
}
|
|
if ($wm->xpos == 100 and $wm->ypos == 100)
|
|
{
|
|
$position = 'bottomright';
|
|
}
|
|
|
|
if ($wm->xrepeat != 0 || $wm->yrepeat != 0)
|
|
{
|
|
$position = 'custom';
|
|
}
|
|
|
|
$template->assign(
|
|
'watermark',
|
|
array(
|
|
'file' => $wm->file,
|
|
'minw' => $wm->min_size[0],
|
|
'minh' => $wm->min_size[1],
|
|
'xpos' => $wm->xpos,
|
|
'ypos' => $wm->ypos,
|
|
'xrepeat' => $wm->xrepeat,
|
|
'yrepeat' => $wm->yrepeat,
|
|
'opacity' => $wm->opacity,
|
|
'position' => $position,
|
|
)
|
|
);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
$template->assign('isWebmaster', (is_webmaster()) ? 1 : 0);
|
|
$template->assign('ADMIN_PAGE_TITLE', l10n('Configuration'));
|
|
|
|
//----------------------------------------------------------- sending html code
|
|
$template->assign_var_from_handle('ADMIN_CONTENT', 'config');
|
|
?>
|