diff --git a/js/other/jquery.confirm.min.js b/js/other/jquery.confirm.min.js new file mode 100644 index 00000000..d86c13ed --- /dev/null +++ b/js/other/jquery.confirm.min.js @@ -0,0 +1,14 @@ +/*! + * jquery.confirm + * + * @version 2.3.1 + * + * @author My C-Labs + * @author Matthieu Napoli + * @author Russel Vela + * @author Marcus Schwarz + * + * @license MIT + * @url https://myclabs.github.io/jquery.confirm/ + */ +(function(a){a.fn.confirm=function(b){if(typeof b==="undefined"){b={}}this.click(function(c){c.preventDefault();var d=a.extend({button:a(this)},b);a.confirm(d,c)});return this};a.confirm=function(k,g){if(typeof k=="undefined"){console.error("No options given.");return}if(a(".confirmation-modal").length>0){return}var j={};if(k.button){var c={title:"title",text:"text","confirm-button":"confirmButton","submit-form":"submitForm","cancel-button":"cancelButton","confirm-button-class":"confirmButtonClass","cancel-button-class":"cancelButtonClass","dialog-class":"dialogClass","modal-options-backdrop":"modalOptionsBackdrop","modal-options-keyboard":"modalOptionsKeyboard"};a.each(c,function(e,l){var m=k.button.data(e);if(typeof m!="undefined"){j[l]=m}})}var d=a.extend({},a.confirm.options,{confirm:function(){if(j.submitForm||(typeof j.submitForm=="undefined"&&k.submitForm)||(typeof j.submitForm=="undefined"&&typeof k.submitForm=="undefined"&&a.confirm.options.submitForm)){g.target.closest("form").submit()}else{var e=g&&(("string"===typeof g&&g)||(g.currentTarget&&g.currentTarget.attributes.href.value));if(e){if(k.post){var l=a('
');a("body").append(l);l.submit()}else{window.location=e}}}},cancel:function(e){},button:null},k,j);var b="";if(d.title!==""){b='"}var h="";if(d.cancelButton){h='"}var f='";var i=a(f);if(typeof d.modalOptionsBackdrop!="undefined"||typeof d.modalOptionsKeyboard!="undefined"){i.modal({backdrop:d.modalOptionsBackdrop,keyboard:d.modalOptionsKeyboard})}i.on("shown.bs.modal",function(){i.find(".btn-primary:first").focus()});i.on("hidden.bs.modal",function(){i.remove()});i.find(".confirm").click(function(){d.confirm(d.button)});i.find(".cancel").click(function(){d.cancel(d.button)});a("body").append(i);i.modal("show")};a.confirm.options={text:"Are you sure?",title:"",confirmButton:"Yes",cancelButton:"Cancel",post:false,submitForm:false,confirmButtonClass:"btn-primary",cancelButtonClass:"btn-default",dialogClass:"modal-dialog",modalOptionsBackdrop:true,modalOptionsKeyboard:true}})(jQuery); diff --git a/js/pihole/settings.js b/js/pihole/settings.js index 5160e9b3..e6d77945 100644 --- a/js/pihole/settings.js +++ b/js/pihole/settings.js @@ -1,3 +1,20 @@ $(function () { $("[data-mask]").inputmask(); }); + +$(".confirm-reboot").confirm({ + text: "Are you sure you want to send a reboot command to your Pi-Hole?", + title: "Confirmation required", + confirm: function(button) { + $.post( "php/savesettings.php", { "field": "reboot" } ); + }, + cancel: function(button) { + // nothing to do + }, + confirmButton: "Yes, reboot", + cancelButton: "No, go back", + post: true, + confirmButtonClass: "btn-danger", + cancelButtonClass: "btn-success", + dialogClass: "modal-dialog modal-lg" // Bootstrap classes for large modal +}); diff --git a/php/savesettings.php b/php/savesettings.php index 44da521d..12d2f4c1 100644 --- a/php/savesettings.php +++ b/php/savesettings.php @@ -165,6 +165,10 @@ function validDomain($domain_name) exec('sudo pihole -a -c'); } + case "reboot": + exec("sudo pihole -a reboot"); + break; + default: break; diff --git a/settings.php b/settings.php index be51c66d..0c172087 100644 --- a/settings.php +++ b/settings.php @@ -281,7 +281,7 @@

System Administration

- +
@@ -294,5 +294,6 @@ ?> +