fixes #1240 use a modern and customizable confirmation popins

* plugins: install, restore, deactivate all, uninstall, delete
* themes: delete
* languages: delete
* maintenance: lock gallery, purge history detail, purge history summary, purge search history and delete all sizes butto
* rates: delete user rates
* sites: remove a site
* updates: update all extensions
* users: delete

batch manager now confirms deletion of derivative like deletion of photos (no more alert popin)

theme manager: box styling like plugins, delete is in dropdown, with icon for activate and delete
This commit is contained in:
Louis
2020-10-15 17:40:58 +02:00
committed by plegall
parent 1be34f33a4
commit eacad2a4b8
16 changed files with 479 additions and 135 deletions

View File

@@ -229,10 +229,10 @@ function selectGenerateDerivNone() {
}
function selectDelDerivAll() {
$("#action_delete_derivatives input[type=checkbox]").prop("checked", true).trigger("change");
$('#action_delete_derivatives input[name="del_derivatives_type[]"]').prop("checked", true).trigger("change");
}
function selectDelDerivNone() {
$("#action_delete_derivatives input[type=checkbox]").prop("checked", false).trigger("change");
$('#action_delete_derivatives input[name="del_derivatives_type[]"]').prop("checked", false).trigger("change");
}
/* sync metadatas or delete photos by blocks, with progress bar */

View File

