v20191229
authorkilian (dks-laptop) <ksaffran@dks.lu>
Mon, 30 Dec 2019 07:10:34 +0000 (08:10 +0100)
committerkilian (dks-laptop) <ksaffran@dks.lu>
Mon, 30 Dec 2019 07:10:34 +0000 (08:10 +0100)
18 files changed:
backoffice/api/index.cgi
backoffice/api/lib/dksconfig.pm
backoffice/api/lib/sendemail_new.pm [new file with mode: 0644]
backoffice/data/.htaccess
backoffice/data/company/.htaccess [deleted file]
backoffice/data/mail/block/greeting.tt [new file with mode: 0644]
backoffice/data/mail/block/signature.tt [new file with mode: 0644]
backoffice/data/mail/body/user_forgotpasswd.tt [new file with mode: 0644]
backoffice/data/mail/body/user_registration.tt [new file with mode: 0644]
backoffice/data/mail/mail.tt [new file with mode: 0644]
backoffice/index.cgi
backoffice/tmpl/module/staff/widgets/staff/staff.js
backoffice/tmpl/skeleton/login.tt
backoffice/tmpl/skeleton/login/accountreset.tt [new file with mode: 0644]
backoffice/tmpl/skeleton/login/validationcode.tt
dev/diff_files.sh
dev/sourcefiles.local.txt
dev/sourcefiles.remote.txt

index e194034..2d926f8 100755 (executable)
@@ -195,6 +195,10 @@ select json_array_elements_text(schemaaccess)  as schemaaccess from users where
         }
         $html->{result} = $db->dbquerysorted($sql);
     }
+    if ($p->{fn} eq "sendemail"){
+      my $eml = sendemailnew->new();
+      $eml->gentemplate($p->{tmpl},$sess->{id});
+    }
   }
   
 }
index 3adb907..e646d2b 100644 (file)
@@ -12,13 +12,14 @@ our $sitecfg ={
   cookiename => 'potlu',
   dbtype => 'PgPP',
   dsn => 'DBI:PgPP:dbname=potlu_db;host=DKS-LAPTOP.fritz.box',
-  #dsn => 'DBI:PgPP:dbname=solarch_db;host=sql629.your-server.de',
+  #dsn => 'DBI:PgPP:dbname=potlu_db;host=sql629.your-server.de',
   dbuser => 'potlu_user',
   dbpassword => 'r2btTTRfuJz4whez',
   page => 'index.tt',
   pagename => 'index',
   basepath => substr((exists($ENV{"SCRIPT_FILENAME"})?dirname($ENV{"SCRIPT_FILENAME"}):dirname($0)),length($ENV{"DOCUMENT_ROOT"})),
   datapath => substr((exists($ENV{"SCRIPT_FILENAME"})?dirname($ENV{"SCRIPT_FILENAME"}):dirname($0)),length($ENV{"DOCUMENT_ROOT"})).'/data/',
+  apidatapath => substr((exists($ENV{"SCRIPT_FILENAME"})?dirname(dirname($ENV{"SCRIPT_FILENAME"})):dirname(dirname($0))),length($ENV{"DOCUMENT_ROOT"})).'/data/',
   docroot => $ENV{"DOCUMENT_ROOT"},
   registration_enabled => '0',
   default_group => 'users',
@@ -28,7 +29,13 @@ our $sitecfg ={
     port => "587",
     user => 'ksaffran@dks.lu',
     password => "FB1ia1ka",
-    from => 'support@dks.lu'
+    from => 'support@dks.lu',
+    templates  => {
+      user_registration => "Confirmation requis pour votre création de compte sur pot.lu",
+      user_forgotpasswd => "Nouveau mot de passe pour le site pot.lu",
+      user_verification => "Validation de votre Email pour le site pot.lu",
+      user_newpassword => "coordonnées d'accès de votre compte sur pot.lu"
+    }
   }
 };
 
