mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-06 01:42:29 +02:00
add MultiView controller on admin page (replaces the "switch theme" button)
git-svn-id: http://piwigo.org/svn/trunk@29168 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -101,6 +101,31 @@ class MultiView
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current url minus MultiView params
|
||||
*
|
||||
* @param bool $with_amp - adds ? or & at the end of the url
|
||||
* @return string
|
||||
*/
|
||||
public function get_clean_admin_url($with_amp=false)
|
||||
{
|
||||
$url = PHPWG_ROOT_PATH.'admin.php';
|
||||
|
||||
$get = $_GET;
|
||||
unset($get['page'], $get['section'], $get['tag']);
|
||||
if (count($get) == 0 and !empty($_SERVER['QUERY_STRING']))
|
||||
{
|
||||
$url.= '?' . str_replace('&', '&', $_SERVER['QUERY_STRING']);
|
||||
}
|
||||
|
||||
if ($with_amp)
|
||||
{
|
||||
$url.= strpos($url, '?')!==false ? '&' : '?';
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Triggered on "user_init", change current view depending of URL params.
|
||||
@@ -277,8 +302,11 @@ class MultiView
|
||||
$query = '
|
||||
SELECT
|
||||
'.$conf['user_fields']['id'].' AS id,
|
||||
'.$conf['user_fields']['username'].' AS username
|
||||
FROM '.USERS_TABLE.'
|
||||
'.$conf['user_fields']['username'].' AS username,
|
||||
status
|
||||
FROM '.USERS_TABLE.' AS u
|
||||
INNER JOIN '.USER_INFOS_TABLE.' AS i
|
||||
ON '.$conf['user_fields']['id'].' = user_id
|
||||
ORDER BY CONVERT('.$conf['user_fields']['username'].', CHAR)
|
||||
;';
|
||||
$out['users'] = array_from_query($query);
|
||||
|
||||
@@ -174,6 +174,50 @@ SELECT * FROM '.IMAGES_TABLE.'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add main toolbar to current page
|
||||
* @trigger loc_after_page_header
|
||||
*/
|
||||
function admintools_add_admin_controller()
|
||||
{
|
||||
global $MultiView, $conf, $template, $page, $user;
|
||||
|
||||
$url_root = get_root_url();
|
||||
$tpl_vars = array();
|
||||
|
||||
$tpl_vars['MULTIVIEW'] = $MultiView->get_data();
|
||||
$tpl_vars['DELETE_CACHE'] = isset($conf['multiview_invalidate_cache']);
|
||||
$tpl_vars['U_SELF'] = $MultiView->get_clean_admin_url(true);
|
||||
|
||||
if (($admin_lang = $MultiView->get_user_language()) !== false)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH . 'include/functions_mail.inc.php');
|
||||
switch_lang_to($admin_lang);
|
||||
}
|
||||
|
||||
$template->assign(array(
|
||||
'ADMINTOOLS_PATH' => './plugins/' . ADMINTOOLS_ID .'/',
|
||||
'ato' => $tpl_vars,
|
||||
));
|
||||
|
||||
$template->set_filename('ato_admin_controller', realpath(ADMINTOOLS_PATH . 'template/admin_controller.tpl'));
|
||||
$template->parse('ato_admin_controller');
|
||||
|
||||
if ($MultiView->is_admin() && @$admin_lang !== false)
|
||||
{
|
||||
switch_lang_back();
|
||||
}
|
||||
|
||||
$template->set_prefilter('header', 'admintools_admin_prefilter');
|
||||
}
|
||||
|
||||
function admintools_admin_prefilter($content)
|
||||
{
|
||||
$search = '<a class="icon-brush tiptip" href="{$U_CHANGE_THEME}" title="{\'Switch to clear or dark colors for administration\'|translate}">{\'Change Admin Colors\'|translate}</a>';
|
||||
$replace = '<span id="ato_container"><a class="icon-cog-alt" href="#">{\'Tools\'|translate}</a></span>';
|
||||
return str_replace($search, $replace, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable privacy level switchbox
|
||||
*/
|
||||
|
||||
@@ -38,6 +38,7 @@ if (!defined('IN_ADMIN'))
|
||||
}
|
||||
else
|
||||
{
|
||||
add_event_handler('loc_begin_page_header', 'admintools_add_admin_controller');
|
||||
add_event_handler('get_admin_plugin_menu_links', 'admintools_admin_link');
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
var AdminTools = function($) {
|
||||
var __this = this;
|
||||
|
||||
this.urlWS;
|
||||
this.urlSelf;
|
||||
this.multiView;
|
||||
|
||||
var $ato = $('#ato_container');
|
||||
|
||||
// fill multiview selects
|
||||
// data came from AJAX request or sessionStorage
|
||||
function populateMultiView() {
|
||||
var $multiview = $ato.find('.multiview');
|
||||
|
||||
if ($multiview.data('init')) return;
|
||||
|
||||
var render = function(data) {
|
||||
var html = '';
|
||||
$.each(data.users, function(i, user) {
|
||||
if (user.status == 'webmaster' || user.status == 'admin') {
|
||||
html+= '<option value="'+ user.id +'">'+ user.username +'</option>';
|
||||
}
|
||||
});
|
||||
$multiview.find('select[data-type="view_as"]').html(html)
|
||||
.val(__this.multiView.view_as);
|
||||
|
||||
html = '';
|
||||
$.each(['clear','roma'], function(i, theme) {
|
||||
html+= '<option value="'+ theme +'">'+ theme +'</option>';
|
||||
});
|
||||
$multiview.find('select[data-type="theme"]').html(html)
|
||||
.val(__this.multiView.theme);
|
||||
|
||||
html = '';
|
||||
$.each(data.languages, function(i, language) {
|
||||
html+= '<option value="'+ language.id +'">'+ language.name +'</option>';
|
||||
});
|
||||
$multiview.find('select[data-type="lang"]').html(html)
|
||||
.val(__this.multiView.lang);
|
||||
|
||||
$multiview.data('init', true);
|
||||
|
||||
$multiview.find('.switcher').show();
|
||||
};
|
||||
|
||||
if ('sessionStorage' in window && window.sessionStorage.multiView != undefined) {
|
||||
render(JSON.parse(window.sessionStorage.multiView));
|
||||
}
|
||||
else {
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: __this.urlWS + 'multiView.getData',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
render(data.result);
|
||||
if ('sessionStorage' in window) {
|
||||
window.sessionStorage.multiView = JSON.stringify(data.result);
|
||||
}
|
||||
},
|
||||
error: function(xhr, text, error) {
|
||||
alert(text + ' ' + error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// delete session cache
|
||||
this.deleteCache = function() {
|
||||
if ('sessionStorage' in window) {
|
||||
window.sessionStorage.removeItem('multiView');
|
||||
}
|
||||
};
|
||||
|
||||
// attach jquery handlers
|
||||
this.init = function(open) {
|
||||
$('.multiview').appendTo($ato);
|
||||
|
||||
/* <!-- sub menus --> */
|
||||
$ato.on({
|
||||
'click': function(e) {
|
||||
populateMultiView();
|
||||
$(this).find('ul').toggle();
|
||||
},
|
||||
'mouseleave': function(e) {
|
||||
if (e.target.tagName.toLowerCase() != "select") {
|
||||
$(this).find('ul').hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
$ato.find('>a').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
$ato.find('ul').on('mouseleave', function(e) {
|
||||
if (e.target.tagName.toLowerCase() != "select") {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
|
||||
/* <!-- select boxes --> */
|
||||
$ato.find('.switcher').on({
|
||||
'change': function() {
|
||||
if ($(this).data('type') == 'theme') {
|
||||
if ($(this).val() != __this.multiView.theme) {
|
||||
window.location.href = __this.urlSelf + 'change_theme=1';
|
||||
}
|
||||
}
|
||||
else {
|
||||
window.location.href = __this.urlSelf + 'ato_'+ $(this).data('type') +'='+ $(this).val();
|
||||
}
|
||||
},
|
||||
'click': function(e) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return this;
|
||||
}(jQuery);
|
||||
@@ -0,0 +1,39 @@
|
||||
{strip}
|
||||
{combine_css path=$ADMINTOOLS_PATH|cat:'template/admin_style.css'}
|
||||
{combine_css path=$ADMINTOOLS_PATH|cat:'template/fontello/css/fontello-ato.css'}
|
||||
{combine_script id='admintools.controller' load='footer' require='jquery' path=$ADMINTOOLS_PATH|cat:'template/admin_controller.js'}
|
||||
{/strip}
|
||||
|
||||
{footer_script require='admintools.controller'}
|
||||
AdminTools.urlWS = '{$ROOT_URL}ws.php?format=json&method=';
|
||||
AdminTools.urlSelf = '{$ato.U_SELF}';
|
||||
|
||||
AdminTools.multiView = {
|
||||
view_as: {$ato.MULTIVIEW.view_as},
|
||||
theme: '{$themeconf.name}',
|
||||
lang: '{$ato.MULTIVIEW.lang}'
|
||||
};
|
||||
|
||||
{if $ato.DELETE_CACHE}
|
||||
AdminTools.deleteCache();
|
||||
{/if}
|
||||
AdminTools.init();
|
||||
{/footer_script}
|
||||
|
||||
<ul class="multiview">
|
||||
<li><label>{'View as'|translate}</label>
|
||||
<select class="switcher" data-type="view_as"></select>
|
||||
</li>
|
||||
<li><label>{'Theme'|translate}</label>
|
||||
<select class="switcher" data-type="theme"></select>
|
||||
</li>
|
||||
<li><label>{'Language'|translate}</label>
|
||||
<select class="switcher" data-type="lang"></select>
|
||||
</li>
|
||||
<li><a class="icon-check{if !$ato.MULTIVIEW.show_queries}-empty{/if}" href="{$ato.U_SELF}ato_show_queries={(int)!$ato.MULTIVIEW.show_queries}">{'Show SQL queries'|translate}</a></li>
|
||||
<li><a class="icon-check{if !$ato.MULTIVIEW.debug_l10n}-empty{/if}" href="{$ato.U_SELF}ato_debug_l10n={(int)!$ato.MULTIVIEW.debug_l10n}">{'Debug languages'|translate}</a></li>
|
||||
<li><a class="icon-check{if !$ato.MULTIVIEW.debug_template}-empty{/if}" href="{$ato.U_SELF}ato_debug_template={(int)!$ato.MULTIVIEW.debug_template}">{'Debug template'|translate}</a></li>
|
||||
<li><a class="icon-check{if !$ato.MULTIVIEW.template_combine_files}-empty{/if}" href="{$ato.U_SELF}ato_template_combine_files={(int)!$ato.MULTIVIEW.template_combine_files}">{'Combine JS&CSS'|translate}</a></li>
|
||||
<li><a class="icon-check{if $ato.MULTIVIEW.no_history}-empty{/if}" href="{$ato.U_SELF}ato_no_history={(int)!$ato.MULTIVIEW.no_history}">{'Save visit in history'|translate}</a></li>
|
||||
<li><a class="icon-ato-null" href="{$ato.U_SELF}ato_purge_template=1">{'Purge compiled templates'|translate}</a></li>
|
||||
</ul>
|
||||
@@ -0,0 +1,67 @@
|
||||
.icon-ato-null:before { content:' '; }
|
||||
|
||||
#ato_container {
|
||||
display:inline-block;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.multiview {
|
||||
display:none;
|
||||
}
|
||||
|
||||
#ato_container>ul {
|
||||
position:absolute;
|
||||
top:27px;
|
||||
left:auto;
|
||||
right:0;
|
||||
background:#fefefe;
|
||||
padding:0;
|
||||
margin:0;
|
||||
box-shadow:3px 3px 5px rgba(0,0,0,0.5);
|
||||
}
|
||||
#ato_container>ul li {
|
||||
list-style:none;
|
||||
line-height:16px;
|
||||
font-size:13px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
#ato_container>ul li>* {
|
||||
display:inline-block;
|
||||
padding:5px 10px;
|
||||
border:none;
|
||||
text-decoration:none;
|
||||
color:#444;
|
||||
text-shadow:1px 1px 0px #eee;
|
||||
}
|
||||
#ato_container>ul li>*:before {
|
||||
font-size:16px;
|
||||
margin-right:0.5em;
|
||||
}
|
||||
#ato_container>ul li:hover {
|
||||
background:#dedede;
|
||||
}
|
||||
#ato_container>ul label {
|
||||
font-weight:bold;
|
||||
color:#777;
|
||||
display:inline-block;
|
||||
width:80px;
|
||||
padding:5px;
|
||||
text-align:right;
|
||||
font-size:11px;
|
||||
}
|
||||
#ato_container>ul select, #ato_container>ul option {
|
||||
font-size:13px;
|
||||
line-height:15px;
|
||||
color:#444;
|
||||
background:#fefefe;
|
||||
border-radius:2px;
|
||||
text-shadow:none;
|
||||
}
|
||||
#ato_container>ul select {
|
||||
border:1px solid #777;
|
||||
height:22px;
|
||||
padding:2px 3px;
|
||||
}
|
||||
#ato_container .switcher {
|
||||
display:none;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{strip}
|
||||
{combine_css path=$ADMINTOOLS_PATH|cat:'template/style.css'}
|
||||
{combine_css path=$ADMINTOOLS_PATH|cat:'template/public_style.css'}
|
||||
{combine_css path='admin/themes/default/fontello/css/fontello.css'}
|
||||
{combine_css path=$ADMINTOOLS_PATH|cat:'template/fontello/css/fontello-ato.css'}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user