aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
Diffstat (limited to 'admin')
-rw-r--r--admin/configuration.php162
-rw-r--r--admin/themes/default/template/configuration.tpl56
-rw-r--r--admin/themes/default/theme.css13
3 files changed, 121 insertions, 110 deletions
diff --git a/admin/configuration.php b/admin/configuration.php
index 76a4123a2..98e07c9bf 100644
--- a/admin/configuration.php
+++ b/admin/configuration.php
@@ -102,12 +102,21 @@ $display_info_checkboxes = array(
'privacy_level',
);
-$order_options = array(
- ' ORDER BY date_available DESC, file ASC, id ASC' => 'Post date DESC, File name ASC',
- ' ORDER BY date_available ASC, file ASC, id ASC' => 'Post date ASC, File name ASC',
- ' ORDER BY file DESC, date_available DESC, id ASC' => 'File name DESC, Post date DESC',
- ' ORDER BY file ASC, date_available DESC, id ASC' => 'File name ASC, Post date DESC',
- 'custom' => l10n('Custom'),
+// image order management
+$sort_fields = array(
+ '' => '',
+ 'rank' => l10n('Rank'),
+ 'file' => l10n('File name'),
+ 'date_creation' => l10n('Creation date'),
+ 'date_available' => l10n('Post date'),
+ 'average_rate' => l10n('Average rate'),
+ 'hit' => l10n('Most visited'),
+ 'id' => 'Id',
+ );
+
+$sort_directions = array(
+ 'ASC' => l10n('ascending'),
+ 'DESC' => l10n('descending'),
);
//------------------------------ verification and registration of modifications
@@ -118,58 +127,32 @@ if (isset($_POST['submit']))
switch ($page['section'])
{
case 'main' :
- {
- $order_regex = '#^(([ \w\']{2,}) (ASC|DESC),{1}){1,}$#';
- // process 'order_by_perso' string
- if ($_POST['order_by'] == 'custom' AND !empty($_POST['order_by_perso']))
+ {
+ if ( !isset($conf['order_by_custom']) and !isset($conf['order_by_inside_category_custom']) )
{
- $_POST['order_by_perso'] = stripslashes(trim($_POST['order_by_perso']));
- $_POST['order_by'] = str_ireplace(
- array('order by ', 'asc', 'desc', '"'),
- array(null, 'ASC', 'DESC', '\''),
- $_POST['order_by_perso']
- );
-
- if (preg_match($order_regex, $_POST['order_by'].','))
- {
- $_POST['order_by'] = ' ORDER BY '.addslashes($_POST['order_by']);
- }
- else
+ if ( !empty($_POST['order_by_field']) )
{
- array_push($page['errors'], l10n('Invalid order string').' « '.$_POST['order_by'].' »');
- }
- }
- else if ($_POST['order_by'] == 'custom')
- {
- array_push($page['errors'], l10n('Invalid order string'));
- }
- // process 'order_by_inside_category_perso' string
- if ($_POST['order_by_inside_category'] == 'as_order_by')
- {
- $_POST['order_by_inside_category'] = $_POST['order_by'];
- }
- else if ($_POST['order_by_inside_category'] == 'custom' AND !empty($_POST['order_by_inside_category_perso']))
- {
- $_POST['order_by_inside_category_perso'] = stripslashes(trim($_POST['order_by_inside_category_perso']));
- $_POST['order_by_inside_category'] = str_ireplace(
- array('order by ', 'asc', 'desc', '"'),
- array(null, 'ASC', 'DESC', '\''),
- $_POST['order_by_inside_category_perso']
- );
-
- if (preg_match($order_regex, $_POST['order_by_inside_category'].','))
- {
- $_POST['order_by_inside_category'] = ' ORDER BY '.addslashes($_POST['order_by_inside_category']);
- }
- else
- {
- array_push($page['errors'], l10n('Invalid order string').' « '.$_POST['order_by_inside_category'].' »');
+ $order_by = array();
+ $order_by_inside_category = array();
+ for ($i=0; $i<count($_POST['order_by_field']); $i++)
+ {
+ if ($_POST['order_by_field'][$i] == '')
+ {
+ array_push($page['errors'], l10n('No field selected'));
+ }
+ else
+ {
+ if ($_POST['order_by_field'][$i] != 'rank')
+ {
+ $order_by[] = $_POST['order_by_field'][$i].' '.$_POST['order_by_direction'][$i];
+ }
+ $order_by_inside_category[] = $_POST['order_by_field'][$i].' '.$_POST['order_by_direction'][$i];
+ }
+ }
+ $_POST['order_by'] = 'ORDER BY '.implode(', ', $order_by);
+ $_POST['order_by_inside_category'] = 'ORDER BY '.implode(', ', $order_by_inside_category);
}
}
- else if ($_POST['order_by_inside_category'] == 'custom')
- {
- array_push($page['errors'], l10n('Invalid order string'));
- }
if (empty($_POST['gallery_locked']) and $conf['gallery_locked'])
{
@@ -294,35 +277,50 @@ $template->assign(
switch ($page['section'])
{
case 'main' :
- {
- // process 'order_by' string
- if (array_key_exists($conf['order_by'], $order_options))
+ {
+
+ function order_by_is_local()
{
- $order_by_selected = $conf['order_by'];
- $order_by_perso = null;
- }
- else
- {
- $order_by_selected = 'custom';
- $order_by_perso = str_replace(' ORDER BY ', null, $conf['order_by']);
+ @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']);
}
- // process 'order_by_inside_category' string
- if ($conf['order_by_inside_category'] == $conf['order_by'])
+
+ if (order_by_is_local())
{
- $order_by_inside_category_selected = 'as_order_by';
- $order_by_inside_category_perso = null;
+ array_push($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> !'));
}
- else if (array_key_exists($conf['order_by_inside_category'], $order_options))
+
+ if ( isset($conf['order_by_custom']) or isset($conf['order_by_inside_category_custom']) )
{
- $order_by_inside_category_selected = $conf['order_by_inside_category'];
- $order_by_inside_category_perso = null;
+ $order_by = array(array(
+ 'FIELD' => '',
+ 'DIRECTION' => 'ASC',
+ ));
+
+ $template->assign('ORDER_BY_IS_CUSTOM', true);
}
else
{
- $order_by_inside_category_selected = 'custom';
- $order_by_inside_category_perso = str_replace(' ORDER BY ', null, $conf['order_by_inside_category']);
+ $out = array();
+ $order_by = trim($conf['order_by_inside_category']);
+ $order_by = str_replace('ORDER BY ', null, $order_by);
+ $order_by = explode(', ', $order_by);
+ foreach ($order_by as $field)
+ {
+ $field= explode(' ', $field);
+ $out[] = array(
+ 'FIELD' => $field[0],
+ 'DIRECTION' => $field[1],
+ );
+ }
+ $order_by = $out;
}
-
+
$template->assign(
'main',
array(
@@ -334,17 +332,11 @@ switch ($page['section'])
'monday' => $lang['day'][1],
),
'week_starts_on_options_selected' => $conf['week_starts_on'],
- 'order_by_options' => $order_options,
- 'order_by_selected' => $order_by_selected,
- 'order_by_perso' => $order_by_perso,
- 'order_by_inside_category_options' =>
- array_merge(
- array('as_order_by'=>l10n('As default order')),
- $order_options
- ),
- 'order_by_inside_category_selected' => $order_by_inside_category_selected,
- 'order_by_inside_category_perso' => $order_by_inside_category_perso,
- ));
+ 'order_by' => $order_by,
+ 'order_field_options' => $sort_fields,
+ 'order_direction_options' => $sort_directions,
+ )
+ );
foreach ($main_checkboxes as $checkbox)
{
diff --git a/admin/themes/default/template/configuration.tpl b/admin/themes/default/template/configuration.tpl
index ac40c6fbd..d2fb8910a 100644
--- a/admin/themes/default/template/configuration.tpl
+++ b/admin/themes/default/template/configuration.tpl
@@ -100,39 +100,47 @@
&nbsp;
<span class="property">
{'Default photos order'|@translate}
- {html_options name="order_by" options=$main.order_by_options selected=$main.order_by_selected}
- <input type="text" name="order_by_perso" size="40" value="{$main.order_by_perso}"
- {if $main.order_by_selected != 'custom'}style="display:none;"{/if}/>
- </span>
- </li>
- <li>
- &nbsp;
- <span class="property">
- {'Default photos order inside album'|@translate}
- {html_options name="order_by_inside_category" options=$main.order_by_inside_category_options selected=$main.order_by_inside_category_selected}
- <input type="text" name="order_by_inside_category_perso" size="40" value="{$main.order_by_inside_category_perso}"
- {if $main.order_by_inside_category_selected != 'custom'}style="display:none;"{/if}>
+
+ {foreach from=$main.order_by item=order}
+ <span class="filter {if $ORDER_BY_IS_CUSTOM}transparent{/if}">
+ <a class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
+ <select name="order_by_field[]" {if $ORDER_BY_IS_CUSTOM}disabled{/if}>
+ {html_options options=$main.order_field_options selected=$order.FIELD }
+ </select>
+ <select name="order_by_direction[]" {if $ORDER_BY_IS_CUSTOM}disabled{/if}>
+ {html_options options=$main.order_direction_options selected=$order.DIRECTION }
+ </select>
+ </span>
+ {/foreach}
+
+ {if !$ORDER_BY_IS_CUSTOM}
+ <a class="addFilter" title="{'Add a filter'|@translate}"><span>[+]</span></a>
+ {else}
+ <span class="order_by_is_custom">{'You can\'t define a default photo order because you have a custom setting in your local configuration.'|@translate}</span>
+ {/if}
</span>
</li>
+{if !$ORDER_BY_IS_CUSTOM}
{footer_script require='jquery'}{literal}
jQuery(document).ready(function () {
- $('select[name="order_by"]').change(function () {
- if ($(this).val() == 'custom') {
- $('input[name="order_by_perso"]').show();
- } else {
- $('input[name="order_by_perso"]').hide();
- }
+ $('.addFilter').click(function() {
+ rel = $(this).attr('rel');
+ $(this).prev('span.filter').clone().insertBefore($(this));
+ $(this).prev('span.filter').children('select[name="order_by_field[]"]').val('');
+ $(this).prev('span.filter').children('select[name="order_by_direction[]"]').val('ASC');
+
+ $(".removeFilter").click(function () {
+ $(this).parent('span.filter').remove();
+ });
});
- $('select[name="order_by_inside_category"]').change(function () {
- if ($(this).val() == 'custom') {
- $('input[name="order_by_inside_category_perso"]').show();
- } else {
- $('input[name="order_by_inside_category_perso"]').hide();
- }
+
+ $(".removeFilter").click(function () {
+ $(this).parent('span.filter').remove();
});
});
{/literal}{/footer_script}
+{/if}
</ul>
</fieldset>
{/if}
diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css
index 20bbfe6f4..72920e3ac 100644
--- a/admin/themes/default/theme.css
+++ b/admin/themes/default/theme.css
@@ -1047,4 +1047,15 @@ div.token-input-dropdown ul li {background-color: #fff;padding: 3px;margin: 0;li
div.token-input-dropdown ul li.token-input-dropdown-item {background-color: #fff;}
div.token-input-dropdown ul li.token-input-dropdown-item2 {background-color: #fff;}
div.token-input-dropdown ul li em {font-weight: bold;font-style: normal;}
-div.token-input-dropdown ul li.token-input-selected-dropdown-item {background-color: #3b5998;color: #fff;} \ No newline at end of file
+div.token-input-dropdown ul li.token-input-selected-dropdown-item {background-color: #3b5998;color: #fff;}
+
+#mainConfCheck a.addFilter {background: url(icon/plus.gif) no-repeat 0 4px;width:19px;height:19px;display:inline-block;}
+#mainConfCheck a.addFilter:hover {background-position:0 5px;border:none;}
+#mainConfCheck a.addFilter span {display:none;}
+#mainConfCheck a.removeFilter {background: url(icon/remove_filter.png) no-repeat top left;width:7px;height:7px;display:inline-block;}
+#mainConfCheck a.removeFilter:hover {background: url(icon/remove_filter_hover.png);border:none;}
+#mainConfCheck a.removeFilter span {display:none;}
+#mainConfCheck span.property span.filter:first-child a.removeFilter {display:none;} /* can't delete the first field */
+#mainConfCheck span.filter {margin-right:10px;}
+#mainConfCheck .transparent {opacity:0.5;filter:alpha(opacity=50);}
+#mainConfCheck .order_by_is_custom {display:block;font-weight:normal;font-style:italic;} \ No newline at end of file