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