From 82830bf938faa4e9c1a68784f63aed65ed89e105 Mon Sep 17 00:00:00 2001 From: Florian Bogner <f.bogner@pcsg.de> Date: Thu, 23 Feb 2017 10:53:45 +0100 Subject: [PATCH] feat: Cronservice will now display a message regarding the activation email and will allow the user to resend the activation mail. --- ajax/cronservice/resendActivation.php | 16 ++ bin/CronServiceWindow.css | 4 + bin/CronServiceWindow.js | 123 ++++++++-- bin/CronServiceWindowRegistrationSuccess.html | 14 ++ locale.xml | 213 ++++++++++-------- src/QUI/Cron/CronService.php | 22 +- 6 files changed, 266 insertions(+), 126 deletions(-) create mode 100644 ajax/cronservice/resendActivation.php create mode 100644 bin/CronServiceWindowRegistrationSuccess.html diff --git a/ajax/cronservice/resendActivation.php b/ajax/cronservice/resendActivation.php new file mode 100644 index 0000000..a816f63 --- /dev/null +++ b/ajax/cronservice/resendActivation.php @@ -0,0 +1,16 @@ +<?php + +/** + * Requests the server to resend the activationmail again + * + * @param - The email which was used for registration. + */ +QUI::$Ajax->registerFunction( + 'package_quiqqer_cron_ajax_cronservice_resendActivation', + function () { + $CronService = new \QUI\Cron\CronService(); + $CronService->resendActivationMail(); + }, + array(), + '' +); \ No newline at end of file diff --git a/bin/CronServiceWindow.css b/bin/CronServiceWindow.css index 07e20ae..e6e391b 100644 --- a/bin/CronServiceWindow.css +++ b/bin/CronServiceWindow.css @@ -80,3 +80,7 @@ float : right; } +.quiqqer-cron-cronservicewindow-registration-success-btn-confirm { + float : right; + margin : 15px 0 0 0; +} \ No newline at end of file diff --git a/bin/CronServiceWindow.js b/bin/CronServiceWindow.js index 0a10bbc..7fdd731 100644 --- a/bin/CronServiceWindow.js +++ b/bin/CronServiceWindow.js @@ -13,9 +13,10 @@ define('package/quiqqer/cron/bin/CronServiceWindow', [ 'text!package/quiqqer/cron/bin/CronServiceWindow.html', 'text!package/quiqqer/cron/bin/CronServiceWindowRegistration.html', + 'text!package/quiqqer/cron/bin/CronServiceWindowRegistrationSuccess.html', 'css!package/quiqqer/cron/bin/CronServiceWindow.css' -], function (QUI, QUIPopup, QUIButton, Mustache, QUILocale, QUIAjax, QUISheets, template, registrationTemplate) { +], function (QUI, QUIPopup, QUIButton, Mustache, QUILocale, QUIAjax, QUISheets, template, registrationTemplate, registrationSuccessTemplate) { "use strict"; var lg = 'quiqqer/cron'; @@ -101,40 +102,66 @@ define('package/quiqqer/cron/bin/CronServiceWindow', [ })); self.registered = (status['status'] != 0); + self.status = status['status']; var Buttons = Content.getElement('.quiqqer-cron-cronservicewindow-buttons'); - // get the button text : register or unregister - var btnText = QUILocale.get(lg, 'cron.window.cronservice.content.btn.register'); + + // Register/Unregister Button + if (self.status) + // Get the button text : register or unregister + { + var btnText = QUILocale.get(lg, 'cron.window.cronservice.content.btn.register'); + } if (self.registered) { btnText = QUILocale.get(lg, 'cron.window.cronservice.content.btn.unregister'); } - new QUIButton({ - text : btnText, - textimage: 'fa fa-arrow-right', - events : { - onClick: function (Button) { - if (!self.registered) { - self.showRegistration(); - return; + var Button = null; + if (self.status == 2) { + Button = new QUIButton({ + text : QUILocale.get(lg, 'cron.window.cronservice.content.btn.resend.activation.mail'), + textimage: 'fa fa-envelope-o', + events : { + onClick: function (Button) { + self.resendActivationMail(); } - Button.setAttribute('text', QUILocale.get('quiqqer/cron', 'cron.window.cronservice.content.btn.unregister.confirm')); - if (Button.getAttribute('clickcnt') == 1) { - self.unregister().then(function () { - self.refresh(); - }); + }, + styles : { + 'float': 'none', + margin : '0 auto', + width : 200 + } + }); + } else { + Button = new QUIButton({ + text : btnText, + textimage: 'fa fa-arrow-right', + events : { + onClick: function (Button) { + if (!self.registered) { + self.showRegistration(); + return; + } + Button.setAttribute('text', QUILocale.get('quiqqer/cron', 'cron.window.cronservice.content.btn.unregister.confirm')); + if (Button.getAttribute('clickcnt') == 1) { + self.unregister().then(function () { + self.refresh(); + }); + } + Button.setAttribute('clickcnt', 1); } - Button.setAttribute('clickcnt', 1); + }, + styles : { + 'float': 'none', + margin : '0 auto', + width : 200 } - }, - styles : { - 'float': 'none', - margin : '0 auto', - width : 200 - } - }).inject(Buttons); + }); + } + + Button.inject(Buttons); self.Loader.hide(); }, { @@ -172,8 +199,10 @@ define('package/quiqqer/cron/bin/CronServiceWindow', [ Content.getElement('.quiqqer-cron-cronservicewindow-btn-register').addEvent('click', function () { self.Loader.show(); self.register(Email.value).then(function () { - self.refresh(); + self.Loader.hide(); + self.showRegistrationSuccess(); Sheet.destroy(); + }).catch(function () { self.Loader.hide(); }); @@ -187,6 +216,41 @@ define('package/quiqqer/cron/bin/CronServiceWindow', [ }).inject(this.$Elm).show(); }, + showRegistrationSuccess: function () { + var self = this; + + new QUISheets({ + header : true, + icon : 'fa fa-cloud', + title : QUILocale.get(lg, 'cron.window.cronservice.title'), + buttons: false, + events : { + onOpen : function (Sheet) { + var Content = Sheet.getContent(); + + self.Loader.show(); + + Content.set('html', Mustache.render(registrationSuccessTemplate, { + cron_window_cronservice_registration_success_title : QUILocale.get(lg, 'cron.window.cronservice.registration.success.title'), + cron_window_cronservice_registration_success_text : QUILocale.get(lg, 'cron.window.cronservice.registration.success.text'), + cron_window_cronservice_content_registration_successfull_btn_confirm: QUILocale.get(lg, 'cron.window.cronservice.registration.success.btn.confirm.text') + })); + + // Click event handler + Content.getElement('.quiqqer-cron-cronservicewindow-registration-success-btn-confirm').addEvent('click', function () { + self.refresh(); + Sheet.destroy(); + }); + + self.Loader.hide(); + }, + onClose: function (Sheet) { + Sheet.destroy(); + } + } + }).inject(this.$Elm).show(); + }, + /** * Register a email to the cron service * @@ -215,6 +279,15 @@ define('package/quiqqer/cron/bin/CronServiceWindow', [ onError : reject }); }); + }, + + resendActivationMail: function () { + return new Promise(function (resolve, reject) { + QUIAjax.get('package_quiqqer_cron_ajax_cronservice_resendActivation', resolve, { + 'package': lg, + onError : reject + }); + }); } }); }); diff --git a/bin/CronServiceWindowRegistrationSuccess.html b/bin/CronServiceWindowRegistrationSuccess.html new file mode 100644 index 0000000..ac51651 --- /dev/null +++ b/bin/CronServiceWindowRegistrationSuccess.html @@ -0,0 +1,14 @@ +<div class="quiqqer-cron-cronservicewindow-registration"> + <h1 class="quiqqer-cron-cronservicewindow-registration-title"> + {{cron_window_cronservice_registration_success_title}} + </h1> + + <div> + {{{cron_window_cronservice_registration_success_text}}} + </div> + + <div class="quiqqer-cron-cronservicewindow-registration-success-btn-confirm qui-button"> + <span class="fa fa-check"></span> + <span>{{cron_window_cronservice_content_registration_successfull_btn_confirm}}</span> + </div> +</div> \ No newline at end of file diff --git a/locale.xml b/locale.xml index 7834c57..f53f3b6 100644 --- a/locale.xml +++ b/locale.xml @@ -164,107 +164,7 @@ <de><![CDATA[Aufgabenverlauf]]></de> <en><![CDATA[Cron history]]></en> </locale> - <locale name="cron.panel.manager.btn.cronservice.register"> - <de><![CDATA[Cronservice]]></de> - <en><![CDATA[Cronservice]]></en> - </locale> - <locale name="cron.window.cronservice.title"> - <de><![CDATA[Cronservice]]></de> - <en><![CDATA[Cronservice]]></en> - </locale> - <locale name="cron.window.cronservice.btn.cancel"> - <de><![CDATA[Abbrechen]]></de> - <en><![CDATA[Cancel]]></en> - </locale> - <locale name="cron.window.cronservice.btn.register"> - <de><![CDATA[Registrieren]]></de> - <en><![CDATA[Register]]></en> - </locale> - <locale name="cron.window.cronservice.content.title"> - <de><![CDATA[Cronservice]]></de> - <en><![CDATA[Cronservice]]></en> - </locale> - <locale name="cron.window.cronservice.content.about.title"> - <de><![CDATA[Was ist das?]]></de> - <en><![CDATA[About]]></en> - </locale> - <locale name="cron.window.cronservice.content.about.text"> - <de><![CDATA[Der QUIQQER Cronservice ermöglicht es Crons auf Systemen auszuführen, die nativ keine Crons ausführen können. -Realisiert wird dies durch einen Server, an dem sich QUIQQER-SYteme anmelden können, welcher wiederrum regelmäßig die Crons der angemeldeten Systeme anstoßt. -Dies kann vorallem auf Shared-Hostings von großem Nutzen sein.]]></de> - <en><![CDATA[The QUIQQER cronservice enables systems withou native cronfunctionality to execute the QUIQQER crons anyway. -This is works with an external server on which QUIQQER systems can register themselves. This server will start the scheduled crons of all registered QUIQQER systems regularely. -]]></en> - </locale> - <locale name="cron.window.cronservice.content.status.title"> - <de><![CDATA[Status]]></de> - <en><![CDATA[State]]></en> - </locale> - <locale name="cron.window.cronservice.content.status.text"> - <de><![CDATA[Hier können Sie den Status Ihrer Registrierung verfolgen :]]></de> - <en><![CDATA[You can check the state of your registration here :]]></en> - </locale> - <locale name="cron.window.cronservice.content.btn.register"> - <de><![CDATA[Registrieren]]></de> - <en><![CDATA[Register]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.title"> - <de><![CDATA[Registrieren]]></de> - <en><![CDATA[Register]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.placeholder.email"> - <de><![CDATA[Email]]></de> - <en><![CDATA[Email]]></en> - </locale> - <locale name="cron.window.cronservice.registration.title"> - <de><![CDATA[Registration]]></de> - <en><![CDATA[Registration]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.txt.email.title"> - <de><![CDATA[Email]]></de> - <en><![CDATA[Email]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.btn.register"> - <de><![CDATA[Registrieren]]></de> - <en><![CDATA[Register]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.btn.unregister"> - <de><![CDATA[Abmelden]]></de> - <en><![CDATA[Unregister]]></en> - </locale> - <locale name="cron.window.cronservice.status.text.inactive"> - <de><![CDATA[Inaktiv]]></de> - <en><![CDATA[Inactive]]></en> - </locale> - <locale name="cron.window.cronservice.status.text.registered"> - <de><![CDATA[Aktiv]]></de> - <en><![CDATA[Active]]></en> - </locale> - <locale name="cron.window.cronservice.status.text.unregistered"> - <de><![CDATA[Nicht registriert]]></de> - <en><![CDATA[Not registered]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.lbl.stats.status"> - <de><![CDATA[Status: ]]></de> - <en><![CDATA[Status: ]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.lbl.stats.errors"> - <de><![CDATA[Fehlerzahl: ]]></de> - <en><![CDATA[Errorcount: ]]></en> - </locale> - <locale name="cron.window.cronservice.content.register.lbl.stats.lastExecution"> - <de><![CDATA[Letzte Ausführung: ]]></de> - <en><![CDATA[Last execution: ]]></en> - </locale> - <locale name="cron.window.cronservice.content.btn.unregister.confirm"> - <de><![CDATA[Sind Sie sicher?]]></de> - <en><![CDATA[Are you sure?]]></en> - </locale> - <locale name="cron.window.cronservice.content.btn.unregister"> - <de><![CDATA[Registrierung entfernen]]></de> - <en><![CDATA[Unregister]]></en> - </locale> <locale name="permission.quiqqer.cron._header"> <de><![CDATA[Aufgaben / Tasks]]></de> @@ -427,5 +327,118 @@ This is works with an external server on which QUIQQER systems can register them <de><![CDATA[Intervall]]></de> <en><![CDATA[Interval]]></en> </locale> + + <!-- Cronservice --> + <locale name="cron.panel.manager.btn.cronservice.register"> + <de><![CDATA[Cronservice]]></de> + <en><![CDATA[Cronservice]]></en> + </locale> + + <locale name="cron.window.cronservice.title"> + <de><![CDATA[Cronservice]]></de> + <en><![CDATA[Cronservice]]></en> + </locale> + <locale name="cron.window.cronservice.btn.cancel"> + <de><![CDATA[Abbrechen]]></de> + <en><![CDATA[Cancel]]></en> + </locale> + <locale name="cron.window.cronservice.btn.register"> + <de><![CDATA[Registrieren]]></de> + <en><![CDATA[Register]]></en> + </locale> + <locale name="cron.window.cronservice.content.title"> + <de><![CDATA[Cronservice]]></de> + <en><![CDATA[Cronservice]]></en> + </locale> + <locale name="cron.window.cronservice.content.about.title"> + <de><![CDATA[Was ist das?]]></de> + <en><![CDATA[About]]></en> + </locale> + <locale name="cron.window.cronservice.content.about.text"> + <de><![CDATA[Der QUIQQER Cronservice ermöglicht es Crons auf Systemen auszuführen, die nativ keine Crons ausführen können. +Realisiert wird dies durch einen Server, an dem sich QUIQQER-SYteme anmelden können, welcher wiederrum regelmäßig die Crons der angemeldeten Systeme anstoßt. +Dies kann vorallem auf Shared-Hostings von großem Nutzen sein.]]></de> + <en><![CDATA[The QUIQQER cronservice enables systems withou native cronfunctionality to execute the QUIQQER crons anyway. +This is works with an external server on which QUIQQER systems can register themselves. This server will start the scheduled crons of all registered QUIQQER systems regularely. +]]></en> + </locale> + <locale name="cron.window.cronservice.content.status.title"> + <de><![CDATA[Status]]></de> + <en><![CDATA[State]]></en> + </locale> + <locale name="cron.window.cronservice.content.status.text"> + <de><![CDATA[Hier können Sie den Status Ihrer Registrierung verfolgen :]]></de> + <en><![CDATA[You can check the state of your registration here :]]></en> + </locale> + <locale name="cron.window.cronservice.content.btn.register"> + <de><![CDATA[Registrieren]]></de> + <en><![CDATA[Register]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.title"> + <de><![CDATA[Registrieren]]></de> + <en><![CDATA[Register]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.placeholder.email"> + <de><![CDATA[Email]]></de> + <en><![CDATA[Email]]></en> + </locale> + <locale name="cron.window.cronservice.registration.title"> + <de><![CDATA[Registration]]></de> + <en><![CDATA[Registration]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.txt.email.title"> + <de><![CDATA[Email]]></de> + <en><![CDATA[Email]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.btn.register"> + <de><![CDATA[Registrieren]]></de> + <en><![CDATA[Register]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.btn.unregister"> + <de><![CDATA[Abmelden]]></de> + <en><![CDATA[Unregister]]></en> + </locale> + <locale name="cron.window.cronservice.status.text.inactive"> + <de><![CDATA[Inaktiv]]></de> + <en><![CDATA[Inactive]]></en> + </locale> + <locale name="cron.window.cronservice.status.text.registered"> + <de><![CDATA[Aktiv]]></de> + <en><![CDATA[Active]]></en> + </locale> + <locale name="cron.window.cronservice.status.text.unregistered"> + <de><![CDATA[Nicht registriert]]></de> + <en><![CDATA[Not registered]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.lbl.stats.status"> + <de><![CDATA[Status: ]]></de> + <en><![CDATA[Status: ]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.lbl.stats.errors"> + <de><![CDATA[Fehlerzahl: ]]></de> + <en><![CDATA[Errorcount: ]]></en> + </locale> + <locale name="cron.window.cronservice.content.register.lbl.stats.lastExecution"> + <de><![CDATA[Letzte Ausführung: ]]></de> + <en><![CDATA[Last execution: ]]></en> + </locale> + <locale name="cron.window.cronservice.content.btn.unregister.confirm"> + <de><![CDATA[Sind Sie sicher?]]></de> + <en><![CDATA[Are you sure?]]></en> + </locale> + <locale name="cron.window.cronservice.content.btn.unregister"> + <de><![CDATA[Registrierung entfernen]]></de> + <en><![CDATA[Unregister]]></en> + </locale> + <locale name="cron.window.cronservice.registration.success.title"> + <de><![CDATA[Registrierung erfolgreich]]></de> + <en><![CDATA[Registration successfull]]></en> + </locale> + <locale name="cron.window.cronservice.registration.success.text" html="true"> + <de> + <![CDATA[Die Registrierung war erfolgreich! <br /> Bitte überprüfen Sie nun das angegebene Email Postfach und bestätigen Sie die Registrierung. <br /> Bitte bedenken Sie, dass die Email im Spamordner gelandet sein könnte.]]></de> + <en> + <![CDATA[The registration was successfull. Please check your email inbox and confirm the registration. <br /> Bear in mind that the email could have been marked as spam.]]></en> + </locale> </groups> </locales> \ No newline at end of file diff --git a/src/QUI/Cron/CronService.php b/src/QUI/Cron/CronService.php index 1d3c0ae..578d7cb 100644 --- a/src/QUI/Cron/CronService.php +++ b/src/QUI/Cron/CronService.php @@ -25,7 +25,7 @@ class CronService $url_dir = QUI::$Conf->get("globals", "url_dir"); // VHost Domain - $vhost = QUI::getProjectManager()->getStandard()->getVHost(true, true); + $vhost = QUI::getProjectManager()->getStandard()->getVHost(true, true); // Check if https should be used. if (substr($vhost, 0, 8) == 'https://') { @@ -106,6 +106,26 @@ class CronService )); } + /** + * Requests the cronservice to resend the activation email + * @throws Exception + */ + public function resendActivationMail() + { + + if (!isset($this->domain) || empty($this->domain)) { + throw new Exception("Could not get the instances domain."); + } + + $this->makeServerAjaxCall( + "package_pcsg_cronservice_ajax_resendActivationMail", + array( + "domain" => $this->domain + ) + ); + } + + /** * Sends an ajax request to the cronservice server. * -- GitLab