@@ -263,7 +263,6 @@ const jConfirm_confirm_options = {
draggable: false,
titleClass: "jconfirmDeleteConfirm",
theme: "modern",
content: "",
animation: "zoom",
boxWidth: '40%',
useBootstrap: false,
@@ -271,4 +270,48 @@ const jConfirm_confirm_options = {
animateFromElement: false,
backgroundDismiss: true,
typeAnimated: false,
}
const jConfirm_confirm_with_content_options = {
draggable: false,
theme: "modern",
animation: "zoom",
boxWidth: '40%',
useBootstrap: false,
type: 'red',
animateFromElement: false,
backgroundDismiss: true,
typeAnimated: false,
}
jQuery.fn.pwg_jconfirm_follow_href = function({
alert_title = "TITLE",
alert_confirm = "CONFIRM",
alert_cancel = "CANCEL",
alert_content = ""
} = {}) {
let button_href = $(this).attr('href');
const options = alert_content === "" ? jConfirm_confirm_options : jConfirm_confirm_with_content_options
$(this).click(function() {
$.confirm({
content: alert_content,
title: alert_title,
buttons: {
confirm: {
text: alert_confirm,
btnClass: 'btn-red',
action: function () {
window.location.href = button_href;
}
},
cancel: {
text: alert_cancel
}
},
...options
});
return (false);
});
}

View File

@@ -230,14 +230,23 @@ $(document).ready(function() {
return false;
});
jQuery("#action_delete_derivatives input[name=confirm_deletion]").change(function() {
jQuery("#action_delete_derivatives span.errors").hide();
});
jQuery('#applyAction').click(function() {
var action = jQuery('[name="selectAction"]').val();
if (action == 'delete_derivatives') {
var d_count = $('#action_delete_derivatives input[type=checkbox]').filter(':checked').length
, e_count = $('input[name="setSelected"]').is(':checked') ? nb_thumbs_set : $('.thumbnails input[type=checkbox]').filter(':checked').length;
if (d_count*e_count > 500)
return confirm(lang.AreYouSure);
}
let d_count = $('#action_delete_derivatives input[type=checkbox]').filter(':checked').length
let e_count = $('input[name="setSelected"]').is(':checked') ? nb_thumbs_set : $('.thumbnails input[type=checkbox]').filter(':checked').length;
if (!jQuery("#action_delete_derivatives input[name=confirm_deletion]").is(':checked')) {
jQuery("#action_delete_derivatives span.errors").show();
return false;
} else {
return true;
}
}
if (action != 'generate_derivatives'
|| derivatives.finished() )
@@ -324,6 +333,10 @@ var sliders = {
{/footer_script}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{combine_css path="admin/themes/default/fontello/css/animation.css"}
<div id="batchManagerGlobal">
<h2>{'Batch Manager'|@translate}</h2>
@@ -737,6 +750,11 @@ UL.thumbnails SPAN.wrap2 {ldelim}
<!-- delete derivatives -->
<div id="action_delete_derivatives" class="bulkAction">
<label class="font-checkbox" style="margin-bottom:15px">
<span class="icon-check"></span>
<input type="checkbox" name="confirm_deletion" value="1"> {'Are you sure?'|@translate}
</label>
<span class="errors" style="display:none">{"You need to confirm deletion"|translate}</span>
<div class="deleteDerivButtons">
<a href="javascript:selectDelDerivAll()">{'All'|@translate}</a>
<a href="javascript:selectDelDerivNone()">{'None'|@translate}</a>

View File

@@ -1,6 +1,21 @@
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
const title_msg = '{'Are you sure you want to restore to default settings?'|@translate|@escape}';
const confirm_msg = '{'Yes, I am sure'|@translate|@escape}';
const cancel_msg = '{'No, I have changed my mind'|@translate|@escape}';
$(".restore-settings-button").each(function() {
$(this).pwg_jconfirm_follow_href({
alert_title: title_msg,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
(function(){
var labelMaxWidth = "{'Maximum width'|translate}",
labelWidth = "{'Width'|translate}",
@@ -50,7 +65,7 @@
jQuery(this).css("visibility", "hidden");
return false;
});
}());
})();
{/footer_script}
{html_style}
@@ -201,7 +216,7 @@
{if isset($ferrors.resize_quality)}<span class="dErrorDesc" title="{$ferrors.resize_quality}">!</span>{/if}
</p>
<p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails">
<a href="{$F_ACTION}&action=restore_settings" onclick="return confirm('{'Are you sure?'|translate|@escape:javascript}');">{'Reset to default values'|translate}</a>
<a href="{$F_ACTION}&action=restore_settings" class="restore-settings-button">{'Reset to default values'|translate}</a>
</p>
{if !empty($custom_derivatives)}

View File

@@ -1,3 +1,20 @@
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
$(".delete-lang-button").each(function() {
let title_msg = '{'Are you sure you want to delete the language "%s"?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = '{"No, I have changed my mind"|@translate|@escape:'javascript'}';
let lang_name = $(this).closest(".languageBox").find('.languageName').html();
$(this).pwg_jconfirm_follow_href({
alert_title: title_msg.replace("%s", lang_name),
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
{/footer_script}
<div class="titrePage">
<h2>{'Installed Languages'|@translate}</h2>
</div>
@@ -34,7 +51,7 @@
{if $language_state == 'inactive'}
<a href="{$language.u_action}&amp;action=activate" class="tiptip" title="{'Make this language available to users'|@translate}">{'Activate'|@translate}</a>
| <a href="{$language.u_action}&amp;action=delete" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');" class="tiptip" title="{'Delete this language'|@translate}">{'Delete'|@translate}</a>
| <a href="{$language.u_action}&amp;action=delete" class="tiptip delete-lang-button" title="{'Delete this language'|@translate}">{'Delete'|@translate}</a>
{/if}
</div>
</div> <!-- languageActions -->

View File

@@ -1,10 +1,61 @@
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
$(".lock-gallery-button").each(function() {
const gallery_tip = '{"A locked gallery is only visible to administrators"|@translate|@escape:'javascript'}';
let title = '{"Are you sure you want to lock the gallery?"|@translate}';
let confirm_msg_gallery = '{"Yes, I want to lock the gallery"|@translate}';
let cancel_msg_gallery = '{"Keep it unlocked"|@translate}';
$(this).pwg_jconfirm_follow_href({
alert_title: title,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg,
alert_content: gallery_tip
});
});
$(".purge-history-detail-button").each(function() {
const title = '{"Purge history detail"|@translate|@escape:'javascript'}';
$(this).pwg_jconfirm_follow_href({
alert_title: title,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
$(".purge-history-summary-button").each(function() {
const title = '{"Purge history summary"|@translate|@escape:'javascript'}';
$(this).pwg_jconfirm_follow_href({
alert_title: title,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
$(".purge-search-history-button").each(function() {
const title = '{"Purge search history"|@translate|@escape:'javascript'}';
$(this).pwg_jconfirm_follow_href({
alert_title: title,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
$(".delete-all-sizes-button").each(function() {
const title = '{"Are you sure you want to delete all sizes?"|@translate|@escape:'javascript'}';
$(this).pwg_jconfirm_follow_href({
alert_title: title,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
{/footer_script}
<div class="titrePage">
<h2>{'Maintenance'|@translate}</h2>
</div>
<ul>
{if (isset($U_MAINT_LOCK_GALLERY))}
<li><a href="{$U_MAINT_LOCK_GALLERY}" onclick="return confirm('{'A locked gallery is only visible to administrators'|@translate|@escape:'javascript'}');">{'Lock gallery'|@translate}</a></li>
<li><a href="{$U_MAINT_LOCK_GALLERY}" class="lock-gallery-button">{'Lock gallery'|@translate}</a></li>
{else}
<li><a href="{$U_MAINT_UNLOCK_GALLERY}">{'Unlock gallery'|@translate}</a></li>
{/if}
@@ -29,14 +80,15 @@
<ul>
<li><a href="{$U_MAINT_USER_CACHE}">{'Purge user cache'|@translate}</a></li>
<li><a href="{$U_MAINT_ORPHAN_TAGS}">{'Delete orphan tags'|@translate}</a></li>
<li><a href="{$U_MAINT_HISTORY_DETAIL}" onclick="return confirm('{'Purge history detail'|@translate|@escape:'javascript'}');">{'Purge history detail'|@translate}</a></li>
<li><a href="{$U_MAINT_HISTORY_SUMMARY}" onclick="return confirm('{'Purge history summary'|@translate|@escape:'javascript'}');">{'Purge history summary'|@translate}</a></li>
<li><a href="{$U_MAINT_HISTORY_DETAIL}" class="purge-history-detail-button">{'Purge history detail'|@translate}</a></li>
<li><a href="{$U_MAINT_HISTORY_SUMMARY}" class="purge-history-summary-button">{'Purge history summary'|@translate}</a></li>
<li><a href="{$U_MAINT_SESSIONS}">{'Purge sessions'|@translate}</a></li>
<li><a href="{$U_MAINT_FEEDS}">{'Purge never used notification feeds'|@translate}</a></li>
<li><a href="{$U_MAINT_SEARCH}"onclick="return confirm('{'Purge search history'|@translate|@escape:'javascript'}');">{'Purge search history'|@translate}</a></li>
<li><a href="{$U_MAINT_SEARCH}" class="purge-search-history-button">{'Purge search history'|@translate}</a></li>
<li><a href="{$U_MAINT_COMPILED_TEMPLATES}">{'Purge compiled templates'|@translate}</a></li>
<li>{'Delete multiple size images'|@translate}:
{foreach from=$purge_derivatives key=name item=url name=loop}{if !$smarty.foreach.loop.first}, {/if}<a href="{$url}"{if $smarty.foreach.loop.first} onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');"{/if}>{$name}</a>{/foreach}
{foreach from=$purge_derivatives key=name item=url name=loop}
<a href="{$url}"{if $smarty.foreach.loop.first} class="delete-all-sizes-button"{/if}>{$name}</a>{if !$smarty.foreach.loop.last}, {/if}{/foreach}
</li>
</ul>

View File

@@ -5,6 +5,7 @@
/* incompatible message */
var incompatible_msg = '{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'javascript'}';
var activate_msg = '\n{'Do you want to activate anyway?'|@translate|@escape:'javascript'}';
var deactivate_all_msg = '{'Deactivate all'|@translate}';
var showInactivePlugins = function() {
jQuery(".showInactivePlugins").fadeOut(complete=function(){
@@ -13,8 +14,13 @@ var showInactivePlugins = function() {
}
/* group action */
var pwg_token = '{$PWG_TOKEN}';
var confirmMsg = '{'Are you sure?'|@translate|@escape:'javascript'}';
const pwg_token = '{$PWG_TOKEN}';
const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
let delete_plugin_msg = '{'Are you sure you want to delete the plugin "%s"?'|@translate|@escape:'javascript'}';
let restore_plugin_msg = '{'Are you sure you want to restore the plugin "%s"?'|@translate|@escape:'javascript'}';
const restore_tip_msg = "{'Restore default configuration. You will lose your plugin settings!'|@translate}";
{literal}
var queuedManager = jQuery.manageAjax.create('queued', {
queue: true,
@@ -22,18 +28,56 @@ var queuedManager = jQuery.manageAjax.create('queued', {
});
var nb_plugins = jQuery('div.active').size();
var done = 0;
/* group action */
jQuery(document).ready(function() {
/* group action */
jQuery('div.deactivate_all a').click(function() {
if (confirm(confirmMsg)) {
jQuery('div.active').each(function() {
performPluginDeactivate(jQuery(this).attr('id'));
});
}
$(".delete-plugin-button").each(function() {
let plugin_name = $(this).closest(".pluginContent").find(".pluginMiniBoxNameCell").html().trim();
$(this).pwg_jconfirm_follow_href({
alert_title: delete_plugin_msg.replace('%s', plugin_name),
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
$(".plugin-restore").each(function() {
let plugin_name = $(this).closest(".pluginContent").find(".pluginMiniBoxNameCell").html().trim();
$(this).pwg_jconfirm_follow_href({
alert_title: restore_plugin_msg.replace('%s', plugin_name),
alert_confirm: confirm_msg,
alert_cancel: cancel_msg,
alert_content: restore_tip_msg,
});
});
$(".uninstall-plugin-button").each(function() {
$(this).pwg_jconfirm_follow_href({
alert_title: are_you_sure_msg,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
jQuery('div.deactivate_all a').click(function() {
$.confirm({
title: deactivate_all_msg,
buttons: {
confirm: {
text: confirm_msg,
btnClass: 'btn-red',
action: function () {
jQuery('div.active').each(function() {
performPluginDeactivate(jQuery(this).attr('id'));
})
}
},
cancel: {
text: cancel_msg
}
},
...jConfirm_confirm_options
});
});
function performPluginDeactivate(id) {
queuedManager.add({
queuedManager.add({
type: 'GET',
dataType: 'json',
url: 'ws.php',
@@ -63,7 +107,13 @@ jQuery(document).ready(function() {
{/if}
{literal}
jQuery('#'+data[i]).addClass('incompatible');
jQuery('#'+data[i]+' .activate').attr('onClick', 'return confirm(incompatible_msg + activate_msg);');
jQuery('#'+data[i]+' .activate').each(function () {
$(this).pwg_jconfirm_follow_href({
alert_title: incompatible_msg + activate_msg,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
}
jQuery('.warning').tipTip({
'delay' : 0,
@@ -74,13 +124,6 @@ jQuery(document).ready(function() {
}
});
});
/* TipTips */
jQuery('.plugin-restore').tipTip({
'delay' : 0,
'fadeIn' : 200,
'fadeOut' : 200
});
jQuery('.showInfo').tipTip({
'delay' : 0,
'fadeIn' : 200,
@@ -179,6 +222,10 @@ jQuery(".pluginMiniBox").each(function(index){
{/literal}
{/footer_script}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{combine_script id='tiptip' load='header' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
<div class="titrePage">
<h2>{'Plugins'|@translate}</h2>
</div>
@@ -248,18 +295,18 @@ jQuery(".pluginMiniBox").each(function(index){
<div id="{$plugin.ID}" class="pluginMiniBox {$plugin.STATE}">
<div class="pluginContent">
<div class="PluginOptionsIcons">
<a class="icon-info-circled-1 showInfo" title="{if !empty($author)}{'By %s'|@translate:$author} | {/if}{'Version'|@translate} {$version}"></a>
{if $plugin.STATE == 'active' || $plugin.STATE == 'inactive'}
<a class="icon-ellipsis-vert showOptions" ></a>
{/if}
</div>
<div class="PluginOptionsBlock dropdown">
<div class="dropdown-option-content"> {if !empty($author)}{'By %s'|@translate:$author}<br>{/if}{'Version'|@translate} {$version}</div>
{if $plugin.STATE == 'active'}
<a class="dropdown-option icon-cancel-circled" href="{$plugin.U_ACTION}&amp;action=deactivate">{'Deactivate'|@translate}</a>
<a class="dropdown-option icon-back-in-time" href="{$plugin.U_ACTION}&amp;action=restore" class="plugin-restore" title="{'Restore default configuration. You will lose your plugin settings!'|@translate}" onclick="return confirm(confirmMsg);">{'Restore'|@translate}</a>
<a class="dropdown-option icon-back-in-time plugin-restore" href="{$plugin.U_ACTION}&amp;action=restore">{'Restore'|@translate}</a>
{elseif $plugin.STATE == 'inactive'}
<a class="dropdown-option icon-trash" href="{$plugin.U_ACTION}&amp;action=delete" onclick="return confirm(confirmMsg);">{'Delete'|@translate}</a>
<a class="dropdown-option icon-trash delete-plugin-button" href="{$plugin.U_ACTION}&amp;action=delete">{'Delete'|@translate}</a>
{/if}
</div>
<div class="pluginMiniBoxNameCell">
@@ -278,7 +325,7 @@ jQuery(".pluginMiniBox").each(function(index){
{elseif $plugin.STATE == 'inactive'}
<a class="pluginActionLevel1 icon-plus" href="{$plugin.U_ACTION}&amp;action=activate" class="activate">{'Activate'|@translate}</a>
{elseif $plugin.STATE == 'missing'}
<a class="pluginActionLevel3" href="{$plugin.U_ACTION}&amp;action=uninstall" onclick="return confirm(confirmMsg);">{'Uninstall'|@translate}</a>
<a class="pluginActionLevel3 uninstall-plugin-button" href="{$plugin.U_ACTION}&amp;action=uninstall">{'Uninstall'|@translate}</a>
{elseif $plugin.STATE == 'merged'}
<a class="pluginActionLevel3" href="{$plugin.U_ACTION}&amp;action=delete">{'Delete'|@translate}</a>
{/if}

View File

@@ -1,6 +1,15 @@
{combine_script id='jquery.sort' load='footer' path='themes/default/js/plugins/jquery.sort.js'}
{footer_script require='jquery.ui.effect-blind,jquery.sort'}{literal}
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script require='jquery.ui.effect-blind,jquery.sort'}
const install_title = '{'Are you sure you want to install this plugin?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
let title = '{'Are you sure you want to install the plugin "%s"?'|@translate|@escape:'javascript'}';
{literal}
var sortOrder = 'date';
var sortPlugins = (function(a, b) {
if (sortOrder == 'downloads' || sortOrder == 'revision' || sortOrder == 'date')
@@ -33,20 +42,27 @@ jQuery(document).ready(function(){
});
jQuery('#filter').keyup(function(){
var filter = $(this).val();
if (filter.length>2) {
$('.pluginBox').hide();
$('#availablePlugins .pluginBox input[name="name"]').each(function(){
if ($(this).val().toUpperCase().indexOf(filter.toUpperCase()) != -1) {
$(this).parents('div').show();
}
var filter = $(this).val();
if (filter.length>2) {
$('.pluginBox').hide();
$('#availablePlugins .pluginBox input[name="name"]').each(function(){
if ($(this).val().toUpperCase().indexOf(filter.toUpperCase()) != -1) {
$(this).parents('div').show();
}
});
} else {
$('.pluginBox').show();
}
jQuery("#filter").focus();
});
$(".install-plugin-button").each(function() {
let plugin_name = $(this).closest(".pluginBox").find("input[name=\"name\"]").val();
$(this).pwg_jconfirm_follow_href({
alert_title: title.replace("%s", plugin_name),
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
}
else {
$('.pluginBox').show();
}
});
jQuery("#filter").focus();
});
});
{/literal}{/footer_script}
@@ -88,7 +104,7 @@ jQuery(document).ready(function(){
</tr>
<tr>
<td>
<a href="{$plugin.URL_INSTALL}" onclick="return confirm('{'Are you sure you want to install this plugin?'|@translate|@escape:javascript}');">{'Install'|@translate}</a>
<a href="{$plugin.URL_INSTALL}" class="install-plugin-button">{'Install'|@translate}</a>
| <a href="{$plugin.URL_DOWNLOAD}">{'Download'|@translate}</a>
</td>
<td>

View File

@@ -67,7 +67,9 @@ body .ui-tooltip {
<input type="hidden" name="page" value="rating_user">
</fieldset>
</form>
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
{combine_script id='jquery.geoip' load='async' path='admin/themes/default/js/jquery.geoip.js'}
{footer_script}
@@ -126,29 +128,43 @@ function uidFromCell(cell){
$(document).ready( function(){
$("#rateTable").on( "click", ".del", function(e) {
e.preventDefault();
if (!confirm('{'Are you sure?'|@translate|@escape:'javascript'}'))
return;
var cell = e.target.parentNode,
tr = cell;
while ( tr.nodeName != "TR") tr = tr.parentNode;
tr = jQuery(tr).fadeTo(1000, 0.4);
var data=uidFromCell(cell);
(new PwgWS('{$ROOT_URL|@escape:javascript}')).callService(
'pwg.rates.delete', { user_id:data.uid, anonymous_id:data.aid},
{
method: 'POST',
onFailure: function(num, text) { tr.stop(); tr.fadeTo(0,1); alert(num + " " + text); },
onSuccess: function(result){
if (result)
oTable.row(tr[0]).remove().draw();
else
alert(result);
const title_msg = '{'Are you sure you want to delete the ratings of the user "%s"?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
let usr_name = $(this).closest("tr").find(".usr").html();
$.confirm({
title: title_msg.replace("%s", usr_name),
buttons: {
confirm: {
text: confirm_msg,
btnClass: 'btn-red',
action: function () {
var cell = e.target.parentNode,
tr = cell;
while ( tr.nodeName != "TR") tr = tr.parentNode;
tr = jQuery(tr).fadeTo(1000, 0.4);
var data=uidFromCell(cell);
(new PwgWS('{$ROOT_URL|@escape:javascript}')).callService(
'pwg.rates.delete', { user_id:data.uid, anonymous_id:data.aid},
{
method: 'POST',
onFailure: function(num, text) { tr.stop(); tr.fadeTo(0,1); alert(num + " " + text); },
onSuccess: function(result){
if (result)
oTable.row(tr[0]).remove().draw();
else
alert(result);
}
}
);
}
},
cancel: {
text: cancel_msg
}
}
);
},
...jConfirm_confirm_options
});
});
});

View File

@@ -6,8 +6,21 @@ jQuery(document).ready(function(){
});
});
{/literal}{/footer_script}
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
const title_msg = '{'Are you sure you want to delete this site?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
$(".delete-site-button").each(function() {
$(this).pwg_jconfirm_follow_href({
alert_title: title_msg,
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
{/footer_script}
<div class="titrePage">
<h2>{'Site manager'|@translate}</h2>
</div>
@@ -34,8 +47,7 @@ jQuery(document).ready(function(){
</td><td>
[<a href="{$site.U_SYNCHRONIZE}" title="{'update the database from files'|@translate}">{'Synchronize'|@translate}</a>]
{if isset($site.U_DELETE)}
[<a href="{$site.U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|escape:'javascript'}');"
title="{'delete this site and all its attached elements'|@translate}">{'delete'|@translate}</a>]
[<a class="delete-site-button" href="{$site.U_DELETE}" title="{'delete this site and all its attached elements'|@translate}">{'delete'|@translate}</a>]
{/if}
{if not empty($site.plugin_links)}
<br>

View File

@@ -1,5 +1,23 @@
{include file='include/colorbox.inc.tpl'}
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
const title_msg = '{'Are you sure you want to delete this theme?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
$(".delete-theme-button").each(function() {
let theme_name = $(this).closest(".themeBox").find(".themeName").attr("title");
let title = '{'Are you sure you want to delete the theme "%s"?'|@translate|@escape:'javascript'}';
$(this).pwg_jconfirm_follow_href({
alert_title: title.replace("%s", theme_name),
alert_confirm: confirm_msg,
alert_cancel: cancel_msg
});
});
{/footer_script}
{footer_script}{literal}
jQuery(document).ready(function() {
$("a.preview-box").colorbox();
@@ -100,6 +118,11 @@ $(window).bind("load", function() {
<div class="showInfo-dropdown-content">
{$theme.DESC|@escape:'html'}
</div>
{if $theme.DELETABLE}
<a class="dropdown-option icon-trash delete-plugin-button delete-theme-button" href="{$delete_baseurl}{$theme.ID}">{'Delete'|@translate}</a>
{else}
<span class="dropdown-option icon-trash delete-plugin-button"title="{$theme.DELETE_TOOLTIP}">{'Delete'|@translate}</span>
{/if}
{if $theme.DEACTIVABLE}
<a href="{$deactivate_baseurl}{$theme.ID}" class="showInfo-dropdown-action tiptip icon-cancel-circled" title="{'Forbid this theme to users'|@translate}">{'Deactivate'|@translate}</a>
{/if}
@@ -116,14 +139,9 @@ $(window).bind("load", function() {
{/if}
{else}
{if $theme.ACTIVABLE}
<a href="{$activate_baseurl}{$theme.ID}" title="{'Make this theme available to users'|@translate}" class="tiptip">{'Activate'|@translate}</a>
<a href="{$activate_baseurl}{$theme.ID}" title="{'Make this theme available to users'|@translate}" class="icon-plus tiptip">{'Activate'|@translate}</a>
{else}
<span title="{$theme.ACTIVABLE_TOOLTIP}" class="tiptip">{'Activate'|@translate}</span>
{/if}
{if $theme.DELETABLE}
<a href="{$delete_baseurl}{$theme.ID}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'Delete'|@translate}</a>
{else}
<span title="{$theme.DELETE_TOOLTIP}">{'Delete'|@translate}</span>
<span title="{$theme.ACTIVABLE_TOOLTIP}" class="icon-plus tiptip">{'Activate'|@translate}</span>
{/if}
{/if}
</div> <!-- themeActions -->

View File

@@ -21,12 +21,10 @@ var queuedManager = $.manageAjax.create('queued', {
});
function updateAll() {
if (confirm(confirmMsg)) {
jQuery('.updateExtension').each( function() {
if (jQuery(this).parents('div').css('display') == 'block')
jQuery(this).click();
});
}
jQuery('.updateExtension').each( function() {
if (jQuery(this).parents('div').css('display') == 'block')
jQuery(this).click();
});
};
function ignoreAll() {
@@ -129,8 +127,9 @@ function autoupdate_bar_toggle(i) {
jQuery(document).ready(function() {
jQuery("td[id^='desc_'], p[id^='revdesc_']").click(function() {
id = this.id.split('_');
jQuery("#revdesc_"+id[1]).toggle('blind');
jQuery("#revdesc_"+id[1]).toggle();
jQuery(".button_"+id[1]).toggle();
jQuery("#revdesc_"+id[1]).closest('tr').toggle();
return false;
});
});
@@ -138,13 +137,41 @@ jQuery(document).ready(function() {
checkFieldsets();
{/literal}
{/footer_script}
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}';
const confirm_msg = '{"Yes, I am sure"|@translate}';
const cancel_msg = "{"No, I have changed my mind"|@translate}";
$("#update_all").click(function() {
const title_msg = "{'Are you sure you want to update all extensions?'|@translate}";
$.confirm({
title: title_msg,
buttons: {
confirm: {
text: confirm_msg,
btnClass: 'btn-red',
action: function () {
updateAll();
}
},
cancel: {
text: cancel_msg
}
},
...jConfirm_confirm_options
});
})
{/footer_script}
<div class="titrePage">
<h2>{'Updates'|@translate}</h2>
</div>
<div class="autoupdate_bar">
<input type="submit" id="update_all" value="{'Update All'|@translate}" onClick="updateAll(); return false;">
<input type="submit" id="update_all" value="{'Update All'|@translate}">
<input type="submit" id="ignore_all" value="{'Ignore All'|@translate}" onClick="ignoreAll(); return false;">
<input type="submit" id="reset_ignore" value="{'Reset ignored updates'|@translate}" onClick="resetIgnored(); return false;" {if !$SHOW_RESET}style="display:none;"{/if}>
</div>
@@ -183,7 +210,7 @@ checkFieldsets();
| {'By %s'|@translate:$plugin.AUTHOR}
</td>
</tr>
<tr>
<tr style="display:none;">
<td></td>
<td class="pluginDesc">
<p id="revdesc_{$plugin.ID}" style="display:none;">{$plugin.REV_DESC|@htmlspecialchars|@nl2br}</p>
@@ -213,7 +240,7 @@ checkFieldsets();
| <a href="#" onClick="ignoreExtension('themes', '{$theme.EXT_ID}'); return false;" class="ignoreExtension">{'Ignore this update'|@translate}</a>
</td>
</tr>
<tr>
<tr style="display:none;">
<td>
{'Version'|@translate} {$theme.CURRENT_VERSION}
</td>
@@ -267,7 +294,7 @@ checkFieldsets();
| {'By %s'|@translate:$language.AUTHOR}
</td>
</tr>
<tr>
<tr style="display:none;">
<td></td>
<td class="pluginDesc">
<p id="revdesc_{$language.ID}" style="display:none;">{$language.REV_DESC|@htmlspecialchars|@nl2br}</p>

View File

@@ -12,6 +12,9 @@
{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
{footer_script}
var selectedMessage_pattern = "{'%d of %d users selected'|translate|escape:javascript}";
var selectedMessage_none = "{'No user selected of %d users'|translate|escape:javascript}";
@@ -22,6 +25,7 @@ var registeredOn_pattern = "{'Registered on %s, %s.'|translate|escape:javascript
var lastVisit_pattern = "{'Last visit on %s, %s.'|translate|escape:javascript}";
var missingConfirm = "{'You need to confirm deletion'|translate|escape:javascript}";
var missingUsername = "{'Please, enter a login'|translate|escape:javascript}";
let title_msg = '{'Are you sure you want to delete the user "%s"?'|@translate|escape:'javascript'}';
var allUsers = [{$all_users}];
var selection = [];
@@ -31,6 +35,11 @@ var protectedUsers = [{$protected_users}];
var passwordProtectedUsers = [{$password_protected_users}];
var guestUser = {$guest_user};
const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}';
const confirm_msg = '{'Yes, I am sure'|@translate|@escape}';
const cancel_msg = '{'No, I have changed my mind'|@translate|@escape}';
var truefalse = {
'true':"{'Yes'|translate}",
'false':"{'No'|translate}",
@@ -479,36 +488,44 @@ jQuery(document).on('click', '.close-user-details', function(e) {
});
/* delete user */
jQuery(document).on('click', '.userDelete a', function() {
if (!confirm("{/literal}{'Are you sure?'|translate|escape:javascript}{literal}")) {
return false;
}
$(document).on('click', '.userDelete a', function () {
var userId = jQuery(this).data('user_id');
var username = jQuery('#user'+userId+' .username').html();
jQuery.ajax({
url: "ws.php?format=json&method=pwg.users.delete",
type:"POST",
data: {
user_id:userId,
pwg_token:pwg_token
$.confirm({
title: title_msg.replace('%s', username),
buttons: {
confirm: {
text: confirm_msg,
btnClass: 'btn-red',
action: function () {
jQuery.ajax({
url: "ws.php?format=json&method=pwg.users.delete",
type:"POST",
data: {
user_id:userId,
pwg_token:pwg_token
},
beforeSend: function() {
jQuery('#user'+userId+' .userDelete .loading').show();
},
success:function(data) {
jQuery('.user_form_popin').colorbox.close();
jQuery('#showAddUser .infos').html('&#x2714; User '+username+' deleted').show();
},
error:function(XMLHttpRequest, textStatus, errorThrows) {
jQuery('#user'+userId+' .userDelete .loading').hide();
}
})
}
},
cancel: {
text: cancel_msg
}
},
beforeSend: function() {
jQuery('#user'+userId+' .userDelete .loading').show();
},
success:function(data) {
jQuery('.user_form_popin').colorbox.close();
jQuery('#showAddUser .infos').html('&#x2714; User '+username+' deleted').show();
},
error:function(XMLHttpRequest, textStatus, errorThrows) {
jQuery('#user'+userId+' .userDelete .loading').hide();
}
...jConfirm_confirm_options
});
return false;
});
jQuery(document).on('click', '.userProperties input[type=submit]', function() {
var userId = jQuery(this).data('user_id');

View File

@@ -637,6 +637,19 @@ LI.menuLi {
cursor: pointer;
}
.dropdown-option-content {
white-space: nowrap;
display: block;
text-align: initial;
padding: 5px 10px;
padding-right: 10px;
font-size: 13px;
padding-right: 15px;
color: white;
font-weight: 600;
cursor: pointer;
}
.dropdown-option:hover {
text-decoration: none;
color: white;
@@ -1964,9 +1977,9 @@ h2:lang(en) { text-transform:capitalize; }
border-bottom-right-radius:5px;
margin-left: 0;
box-shadow: 0px 0px 5px #acacac;
}
.pluginContent {
}
.pluginMiniBox a:hover { color: white ;}
.pluginContent {
width: 100%;
text-align: left;
background-color: #fafafa;
@@ -3874,6 +3887,9 @@ input:checked + .slider:before {
font-size: 20px !important;
}
.jconfirm-title {
line-height: 1.5em;
}
.jconfirm-buttons .btn {
text-transform: none !important;

View File

@@ -1055,4 +1055,20 @@ $lang['Tag Manager'] = 'Tag Manager';
$lang['No tag found'] = 'No tag found';
$lang['Manage album photos'] = 'Manage album photos';
$lang['Manage sub-albums'] = 'Manage sub-albums';
$lang['Delete album'] = 'Delete album';
$lang['Delete album'] = 'Delete album';
$lang['Are you sure you want to delete this site?'] = 'Are you sure you want to delete this site?';
$lang['Yes, I am sure'] = 'Yes, I am sure';
$lang['Are you sure you want to delete this theme?'] = 'Are you sure you want to delete this theme?';
$lang['Are you sure you want to restore this plugin?'] = 'Are you sure you want to restore this plugin?';
$lang['Are you sure you want to delete this?'] = 'Are you sure you want to delete this?';
$lang['Are you sure you want to restore to default settings?'] = 'Are you sure you want to restore to default settings?';
$lang['Are you sure you want to delete the ratings of the user "%s"?'] = 'Are you sure you want to delete the ratings of the user "%s"?';
$lang['Are you sure you want to install the plugin "%s"?'] = 'Are you sure you want to install the plugin "%s"?';
$lang['Are you sure you want to delete the plugin "%s"?'] = 'Are you sure you want to delete the plugin "%s"?';
$lang['Are you sure you want to restore the plugin "%s"?'] = 'Are you sure you want to restore the plugin "%s"?';
$lang['Are you sure you want to delete all sizes?'] = 'Are you sure you want to delete all sizes?';
$lang['Are you sure you want to lock the gallery?'] = 'Are you sure you want to lock the gallery?';
$lang['Are you sure you want to delete the language "%s"?'] = 'Are you sure you want to delete the language "%s"?';
$lang['Are you sure you want to delete the theme "%s"?'] = 'Are you sure you want to delete the theme "%s"?';
$lang['Are you sure you want to update all extensions?'] = 'Are you sure you want to update all extensions?';
$lang['Are you sure you want to delete the user "%s"?'] = 'Are you sure you want to delete the user "%s"?';

View File

@@ -458,9 +458,9 @@ $lang['Plugin list'] = "Liste des plugins";
$lang['Check for updates'] = "Rechercher les mises à jour";
$lang['Other plugins'] = "Autres plugins disponibles";
$lang['Last revisions'] = "Dernières révisions";
$lang['Are you sure you want to delete this plugin?'] = "Etes-vous sûr de vouloir supprimer ce plugin?";
$lang['Are you sure you want to install this plugin?'] = "Etes-vous sûr de vouloir installer ce plugin?";
$lang['Are you sure to install this upgrade? You must verify if this version does not need uninstallation.'] = "Etes-vous sur de vouloir installer cette mise à jour? Vous devez vérifiez que cette mise à jour ne nécessite pas de désinstallation préalable.";
$lang['Are you sure you want to delete this plugin?'] = "Êtes-vous sûr de vouloir supprimer ce plugin?";
$lang['Are you sure you want to install this plugin?'] = "Êtes-vous sûr de vouloir installer ce plugin?";
$lang['Are you sure to install this upgrade? You must verify if this version does not need uninstallation.'] = "Êtes-vous sur de vouloir installer cette mise à jour? Vous devez vérifiez que cette mise à jour ne nécessite pas de désinstallation préalable.";
$lang['Plugin has been successfully copied'] = "Le plugin a été copié avec succès.";
$lang['Can\'t create temporary file.'] = "Impossible de créer un fichier temporaire.";
$lang['Can\'t download archive.'] = "Impossible de télécharger l'archive.";
@@ -701,7 +701,7 @@ $lang['THIS PLUGIN IS NOW PART OF PIWIGO CORE! DELETE IT NOW.'] = 'CE PLUGIN FAI
$lang['ERROR: THIS PLUGIN IS MISSING BUT IT IS INSTALLED! UNINSTALL IT NOW.'] = 'ERREUR: CE PLUGIN EST MANQUANT MAIS TOUJOURS INSTALLÉ! DÉSINSTALLEZ-LE.';
$lang['display'] = 'Afficher';
$lang['Restore'] = "Restaurer";
$lang['Restore default configuration. You will lose your plugin settings!'] = "Restaurer la configuration par défaut? Vous perdrez vos réglages personnels !";
$lang['Restore default configuration. You will lose your plugin settings!'] = "Restaurer la configuration par défaut ? Vous perdrez vos réglages personnels&nbsp!";
$lang['Thumbnails generation in progress...'] = 'Génération des miniatures en cours...';
$lang['Photos generation in progress...'] = 'Génération des photos en cours...';
$lang['%s photos have been regenerated'] = '%s photos ont été régénérées';
@@ -1021,8 +1021,6 @@ $lang['in gallery'] = 'dans la galerie';
$lang['in administration'] = 'dans l\'administration';
$lang['Displays a banner to install or open the official Piwigo app'] = 'Affiche une bannière pour installer et/ou ouvrir l\'application mobile officielle Piwigo';
$lang['Search albums'] = 'Rechercher des albums';
$lang['You have %d orphan tags %s'] = 'Vous avez %d tag(s) orphelin(s) %s';
$lang['Review'] = 'Examiner';
$lang['You have %s1 orphan : %s2'] = 'Vous avez %s1 orphelin(s) : %s2';
@@ -1059,4 +1057,20 @@ $lang['Tag Manager'] = 'Gestionnaire de tags';
$lang['No tag found'] = 'Pas de tag trouvé';
$lang['Manage album photos'] = 'Gérer les photos de l\'album';
$lang['Manage sub-albums'] = 'Gérer les sous-albums';
$lang['Delete album'] = 'Supprimer l\'album';
$lang['Delete album'] = 'Supprimer l\'album';
$lang['Are you sure you want to delete this site?'] = 'Êtes-vous sûr de supprimer ce site&nbsp?';
$lang['Yes, I am sure'] = 'Oui, je suis sûr';
$lang['Are you sure you want to delete this theme?'] = 'Êtes-vous sûr de supprimer ce thème&nbsp?';
$lang['Are you sure you want to restore this plugin?'] = 'Êtes-vous sûr de restaurer ce plugin&nbsp?';
$lang['Are you sure you want to delete this?'] = 'Êtes-vous sûr de supprimer cela&nbsp?';
$lang['Are you sure you want to restore to default settings?'] = 'Êtes-vous sûr de vouloir rétablir les valeurs par défaut&nbsp?';
$lang['Are you sure you want to delete the ratings of the user "%s"?'] = 'Êtes-vous sûr de vouloir supprimer les notations de l\'utilisateur "%s"&nbsp?';
$lang['Are you sure you want to install the plugin "%s"?'] = 'Êtes-vous sûr de vouloir installer le plugin "%s"&nbsp?';
$lang['Are you sure you want to delete the plugin "%s"?'] = 'Êtes-vous sûr de vouloir supprimer le plugin "%s"&nbsp?';
$lang['Are you sure you want to restore the plugin "%s"?'] = 'Êtes-vous sûr de vouloir restaurer le plugin "%s"&nbsp?';
$lang['Are you sure you want to delete all sizes?'] = 'Êtes-vous sûr de vouloir supprimer toutes les tailles&nbsp?';
$lang['Are you sure you want to lock the gallery?'] = 'Êtes-vous sûr de vouloir verrouiller la galerie&nbsp?';
$lang['Are you sure you want to delete the language "%s"?'] = 'Êtes-vous sûr de vouloir supprimer la langue "%s"&nbsp?';
$lang['Are you sure you want to delete the theme "%s"?'] = 'Êtes-vous sûr de vouloir supprimer le thème "%s"&nbsp?';
$lang['Are you sure you want to update all extensions?'] = 'Êtes-vous sûr de vouloir mettre à jour toutes les extensions&nbsp?';
$lang['Are you sure you want to delete the user "%s"?'] = 'Êtes-vous sûr de vouloir supprimer l\'utilisateur "%s"&nbsp?';