diff --git a/backoffice/api/lib/sendemail_new.pm b/backoffice/api/lib/sendemail_new.pm
new file mode 100644 (file)
index 0000000..e0bb1e6
--- /dev/null
@@ -0,0 +1,151 @@
+package sendemail_new;
+
+use strict;
+use lib ('./lib/perl5');
+use lib ('./lib');
+use lib ('./');
+use Data::Dumper;
+use Template;
+use CGI;
+use File::Basename qw/dirname basename/;
+use dksdb;
+
+use dksconfig qw($sitecfg);
+
+sub new {
+    my $class = shift;
+    my $self = bless {}, $class;
+    $self->{server} = $sitecfg->{mail}->{server};
+    $self->{port} = $sitecfg->{mail}->{port};
+    $self->{user} = $sitecfg->{mail}->{user};
+    $self->{password} = $sitecfg->{mail}->{password};
+    $self->{from} = $sitecfg->{mail}->{from};
+    $self->{templates} = $sitecfg->{mail}->{templates};
+    return $self;
+}
+
+sub gentemplate(){
+  my $self = shift;
+  my $template = shift;
+  my $iduser = shift;
+  my $vars = $sitecfg;
+  $vars->{bodytemplate} = $template.".tt";
+  $vars->{userid} = $iduser;
+  $vars->{siteurl} = CGI::url({-base=>1}).dirname($vars->{basepath});
+
+  print STDERR $sitecfg->{docroot}.$sitecfg->{apidatapath}.'mail';
+  chdir($sitecfg->{docroot}.$sitecfg->{apidatapath}.'mail');
+  my $bodyfile = dirname($ENV{SCRIPT_FILENAME}).'/tmp/'.$template.'_'.$iduser.'.mail';
+  my $template = Template->new({INCLUDE_PATH => [$sitecfg->{docroot}.$sitecfg->{apidatapath}.'mail'],OUTPUT => $bodyfile});
+  $template->process("mail.tt",$vars) || die "Template process failed: ", $template->error(), "\n";
+  my $db = dksdb->new();
+  my $usermail = $db->dbquerysorted("select username from public.users where id='".$iduser."';");
+
+  my $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/sendEmail';
+  if (! -e $binsemail){
+    return 256;
+  }
+  my $cmd= 'perl "'.$binsemail.'" -f '.$self->{mailfrom}.' ';
+    $cmd .= ' -s "'.$self->{server}.':'.$self->{port}.'" -xu "'.$self->{user}.'" -xp "'.$self->{password}.'" -q ';
+    $cmd .= '-o tls=auto ';
+    $cmd .= '-t "'.$$usermail->{0}->{username}.'" ';
+    $cmd .= '-u "'.$self->{templates}->{$template}.'" ';
+    $cmd .= '-o message-content-type=html ';
+    $cmd .= '-o message-charset=ISO-8859-1 ';
+    $cmd .= '-o message-file='.$bodyfile.' ';
+    # if ($attach != undef){
+    #   $cmd .= " -a";
+      
+    #   foreach my $a (@{$attach}){
+    #     $cmd .= " ".$a." ";
+    #   }
+    # }
+    my $send = system($cmd);
+    return $send;
+    unlink($bodyfile);
+}
+
+# sub sendemail(){
+#   my $self = shift;
+#   my $template = shift;
+#   my $iduser = shift;
+#   my $sendto = shift;
+#   my $data = shift;
+#   my $attach = shift;
+#   my $body = "";
+#   my $subject = "";
+#   my $maildata = ();
+#   my $db = dksdb->new();
+#   my $send = -1;
+#   my $tmpl = $db->dbquerysorted("select *,ml.mailtemplate from mailtemplates mt join maillayouts ml on (mt.id_maillayout=ml.id) where templatename='".$template."';");
+#   if (keys(%{$tmpl}) > 0){
+#     $tmpl = $tmpl->{0};
+#   }
+#   my $datasql = $tmpl->{'emaildatasql'};
+#   $data->{id} = $iduser;
+#   foreach my $key (keys(%{$data})){
+#     my $srch = '%%'.lc($key).'%%';
+#     my $repl = $data->{$key};
+#     $datasql =~ s/$srch/$repl/g;
+#   }
+#   $maildata = $db->dbquerysorted($datasql);
+  
+#   $body = $tmpl->{'emailtext'};
+#   $subject = $tmpl->{'mailsubject'};
+#   foreach my $key (keys(%{$maildata->{0}})){
+#     $data->{$key} = $maildata->{0}->{$key};   
+#   }
+#   foreach my $key (keys(%{$data})){
+#     my $srch = '%%'.lc($key).'%%';
+#     my $repl = $data->{$key};
+#     $body =~ s/$srch/$repl/g;
+#     $subject =~ s/$srch/$repl/g;
+#   }
+#   my $bodytmpl = $tmpl->{mailtemplate};
+#   $bodytmpl =~ s/%%BODYCONTENT%%/$body/;
+#   my $siteurl = $ENV{'REQUEST_SCHEME'}.'://'.$ENV{"HTTP_HOST"};
+#   $bodytmpl =~ s/%%siteurl%%/$siteurl/g;
+#   $bodytmpl =~ s/%%SITEURL%%/$siteurl/g;
+#   $bodytmpl =~ s/\r//g;
+#   if (($bodytmpl ne "") && ($subject ne "") && ($sendto =~ /.+\@.+\..+/)){
+
+    
+#     my $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/sendEmail';
+#     my $f = dirname($ENV{SCRIPT_FILENAME}).'/tmp/mailbody_'.$sendto.'.txt';
+#     $f =~ s/\@/_/g;
+#     if (! -e  $binsemail){
+#       $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/api/sendEmail';
+#       $f = dirname($ENV{SCRIPT_FILENAME}).'/api/tmp/mailbody_'.$sendto.'.txt';
+#     $f =~ s/\@/_/g;
+#       if (! -e $binsemail){
+#         return 256;
+#       }
+#     }
+    
+#     my $cmd= 'perl "'.$binsemail.'" -f '.$tmpl->{mailfrom}.' ';
+#     $cmd .= ' -s "'.$self->{server}.':'.$self->{port}.'" -xu "'.$self->{user}.'" -xp "'.$self->{password}.'" -q ';
+#     $cmd .= '-o tls=auto ';
+#     $cmd .= '-t "'.$sendto.'" ';
+#     $cmd .= '-u "'.$subject.'" ';
+#     $cmd .= '-o message-content-type=html ';
+#     $cmd .= '-o message-charset=ISO-8859-1 ';
+#     $cmd .= '-o message-file='.$f.' ';
+#     open(EML,">".$f);
+#     print EML $bodytmpl;
+#     close(EML);
+#     # $cmd .= '-m "'.$bodytmpl.'" ';
+#     if ($attach != undef){
+#       $cmd .= " -a";
+      
+#       foreach my $a (@{$attach}){
+#         $cmd .= " ".$a." ";
+#       }
+#     }
+#     $send = system($cmd);
+
+#     unlink($f);
+#   }    
+#   return $send;
+# }
+
+1;
\ No newline at end of file
index b4b826d..908fc52 100644 (file)
@@ -1,5 +1,5 @@
-RewriteEngine On
-RewriteBase /
-RewriteCond %{HTTP_COOKIE} !potlu= [NC]
-RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L]
-Require all denied
\ No newline at end of file
+#RewriteEngine On
+#RewriteBase /
+#RewriteCond %{HTTP_COOKIE} !potlu= [NC]
+#RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L]
+Require all denied
\ No newline at end of file
diff --git a/backoffice/data/company/.htaccess b/backoffice/data/company/.htaccess
deleted file mode 100644 (file)
index b4b826d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-RewriteEngine On
-RewriteBase /
-RewriteCond %{HTTP_COOKIE} !potlu= [NC]
-RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L]
-# Require all denied
\ No newline at end of file
diff --git a/backoffice/data/mail/block/greeting.tt b/backoffice/data/mail/block/greeting.tt
new file mode 100644 (file)
index 0000000..4f62215
--- /dev/null
@@ -0,0 +1,4 @@
+[% quser = dksdb.query("select prename,surname from public.users where id='$userid';") %]
+[% user = quser.get_all() %]
+Bonjour [% user.0.prename %] [% user.0.surname %],<br/>
+<br/>
\ No newline at end of file
diff --git a/backoffice/data/mail/block/signature.tt b/backoffice/data/mail/block/signature.tt
new file mode 100644 (file)
index 0000000..e29b58a
--- /dev/null
@@ -0,0 +1,5 @@
+<br/>
+<br/>
+Meilleurs salutations,<br/>
+<br/>
+POT Support Team
\ No newline at end of file
diff --git a/backoffice/data/mail/body/user_forgotpasswd.tt b/backoffice/data/mail/body/user_forgotpasswd.tt
new file mode 100644 (file)
index 0000000..e2c10e8
--- /dev/null
@@ -0,0 +1,5 @@
+[% INCLUDE block/greeting.tt %]
+vous avez demandé un nouveau mot de passe via pot.lu!<br/>
+cliquer ci-dessous pour confirmer votre demande.<a>
+<a href="[% siteurl %]/accountreset.html">Changer mot de passe</a>
+[% INCLUDE block/signature.tt %]
\ No newline at end of file
diff --git a/backoffice/data/mail/body/user_registration.tt b/backoffice/data/mail/body/user_registration.tt
new file mode 100644 (file)
index 0000000..d781c06
--- /dev/null
@@ -0,0 +1,8 @@
+[% INCLUDE block/greeting.tt %]
+[% quser = dksdb.query("select username,vcode from public.users where id='$userid';") %]
+[% user = quser.get_all() %]
+Merci pour votre création de compte sur pot.lu,
+<br/><br/>
+votre code de validation: <strong  style="font-family: Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace;">[% user.0.vcode %]</strong><br/>
+Finissez votre régistration en entrant le votre code de validation ici: <a href="[% siteurl %]/validation.html">[% siteurl %]validation.html</a> 
+[% INCLUDE block/signature.tt %]
diff --git a/backoffice/data/mail/mail.tt b/backoffice/data/mail/mail.tt
new file mode 100644 (file)
index 0000000..c42d41c
--- /dev/null
@@ -0,0 +1,23 @@
+[% USE DBI %]
+[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <style>
+    body,html {
+        margin: 0;
+        background-color: #fff;
+    }
+  </style>
+  </head>
+  <body bgcolor="#607d8b">
+    <div class="maincontainer" align="left" style="padding-top: 5px; width: auto; background-color: #607d8b!important; color: #fff;">
+        POT - Plan d'organisation de travail</span>
+      <div  style="background-color: #fff; color: #000">
+        <div class="mailcontent" align="left" style="padding: 10px; color: #000;">
+          [% INCLUDE "body/$bodytemplate" %]
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
index dc568c6..18ad2d4 100755 (executable)
@@ -98,6 +98,12 @@ if ($cgi->request_method() eq "POST"){
     $vars->{messagetype} = $ret->{messagetype};
     $vars->{page} = "message.tt";
   }
+  if (exists($p->{'btnaccountreset'})){
+    my $ret = $se->accountreset($p);
+    $vars->{message} = $ret->{message};
+    $vars->{messagetype} = $ret->{messagetype};
+    $vars->{page} = "message.tt";
+  }
 
   if (exists($p->{logout})){ 
     $se->deletesession($p->{sid});
@@ -179,8 +185,8 @@ if ($skl ne "skeleton/login.tt" && $vars->{page} =~ /^module/){
   if ($vars->{page} !~ /\.tt$/) {
     $skl = "skeleton/module_file.tt";
   }
-  $vars->{params}= $p;
 }
+$vars->{params}= $p;
 
 #END - iFrame - Modules
 
index 2ac89d2..929d6ee 100644 (file)
@@ -86,7 +86,7 @@ var staff ={
   
   add: function(){
     cleanform2("staff",staff.choices);
-    module.viewpanel(staff.name);
+    module.viewpanel("frm_" + staff.name);
     //module.viewdialog(staff.name,null);
     //document.getElementById("company").addEventListener('blur', function(event){staff.checkschema(event,this.id);},true);
     //module.viewpanel('frm_' + staff.name);
index 717e85a..dff443c 100644 (file)
@@ -19,6 +19,8 @@
           [% INCLUDE skeleton/login/message.tt %]
         [% ELSIF pagename == 'validationcode' %]
           [% INCLUDE skeleton/login/validationcode.tt %]
+        [% ELSIF pagename == 'accountreset' %]
+          [% INCLUDE skeleton/login/accountreset.tt %]
         [% ELSE %]
           [% INCLUDE skeleton/login/login.tt %]
         [% END %]
diff --git a/backoffice/tmpl/skeleton/login/accountreset.tt b/backoffice/tmpl/skeleton/login/accountreset.tt
new file mode 100644 (file)
index 0000000..6a2bd4f
--- /dev/null
@@ -0,0 +1,37 @@
+[% IF params.reset.length > 0 %]
+[% accreset = params.reset %]
+[% USE DBI %]
+[% USE dksdb = DBI(dsn, dbuser, dbpassword) %]
+[% quser = dksdb.query("select username from public.users where regcode='$accreset';") %]
+[% END %]
+[% IF quser.size > 0 %]
+  [% user = quser.get_all() %]
+  <div class="w3-container">
+            <h4>Demande de changement de mot de passe</h4>
+            <h6 class="w3-text-blue">Entrez votre nouveau mot de passe ci-dessous!</h6>
+        </div>
+        <form name="frmlogin"  method="POST" id="frmaccountreset">
+
+          <input type="hidden" id="regcode" value="[% reset %]" />
+          <div class="w3-container">
+              <label for="username" class="w3-label">Login</label>
+              <input class="w3-input w3-border" type="text" id="login" name="login" readonly>
+          </div>
+          <div class="w3-container">
+            <label for="password" class="w3-label">Mot de passe</label>
+              <input class="w3-input w3-border" type="password" id="password" name="password">
+          </div>
+          <div class="w3-container">
+            <label for="password" class="w3-label">Répéter Mot de passe</label>
+              <input class="w3-input w3-border" type="password" id="password2" name="password2">
+          </div>
+          <div class="w3-container w3-padding-16">
+              <button type="submit" name="btnaccountreset" class="w3-theme-dark w3-button" >envoyer</button>
+          </div>
+          <div class="w3-container w3-padding-24">
+            <a href="[% basepath %]/login.html" class="text-primary">se Connecter</a>
+          </div>
+        </form>
+[% ELSE %]
+[% INCLUDE skeleton/login/login.tt %]
+[% END %]
\ No newline at end of file
index 87b36be..2e997aa 100644 (file)
@@ -1,12 +1,12 @@
 
 <div class="w3-container">
-        <h4>Validation de votre addressee E-Mail</h4>
+        <h4>Validation de votre compte</h4>
               <h6 >&nbsp;</h6>
         </div>
         <div class="w3-panel [% messagetype %]">[% message %]</div>     
               <form  method="POST">
                 <div class="w3-container">
-                    <label for="text" class="w3-label">Code</label>
+                    <label for="text" class="w3-label">Code de validation</label>
                   
                     <input type="text" class="w3-input w3-border" id="vcode" name="vcode"  required>
                     
index 9ad3d1a..c37967a 100644 (file)
@@ -14,11 +14,11 @@ ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEFOLDER}' && find . -type f
 
 CDATE=`date +"%F"`
 echo "To update:"
-UPDFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/data/" | grep -v "/media/"`
+UPDFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/media/"`
 echo ${UPDFILES}
 echo ""
 echo "new files:"
-INSFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/data/" | grep -v "/media/"`
+INSFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/media/"`
 echo ${INSFILES}
 echo ""
 echo "only online or OLD files:"
index 34dbc75..6b79fa9 100644 (file)
@@ -1,7 +1,7 @@
 ./backoffice/api/db.cgi|4005
 ./backoffice/api/file.cgi|4381
-./backoffice/api/index.cgi|6319
-./backoffice/api/lib/dksconfig.pm|871
+./backoffice/api/index.cgi|6445
+./backoffice/api/lib/dksconfig.pm|1536
 ./backoffice/api/lib/dksdb.pm|10421
 ./backoffice/api/lib/dkssavefile.pm|991
 ./backoffice/api/lib/perl5/Business/Tax/VAT/Validation.pm|14797
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Test/LeakTrace.pm|7262
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Test/LeakTrace/Script.pm|986
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Text/Soundex.pm|8345
-./backoffice/api/lib/sendemail.pm|2953
+./backoffice/api/lib/sendemail_new.pm|4865
+./backoffice/api/lib/sendemail.pm|3038
 ./backoffice/api/lib/session.pm|9650
 ./backoffice/api/sendEmail|80246
 ./backoffice/api/upload.cgi|9418
 ./backoffice/css/module.css|181
 ./backoffice/css/w3pro.css|27053
-./backoffice/data/company/.htaccess|167
-./backoffice/data/.htaccess|167
+./backoffice/data/.htaccess|169
+./backoffice/data/mail/block/greeting.tt|180
+./backoffice/data/mail/block/signature.tt|62
+./backoffice/data/mail/body/user_forgotpasswd.tt|243
+./backoffice/data/mail/body/user_registration.tt|551
+./backoffice/data/mail/mail.tt|709
 ./backoffice/data/schemata/defaultcompany.schema.sql|53843
 ./backoffice/data/schemata/.htaccess|167
-./backoffice/.htaccess|222
+./backoffice/.htaccess|202
 ./backoffice/img/bg1.jpg|135161
 ./backoffice/img/favicon/android-icon-144x144.png|12179
 ./backoffice/img/favicon/android-icon-192x192.png|16669
 ./backoffice/img/no-news-img.png|17922
 ./backoffice/img/pottop.png|2689
 ./backoffice/img/toplogo.png|31456
-./backoffice/index.cgi|5349
+./backoffice/index.cgi|5550
 ./backoffice/js/admin.js|3435
 ./backoffice/js/.DS_Store|6148
 ./backoffice/js/formsave.js|9096
 ./backoffice/tmpl/module/staff/widgets/staffcontract/tbar_staffcontract.tt|645
 ./backoffice/tmpl/module/staff/widgets/staffcontract/tbl_staffcontract.tt|276
 ./backoffice/tmpl/module/staff/widgets/staff/frm_staff.tt|1853
-./backoffice/tmpl/module/staff/widgets/staff/staff.js|3778
+./backoffice/tmpl/module/staff/widgets/staff/staff.js|3787
 ./backoffice/tmpl/module/staff/widgets/staff/tbar_staff.tt|672
 ./backoffice/tmpl/module/staff/widgets/staff/tbl_staff.tt|125
 ./backoffice/tmpl/module/timetrackers/index.js|399
 ./backoffice/tmpl/module/workplans/index.js|3126
 ./backoffice/tmpl/module/workplans/index.tt|3065
 ./backoffice/tmpl/skeleton/index.tt|4550
+./backoffice/tmpl/skeleton/login/accountreset.tt|1679
 ./backoffice/tmpl/skeleton/login/forgotpassword.tt|874
 ./backoffice/tmpl/skeleton/login/login.tt|1231
 ./backoffice/tmpl/skeleton/login/message.tt|638
 ./backoffice/tmpl/skeleton/login/register.tt|2545
-./backoffice/tmpl/skeleton/login.tt|1069
-./backoffice/tmpl/skeleton/login/validationcode.tt|950
+./backoffice/tmpl/skeleton/login.tt|1171
+./backoffice/tmpl/skeleton/login/validationcode.tt|954
 ./backoffice/tmpl/skeleton/module_file.tt|84
 ./backoffice/tmpl/skeleton/module.tt|2718
 ./backoffice/vendors/choices/base.css|2314
 ./css/site.css|181
 ./css/w3pro.css|26847
 ./.gitignore|26
-./.htaccess|592
+./.htaccess|277
 ./img/favicon/android-icon-144x144.png|12179
 ./img/favicon/android-icon-192x192.png|16669
 ./img/favicon/android-icon-36x36.png|2527
index be734da..aedf178 100644 (file)
@@ -1,9 +1,10 @@
-./backoffice/api/db.cgi|2779
+./backoffice/api/db.cgi|4005
 ./backoffice/api/file.cgi|4381
-./backoffice/api/index.cgi|5145
-./backoffice/api/lib/dksconfig.pm|871
-./backoffice/api/lib/dksdb.pm|10174
+./backoffice/api/index.cgi|6445
+./backoffice/api/lib/dksconfig.pm|1536
+./backoffice/api/lib/dksdb.pm|10421
 ./backoffice/api/lib/dkssavefile.pm|991
+./backoffice/api/lib/perl5/Business/Tax/VAT/Validation.pm|14797
 ./backoffice/api/lib/perl5/CGI/Cookie.pm|6599
 ./backoffice/api/lib/perl5/CGI/File/Temp.pm|969
 ./backoffice/api/lib/perl5/CGI.pm|125242
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Test/LeakTrace.pm|7262
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Test/LeakTrace/Script.pm|986
 ./backoffice/api/lib/perl5/x86_64-linux-gnu-thread-multi/Text/Soundex.pm|8345
-./backoffice/api/lib/sendemail.pm|3727
-./backoffice/api/lib/session.pm|9046
+./backoffice/api/lib/sendemail_new.pm|4865
+./backoffice/api/lib/sendemail.pm|3038
+./backoffice/api/lib/session.pm|9650
 ./backoffice/api/sendEmail|80246
-./backoffice/api/tmp/sql.log|256
 ./backoffice/api/upload.cgi|9418
-./backoffice/css/module.css|174
+./backoffice/css/module.css|181
 ./backoffice/css/w3pro.css|27053
-./backoffice/data/company/.htaccess|167
-./backoffice/data/.htaccess|167
-./backoffice/data/schemata/defaultcompany.schema.sql|52381
+./backoffice/data/.htaccess|169
+./backoffice/data/mail/block/greeting.tt|180
+./backoffice/data/mail/block/signature.tt|62
+./backoffice/data/mail/body/user_forgotpasswd.tt|243
+./backoffice/data/mail/body/user_registration.tt|551
+./backoffice/data/mail/mail.tt|709
+./backoffice/data/schemata/defaultcompany.schema.sql|53843
 ./backoffice/data/schemata/.htaccess|167
 ./backoffice/.htaccess|214
 ./backoffice/img/bg1.jpg|135161
 ./backoffice/img/favicon/ms-icon-70x70.png|5051
 ./backoffice/img/hourtrax.png|44729
 ./backoffice/img/icons/access.svg|1553
-./backoffice/img/icons/access_white.svg|1565
+./backoffice/img/icons/access_white.svg|1569
 ./backoffice/img/icons/address.svg|800
 ./backoffice/img/icons/address_white.svg|812
 ./backoffice/img/icons/Agreement_01.svg|5234
 ./backoffice/img/icons/apps.svg|781
 ./backoffice/img/icons/apps_white.svg|793
 ./backoffice/img/icons/archive.svg|641
-./backoffice/img/icons/archive_white.svg|654
+./backoffice/img/icons/archive_white.svg|658
 ./backoffice/img/icons/Bill.svg|3185
-./backoffice/img/icons/calendar.svg|954
-./backoffice/img/icons/calendar_white.svg|966
+./backoffice/img/icons/calendar.svg|1038
+./backoffice/img/icons/calendar_white.svg|1038
 ./backoffice/img/icons/clubs.svg|1033
 ./backoffice/img/icons/club.svg|823
 ./backoffice/img/icons/clubs_white.svg|1045
 ./backoffice/img/icons/club_white.svg|835
 ./backoffice/img/icons/code.svg|589
 ./backoffice/img/icons/company.svg|1482
-./backoffice/img/icons/company_white.svg|1494
+./backoffice/img/icons/company_white.svg|1498
 ./backoffice/img/icons/cubelight.svg|1023
 ./backoffice/img/icons/cubelight_white.svg|1036
 ./backoffice/img/icons/cube.svg|365
 ./backoffice/img/icons/dashboard_white.svg|1098
 ./backoffice/img/icons/Document_Save.svg|729
 ./backoffice/img/icons/documents.svg|987
-./backoffice/img/icons/documents_white.svg|999
+./backoffice/img/icons/documents_white.svg|1003
 ./backoffice/img/icons/download.svg|339
 ./backoffice/img/icons/download_white.svg|351
 ./backoffice/img/icons/duplicate.svg|430
 ./backoffice/img/icons/edit.svg|712
 ./backoffice/img/icons/edit_white.svg|725
 ./backoffice/img/icons/excel.svg|1394
-./backoffice/img/icons/excel_white.svg|1406
+./backoffice/img/icons/excel_white.svg|1410
 ./backoffice/img/icons/file/dir.png|6937
 ./backoffice/img/icons/file/doc.png|6455
 ./backoffice/img/icons/file/docx.png|6455
 ./backoffice/img/icons/file/xlsx.png|6065
 ./backoffice/img/icons/Floppy.svg|1058
 ./backoffice/img/icons/folder_add.svg|1438
-./backoffice/img/icons/folder_add_white.svg|1450
+./backoffice/img/icons/folder_add_white.svg|1454
 ./backoffice/img/icons/Folder_Delete_01.svg|1254
 ./backoffice/img/icons/Folder_Find_01.svg|1371
 ./backoffice/img/icons/folder.svg|404
 ./backoffice/img/icons/globe_white.svg|1254
 ./backoffice/img/icons/group.svg|1994
 ./backoffice/img/icons/group_white.svg|2006
-./backoffice/img/icons/home.svg|522
+./backoffice/img/icons/home.svg|531
 ./backoffice/img/icons/inbox.svg|413
 ./backoffice/img/icons/inbox_white.svg|425
 ./backoffice/img/icons/library.svg|968
 ./backoffice/img/icons/logout.svg|402
 ./backoffice/img/icons/logout_white.svg|414
 ./backoffice/img/icons/log.svg|1710
-./backoffice/img/icons/log_white.svg|1722
+./backoffice/img/icons/log_white.svg|1726
 ./backoffice/img/icons/menu.svg|336
 ./backoffice/img/icons/menu_white.svg|348
 ./backoffice/img/icons/newspaper.svg|812
 ./backoffice/img/icons/pdfexport.svg|2730
 ./backoffice/img/icons/pdfexport_white.svg|2730
 ./backoffice/img/icons/pdf.svg|3436
-./backoffice/img/icons/pdf_white.svg|3448
+./backoffice/img/icons/pdf_white.svg|3452
 ./backoffice/img/icons/pictures.svg|1420
-./backoffice/img/icons/pictures_white.svg|1432
+./backoffice/img/icons/pictures_white.svg|1436
 ./backoffice/img/icons/plus.svg|535
 ./backoffice/img/icons/plus_white.svg|547
+./backoffice/img/icons/poticon.svg|10061
 ./backoffice/img/icons/projects.svg|939
-./backoffice/img/icons/projects_white.svg|951
+./backoffice/img/icons/projects_white.svg|955
 ./backoffice/img/icons/remove.svg|816
 ./backoffice/img/icons/remove_white.svg|828
 ./backoffice/img/icons/Save.svg|477
 ./backoffice/img/icons/target.svg|780
 ./backoffice/img/icons/target_white.svg|792
 ./backoffice/img/icons/upload.svg|507
-./backoffice/img/icons/upload_white.svg|519
+./backoffice/img/icons/upload_white.svg|523
 ./backoffice/img/icons/user.svg|780
 ./backoffice/img/icons/user_white.svg|792
 ./backoffice/img/logo_512.png|31456
 ./backoffice/img/logo_512_xx.png|14719
 ./backoffice/img/no-image-icon.png|20003
 ./backoffice/img/no-news-img.png|17922
+./backoffice/img/pottop.png|2689
 ./backoffice/img/toplogo.png|31456
-./backoffice/index.cgi|5317
-./backoffice/js/admin.js|3062
+./backoffice/index.cgi|5550
+./backoffice/js/admin.js|3435
 ./backoffice/js/.DS_Store|6148
-./backoffice/js/formsave.js|9031
-./backoffice/js/module_global.js|2812
-./backoffice/js/request.js|3812
+./backoffice/js/formsave.js|9096
+./backoffice/js/module_global.js|3286
+./backoffice/js/request.js|3866
 ./backoffice/tmpl/block/cgu.tt|9358
-./backoffice/tmpl/block/dlgdeleterow.tt|2528
+./backoffice/tmpl/block/dlgdataload.tt|1293
+./backoffice/tmpl/block/dlgdeleterow.tt|2573
+./backoffice/tmpl/block/dlgmessage.tt|950
 ./backoffice/tmpl/block/dlguploadfile.tt|3399
 ./backoffice/tmpl/block/head.tt|1782
 ./backoffice/tmpl/block/snackbar.tt|25
 ./backoffice/tmpl/block/toolbars.tt|515
 ./backoffice/tmpl/macro/fields.tt|8707
-./backoffice/tmpl/module/companies/index.js|4825
-./backoffice/tmpl/module/companies/index.tt|603
-./backoffice/tmpl/module/companies/widgets/companies/companies.js|2799
-./backoffice/tmpl/module/companies/widgets/companies/frm_companies.tt|1865
+./backoffice/tmpl/module/companies/index.js|229
+./backoffice/tmpl/module/companies/index.tt|626
+./backoffice/tmpl/module/companies/widgets/companies/companies.js|4126
+./backoffice/tmpl/module/companies/widgets/companies/frm_companies.tt|1897
 ./backoffice/tmpl/module/companies/widgets/companies/tbar_companies.tt|694
 ./backoffice/tmpl/module/companies/widgets/companies/tbl_companies.tt|133
 ./backoffice/tmpl/module/dashboard/index.js|165
-./backoffice/tmpl/module/dashboard/index.tt|935
-./backoffice/tmpl/module/planning/index.js|555
-./backoffice/tmpl/module/planning/index.tt|1067
-./backoffice/tmpl/module/planning/widgets/reportperiod/dlg_reportperiod.tt|1402
-./backoffice/tmpl/module/planning/widgets/reportperiod/reportperiod.js|2249
-./backoffice/tmpl/module/planning/widgets/reportperiod/tbar_reportperiod.tt|630
+./backoffice/tmpl/module/dashboard/index.tt|987
+./backoffice/tmpl/module/planning/index.js|305
+./backoffice/tmpl/module/planning/index.tt|1001
+./backoffice/tmpl/module/planning/widgets/reportperiod/dlg_reportperiod.tt|1396
+./backoffice/tmpl/module/planning/widgets/reportperiod/reportperiod.js|3491
+./backoffice/tmpl/module/planning/widgets/reportperiod/tbar_reportperiod.tt|632
 ./backoffice/tmpl/module/planning/widgets/reportperiod/tbl_reportperiod.tt|139
-./backoffice/tmpl/module/planning/widgets/staffworkplan/frm_staffworkplan.tt|2881
-./backoffice/tmpl/module/planning/widgets/staffworkplan/staffworkplan.js|9336
-./backoffice/tmpl/module/planning/widgets/staffworkplan/tbar_staffworkplan.tt|714
+./backoffice/tmpl/module/planning/widgets/staffworkplan/frm_staffworkplan.tt|2928
+./backoffice/tmpl/module/planning/widgets/staffworkplan/staffworkplan.js|14277
+./backoffice/tmpl/module/planning/widgets/staffworkplan/tbar_staffworkplan.tt|912
 ./backoffice/tmpl/module/planning/widgets/staffworkplan/tbl_staffworkplan.tt|141
 ./backoffice/tmpl/module/profile/dlgpassword.tt|2911
-./backoffice/tmpl/module/profile/dlgusername.tt|3817
-./backoffice/tmpl/module/profile/index.js|1866
-./backoffice/tmpl/module/profile/index.tt|1791
+./backoffice/tmpl/module/profile/dlgusername.tt|3814
+./backoffice/tmpl/module/profile/index.js|1410
+./backoffice/tmpl/module/profile/index.tt|1767
 ./backoffice/tmpl/module/sites/index.js|4519
 ./backoffice/tmpl/module/sites/index.tt|0
-./backoffice/tmpl/module/staff/index.js|15017
-./backoffice/tmpl/module/staff/index.tt|5197
+./backoffice/tmpl/module/staff/index.js|247
+./backoffice/tmpl/module/staff/index.tt|697
+./backoffice/tmpl/module/staff/widgets/staffcontract/dlg_staffcontract.tt|1344
+./backoffice/tmpl/module/staff/widgets/staffcontract/staffcontract.js|4239
+./backoffice/tmpl/module/staff/widgets/staffcontract/tbar_staffcontract.tt|645
+./backoffice/tmpl/module/staff/widgets/staffcontract/tbl_staffcontract.tt|276
+./backoffice/tmpl/module/staff/widgets/staff/frm_staff.tt|1853
+./backoffice/tmpl/module/staff/widgets/staff/staff.js|3787
+./backoffice/tmpl/module/staff/widgets/staff/tbar_staff.tt|672
+./backoffice/tmpl/module/staff/widgets/staff/tbl_staff.tt|125
 ./backoffice/tmpl/module/timetrackers/index.js|399
 ./backoffice/tmpl/module/timetrackers/index.tt|1304
-./backoffice/tmpl/module/users/index.js|8237
-./backoffice/tmpl/module/users/index.tt|5344
+./backoffice/tmpl/module/users/index.js|221
+./backoffice/tmpl/module/users/index.tt|594
+./backoffice/tmpl/module/users/widgets/users/dlg_users.tt|1765
+./backoffice/tmpl/module/users/widgets/users/tbar_users.tt|601
+./backoffice/tmpl/module/users/widgets/users/tbl_users.tt|125
+./backoffice/tmpl/module/users/widgets/users/users.js|6218
 ./backoffice/tmpl/module/workplans/index.js|3126
 ./backoffice/tmpl/module/workplans/index.tt|3065
-./backoffice/tmpl/skeleton/index.tt|4163
+./backoffice/tmpl/skeleton/index.tt|4550
+./backoffice/tmpl/skeleton/login/accountreset.tt|1679
 ./backoffice/tmpl/skeleton/login/forgotpassword.tt|874
 ./backoffice/tmpl/skeleton/login/login.tt|1231
 ./backoffice/tmpl/skeleton/login/message.tt|638
 ./backoffice/tmpl/skeleton/login/register.tt|2545
-./backoffice/tmpl/skeleton/login.tt|1069
-./backoffice/tmpl/skeleton/login/validationcode.tt|950
+./backoffice/tmpl/skeleton/login.tt|1171
+./backoffice/tmpl/skeleton/login/validationcode.tt|954
 ./backoffice/tmpl/skeleton/module_file.tt|84
-./backoffice/tmpl/skeleton/module.tt|2604
+./backoffice/tmpl/skeleton/module.tt|2718
 ./backoffice/vendors/choices/base.css|2314
 ./backoffice/vendors/choices/base.min.css|1604
 ./backoffice/vendors/choices/choices.css|8099
 ./backoffice/vendors/ctxmenu/ctxmenu.css|1689
 ./backoffice/vendors/ctxmenu/ctxmenu.js|7569
 ./backoffice/vendors/flatpickr/flatpickr.css|18831
-./backoffice/vendors/flatpickr/flatpickr.js|118018
+./backoffice/vendors/flatpickr/flatpickr.js|118042
 ./backoffice/vendors/flatpickr/flatpickr.min.css|15954
 ./backoffice/vendors/flatpickr/flatpickr.min.js|48368
 ./backoffice/vendors/flatpickr/ie.css|260
 ./backoffice/vendors/flatpickr/l10n/lu.js|1802
 ./backoffice/vendors/flatpickr/plugins/confirmDate/confirmDate.css|373
 ./backoffice/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts|272
-./backoffice/vendors/flatpickr/plugins/confirmDate/confirmDate.js|4212
+./backoffice/vendors/flatpickr/plugins/confirmDate/confirmDate.js|4236
 ./backoffice/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts|114
 ./backoffice/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js|964
 ./backoffice/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts|491
 ./backoffice/vendors/flatpickr/plugins/minMaxTimePlugin.js|12399
 ./backoffice/vendors/flatpickr/plugins/monthSelect/index.d.ts|367
-./backoffice/vendors/flatpickr/plugins/monthSelect/index.js|7733
+./backoffice/vendors/flatpickr/plugins/monthSelect/index.js|7757
 ./backoffice/vendors/flatpickr/plugins/monthSelect/style.css|1561
 ./backoffice/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts|11
 ./backoffice/vendors/flatpickr/plugins/rangePlugin.d.ts|312
 ./backoffice/vendors/tabulator/js/tabulator.min.js|319423
 ./backoffice/vendors/tinymce/changelog.txt|131850
 ./backoffice/vendors/tinymce/js/tinymce/jquery.tinymce.min.js|6635
-./backoffice/vendors/tinymce/js/tinymce/langs/de.js|10075
-./backoffice/vendors/tinymce/js/tinymce/langs/fr_FR.js|9880
+./backoffice/vendors/tinymce/js/tinymce/langs/de.js|10334
+./backoffice/vendors/tinymce/js/tinymce/langs/fr_FR.js|10140
 ./backoffice/vendors/tinymce/js/tinymce/langs/readme.md|151
 ./backoffice/vendors/tinymce/js/tinymce/license.txt|26441
 ./backoffice/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js|3995