From 6436c8ab0e6754d54e048666035b810d3b21e6b5 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Wed, 21 Mar 2018 15:10:34 +0100
Subject: [PATCH] FIX #240 & #242 check crontab value for notifications
 scheduler

---
 ...otifications-administration.component.html |  6 +-
 ...ons-schedule-administration.component.html | 20 -----
 .../administration-routing.module.ts          |  2 -
 .../administration/administration.module.ts   |  2 -
 .../notifications-administration.component.ts | 40 +++++-----
 ...tions-schedule-administration.component.ts | 75 -------------------
 .../js/angular/lang/lang-fr.ts                |  2 +-
 .../NotificationScheduleController.php        | 12 +--
 .../NotificationScheduleModelAbstract.php     | 27 ++++---
 9 files changed, 43 insertions(+), 143 deletions(-)
 delete mode 100644 apps/maarch_entreprise/Views/notifications-schedule-administration.component.html
 delete mode 100644 apps/maarch_entreprise/js/angular/app/administration/notifications-schedule-administration.component.ts

diff --git a/apps/maarch_entreprise/Views/notifications-administration.component.html b/apps/maarch_entreprise/Views/notifications-administration.component.html
index 53859764778..e296b43adbb 100644
--- a/apps/maarch_entreprise/Views/notifications-administration.component.html
+++ b/apps/maarch_entreprise/Views/notifications-administration.component.html
@@ -79,9 +79,6 @@
         </mat-sidenav-content>
         <mat-sidenav #snav2 [mode]="mobileQuery.matches ? 'over' : 'side'" [fixedInViewport]="mobileQuery.matches" fixedTopGap="56"
             position='end' [opened]="mobileQuery.matches ? false : false">
-            <div class="alert alert-info" role="alert" style="margin:15px;">
-                {{lang.NotificationScheduleInfo}}
-            </div>
             <mat-list>
                 <h3 mat-subheader>{{lang.notificationSchedule}}</h3>
                 <form class="form-horizontal" #notifForm="ngForm" style="overflow:hidden;">
@@ -149,6 +146,9 @@
                 </form>
             </mat-list>
             <mat-divider></mat-divider>
+            <div class="alert alert-info" role="alert" style="margin:15px;">
+                {{lang.NotificationScheduleInfo}}
+            </div>
             <mat-list>
                 <h3 mat-subheader>{{lang.activeCron}}</h3>
                 <mat-chip-list #chipList class="mat-chip-list-stacked">
diff --git a/apps/maarch_entreprise/Views/notifications-schedule-administration.component.html b/apps/maarch_entreprise/Views/notifications-schedule-administration.component.html
deleted file mode 100644
index b9c3f901a58..00000000000
--- a/apps/maarch_entreprise/Views/notifications-schedule-administration.component.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div class="page-header">
-    <h1>{{lang.notificationsSchedule}}
-    </h1>
-</div>
-<div *ngIf="loading">
-    <mat-spinner style="margin:auto;"></mat-spinner>
-</div>
-
-<div *ngIf="!loading" class="container-fluid">
-    <div class="col-md-12">
-        <div class="example-container">
-            {{lang.NotificationScheduleInfo}}
-
-            <div *ngFor="let crontabLine of crontab">
-                {{crontabLine}}
-            </div>
-            {{authorizedNotification}}
-        </div>
-    </div>
-</div>
diff --git a/apps/maarch_entreprise/js/angular/app/administration/administration-routing.module.ts b/apps/maarch_entreprise/js/angular/app/administration/administration-routing.module.ts
index b3d28aba005..ec8ce2c4284 100644
--- a/apps/maarch_entreprise/js/angular/app/administration/administration-routing.module.ts
+++ b/apps/maarch_entreprise/js/angular/app/administration/administration-routing.module.ts
@@ -23,7 +23,6 @@ import { PriorityAdministrationComponent }              from './priority-adminis
 import { ReportsAdministrationComponent }               from './reports-administration.component';
 import { NotificationsAdministrationComponent }         from './notifications-administration.component';
 import { NotificationAdministrationComponent }          from './notification-administration.component';
-import { NotificationsScheduleAdministrationComponent } from './notifications-schedule-administration.component';
 import { HistoryAdministrationComponent }               from './history-administration.component';
 import { BatchHistoryAdministrationComponent }          from './batchHistory-administration.component';
 import { UpdateStatusAdministrationComponent }          from './update-status-administration.component';
@@ -62,7 +61,6 @@ import { UpdateStatusAdministrationComponent }          from './update-status-ad
             { path: 'administration/actions/:id', component: ActionAdministrationComponent },
             { path: 'administration/notifications', component: NotificationsAdministrationComponent },
             { path: 'administration/notifications/new', component: NotificationAdministrationComponent },
-            { path: 'administration/notifications/schedule', component: NotificationsScheduleAdministrationComponent },
             { path: 'administration/notifications/:identifier', component: NotificationAdministrationComponent },
             { path: 'administration/history', component: HistoryAdministrationComponent },
             { path: 'administration/historyBatch', component: BatchHistoryAdministrationComponent },
diff --git a/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts b/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts
index ee9fc0af4a8..5a2bd8f8931 100644
--- a/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts
+++ b/apps/maarch_entreprise/js/angular/app/administration/administration.module.ts
@@ -32,7 +32,6 @@ import { HistoryAdministrationComponent }               from './history-administ
 import { BatchHistoryAdministrationComponent }          from './batchHistory-administration.component';
 import { UpdateStatusAdministrationComponent }          from './update-status-administration.component';
 import { NotificationsAdministrationComponent }         from './notifications-administration.component';
-import { NotificationsScheduleAdministrationComponent } from './notifications-schedule-administration.component';
 import { NotificationAdministrationComponent }          from './notification-administration.component';
 
 @NgModule({
@@ -69,7 +68,6 @@ import { NotificationAdministrationComponent }          from './notification-adm
         BatchHistoryAdministrationComponent,
         UpdateStatusAdministrationComponent,
         NotificationsAdministrationComponent,
-        NotificationsScheduleAdministrationComponent,
         NotificationAdministrationComponent,
         UsersAdministrationRedirectModalComponent,
         EntitiesAdministrationRedirectModalComponent,
diff --git a/apps/maarch_entreprise/js/angular/app/administration/notifications-administration.component.ts b/apps/maarch_entreprise/js/angular/app/administration/notifications-administration.component.ts
index b4996220ef0..dea6b863433 100644
--- a/apps/maarch_entreprise/js/angular/app/administration/notifications-administration.component.ts
+++ b/apps/maarch_entreprise/js/angular/app/administration/notifications-administration.component.ts
@@ -113,31 +113,31 @@ export class NotificationsAdministrationComponent implements OnInit {
 
         this.months = [
             {label:this.lang.eachMonth,value:'*'},
-            {label:this.lang.january,value:"0"},
-            {label:this.lang.february,value:"1"},
-            {label:this.lang.march,value:"2"},
-            {label:this.lang.april,value:"3"},
-            {label:this.lang.may,value:"4"},
-            {label:this.lang.june,value:"5"},
-            {label:this.lang.july,value:"6"},
-            {label:this.lang.august,value:"7"},
-            {label:this.lang.september,value:"8"},
-            {label:this.lang.october,value:"9"},
-            {label:this.lang.november,value:"10"},
-            {label:this.lang.december,value:"11"}
+            {label:this.lang.january,value:"1"},
+            {label:this.lang.february,value:"2"},
+            {label:this.lang.march,value:"3"},
+            {label:this.lang.april,value:"4"},
+            {label:this.lang.may,value:"5"},
+            {label:this.lang.june,value:"6"},
+            {label:this.lang.july,value:"7"},
+            {label:this.lang.august,value:"8"},
+            {label:this.lang.september,value:"9"},
+            {label:this.lang.october,value:"10"},
+            {label:this.lang.november,value:"11"},
+            {label:this.lang.december,value:"12"}
         ]
 
         this.dom = [{label:this.lang.notUsed,value:'*'}];
 
         this.dow = [
             {label:this.lang.eachDay,value:'*'},
-            {label:this.lang.monday,value:"0"},
-            {label:this.lang.thuesday,value:"1"},
-            {label:this.lang.wednesday,value:"2"},
-            {label:this.lang.thursday,value:"3"},
-            {label:this.lang.friday,value:"4"},
-            {label:this.lang.saturday,value:"5"},
-            {label:this.lang.sunday,value:"6"}
+            {label:this.lang.monday,value:"1"},
+            {label:this.lang.thuesday,value:"2"},
+            {label:this.lang.wednesday,value:"3"},
+            {label:this.lang.thursday,value:"4"},
+            {label:this.lang.friday,value:"5"},
+            {label:this.lang.saturday,value:"6"},
+            {label:this.lang.sunday,value:"7"}
         ];
 
         this.newCron = {
@@ -157,7 +157,7 @@ export class NotificationsAdministrationComponent implements OnInit {
             this.minutes.push({label:i,value:String(i)});
         }
 
-        for (var i = 0; i <= 31; i++) {
+        for (var i = 1; i <= 31; i++) {
             this.dom.push({label:i,value:String(i)});
         }
 
diff --git a/apps/maarch_entreprise/js/angular/app/administration/notifications-schedule-administration.component.ts b/apps/maarch_entreprise/js/angular/app/administration/notifications-schedule-administration.component.ts
deleted file mode 100644
index b11c9ef68b5..00000000000
--- a/apps/maarch_entreprise/js/angular/app/administration/notifications-schedule-administration.component.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { ChangeDetectorRef, Component, ViewChild, OnInit } from '@angular/core';
-import { MediaMatcher } from '@angular/cdk/layout';
-import { HttpClient } from '@angular/common/http';
-import { Router, ActivatedRoute } from '@angular/router';
-import { LANG } from '../translate.component';
-import { NotificationService } from '../notification.service';
-// import { MatPaginator, MatTableDataSource, MatSort, MatDialog, MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material';
-
-
-declare function $j(selector: any): any;
-
-declare var angularGlobals: any;
-
-
-@Component({
-    templateUrl: "../../../../Views/notifications-schedule-administration.component.html",
-    providers: [NotificationService]
-})
-export class NotificationsScheduleAdministrationComponent implements OnInit {
-    mobileQuery: MediaQueryList;
-    private _mobileQueryListener: () => void;
-    coreUrl: string;
-
-    crontab: any[] = [];
-    authorizedNotification: any[] = [];
-    loading: boolean = false;
-    lang: any = LANG;
-
-    constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher, public http: HttpClient, private router: Router, private notify: NotificationService) {
-        $j("link[href='merged_css.php']").remove();
-        this.mobileQuery = media.matchMedia('(max-width: 768px)');
-        this._mobileQueryListener = () => changeDetectorRef.detectChanges();
-        this.mobileQuery.addListener(this._mobileQueryListener);
-    }
-
-    ngOnDestroy(): void {
-        this.mobileQuery.removeListener(this._mobileQueryListener);
-    }
-
-    ngOnInit(): void {
-        this.updateBreadcrumb(angularGlobals.applicationName);
-
-        this.coreUrl = angularGlobals.coreUrl;
-        this.loading = true;
-
-        this.http.get(this.coreUrl + 'rest/notifications/schedule')
-            .subscribe((data: any) => {
-                this.crontab = data.crontab;
-                this.authorizedNotification = data.authorizedNotification;
-                this.loading = false;
-            }, (err) => {
-                this.notify.error(err.error.errors);
-            });
-    }
-
-    updateBreadcrumb(applicationName: string) {
-        if ($j('#ariane')[0]) {
-            $j('#ariane')[0].innerHTML = "<a href='index.php?reinit=true'>" + applicationName +
-                "</a> > <a onclick='location.hash = \"/administration\"' style='cursor: pointer'>" + this.lang.administration +
-                "</a> > <a onclick='location.hash = \"/administration/notifications\"' style='cursor: pointer'>" + this.lang.notifications +
-                "</a> > " + this.lang.notificationsSchedule;
-        }
-    }
-
-    onSubmit() {
-        this.http.post(this.coreUrl + 'rest/notifications/schedule', this.crontab)
-            .subscribe((data: any) => {
-                this.router.navigate(['/administration/notifications']);
-                this.notify.success(this.lang.NotificationScheduleUpdated);
-            }, (err) => {
-                this.notify.error(err.error.errors);
-            });
-    }
-
-}
diff --git a/apps/maarch_entreprise/js/angular/lang/lang-fr.ts b/apps/maarch_entreprise/js/angular/lang/lang-fr.ts
index e70fbb47706..213a889ea36 100755
--- a/apps/maarch_entreprise/js/angular/lang/lang-fr.ts
+++ b/apps/maarch_entreprise/js/angular/lang/lang-fr.ts
@@ -222,7 +222,7 @@ export const LANG_FR = {
     "notificationModification"     : "Modification de la notification",  
     "notifications"                : "Notification(s)",
     "notificationSchedule"         : "Planifier les notifications",
-    "NotificationScheduleInfo"     : "Pour Rappel,\n\nformat de la crontab : [minute]  [heure]  [jour dans le mois]  [mois]  [jour de la semaine]",
+    "NotificationScheduleInfo"     : "Pour rappel,\n\nformat de la crontab : [minute]  [heure]  [jour dans le mois]  [mois]  [jour de la semaine]",
     "notificationScheduleUpdated"  : "Tâche(s) planifié(s) mise à jour",
     "notificationsSchedule"        : "Planification des notifications",
     "NotificationToEnable"         : "Activer",
diff --git a/src/app/notification/controllers/NotificationScheduleController.php b/src/app/notification/controllers/NotificationScheduleController.php
index 0b94394f989..48fe00bdce4 100644
--- a/src/app/notification/controllers/NotificationScheduleController.php
+++ b/src/app/notification/controllers/NotificationScheduleController.php
@@ -32,7 +32,7 @@ class NotificationScheduleController
         }
 
         return $response->withJson([
-            'crontab' => NotificationScheduleModel::getCrontab(),
+            'crontab'                => NotificationScheduleModel::getCrontab(),
             'authorizedNotification' => self::getAuthorizedNotifications(),
         ]);
     }
@@ -49,7 +49,7 @@ class NotificationScheduleController
             return $response->withStatus(500)->withJson(['errors' => 'Problem with crontab']);
         }
 
-        foreach ($data as $id => $cronValue) {
+        foreach ($data as $cronValue) {
             foreach ($cronValue as $key => $value) {
                 if (($key == 'cmd' || $key == 'state') && !Validator::notEmpty()->validate($value)) {
                     $errors[] = $key.' is empty';
@@ -101,10 +101,10 @@ class NotificationScheduleController
 
     protected static function checkCrontab($crontabToSave)
     {
-        $customId = CoreConfigModel::getCustomId();
+        $customId          = CoreConfigModel::getCustomId();
         $crontabBeforeSave = NotificationScheduleModel::getCrontab();
-        $corePath = str_replace('custom/'.$customId.'/src/app/notification/controllers', '', __DIR__);
-        $corePath = str_replace('src/app/notification/controllers', '', $corePath);
+        $corePath          = str_replace('custom/'.$customId.'/src/app/notification/controllers', '', __DIR__);
+        $corePath          = str_replace('src/app/notification/controllers', '', $corePath);
         foreach ($crontabToSave as $id => $cronValue) {
             if ($cronValue['state'] != 'hidden' && $crontabBeforeSave[$id]['state'] == 'hidden') {
                 $returnValue = false;
@@ -154,7 +154,7 @@ class NotificationScheduleController
         }
 
         $notification_sid = $data['notification_sid'];
-        $notification_id = $data['notification_id'];
+        $notification_id  = $data['notification_id'];
 
         NotificationScheduleModel::createScriptNotification(['notification_sid' => $notification_sid, 'notification_id' => $notification_id]);
 
diff --git a/src/app/notification/models/NotificationScheduleModelAbstract.php b/src/app/notification/models/NotificationScheduleModelAbstract.php
index f875e730a08..a047e1bca0a 100644
--- a/src/app/notification/models/NotificationScheduleModelAbstract.php
+++ b/src/app/notification/models/NotificationScheduleModelAbstract.php
@@ -50,10 +50,10 @@ class NotificationScheduleModelAbstract
 
         HistoryController::add([
             'tableName' => 'notifications',
-            'recordId' => $GLOBALS['userId'],
+            'recordId'  => $GLOBALS['userId'],
             'eventType' => 'UP',
-            'eventId' => 'notificationadd',
-            'info' => _NOTIFICATION_SCHEDULE_UPDATED,
+            'eventId'   => 'notificationadd',
+            'info'      => _NOTIFICATION_SCHEDULE_UPDATED,
         ]);
 
         return true;
@@ -104,14 +104,14 @@ class NotificationScheduleModelAbstract
             $filename = explode('/', $cmd);
 
             $data[] = array(
-                'm' => $m,
-                'h' => $h,
-                'dom' => $dom,
-                'mon' => $mon,
-                'dow' => $dow,
-                'cmd' => $cmd,
+                'm'           => $m,
+                'h'           => $h,
+                'dom'         => $dom,
+                'mon'         => $mon,
+                'dow'         => $dow,
+                'cmd'         => $cmd,
                 'description' => end($filename),
-                'state' => $state,
+                'state'       => $state,
             );
         }
 
@@ -123,7 +123,6 @@ class NotificationScheduleModelAbstract
         ValidatorModel::notEmpty($aArgs, ['notification_sid', 'notification_id']);
         ValidatorModel::intVal($aArgs, ['notification_sid']);
 
-        $notification_sid = $aArgs['notification_sid'];
         $notification_id = $aArgs['notification_id'];
 
         //Creer le script sh pour les notifications
@@ -183,10 +182,10 @@ class NotificationScheduleModelAbstract
 
         HistoryController::add([
             'tableName' => 'notifications',
-            'recordId' => $notification_id,
+            'recordId'  => $notification_id,
             'eventType' => 'ADD',
-            'eventId' => 'notificationadd',
-            'info' => _NOTIFICATION_SCRIPT_ADDED,
+            'eventId'   => 'notificationadd',
+            'info'      => _NOTIFICATION_SCRIPT_ADDED,
         ]);
 
         return true;
-- 
GitLab