v202101121612 t1.0.27 1.0.27
authorKilian Saffran <ksaffran@dks.lu>
Tue, 12 Jan 2021 15:12:22 +0000 (16:12 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Tue, 12 Jan 2021 15:12:22 +0000 (16:12 +0100)
21 files changed:
.vscode/snippets.code-snippets [new file with mode: 0644]
app/index.cgi
app/lib/session.pm
app/tmpl/block/dlg_newpassword.tt
app/tmpl/index.tt
app/tmpl/lang/de.tt
app/tmpl/lang/fr.tt
app/tmpl/module/company/users.js
app/tmpl/module/profile/profile.js
app/tmpl/module/sectors.tt
app/tmpl/module/staff.tt
app/tmpl/module/timetracker/pnl_timertracker.tt [new file with mode: 0644]
app/tmpl/module/timetracker/timetracker.js [new file with mode: 0644]
app/tmpl/module/timetracker/timetrackers.js [new file with mode: 0644]
app/tmpl/module/timetrackers.tt [new file with mode: 0644]
app/tmpl/module/workplans.tt
desktopapp/package.json
dev/apache/app.pot.conf
dev/apache/plandutravail.lan.conf
dev/test.pl
ipad/Import.log

diff --git a/.vscode/snippets.code-snippets b/.vscode/snippets.code-snippets
new file mode 100644 (file)
index 0000000..b576737
--- /dev/null
@@ -0,0 +1,148 @@
+{
+       "input-hidden": {
+               "scope":"html",
+               "prefix":"input-hidden",
+               "body":["<input type=\"hidden\" class=\"data_${1:formname}\" id=\"$1_${2:column}\" data-id=\"\" data-column=\"$2\" data-table=\"${3:table}\" />"]
+       },
+       "input-date": {
+               "scope":"html",
+               "prefix":"input-date",
+               "body":["<div class=\"cell\" style=\"width: 140px;\">",
+                       "\t<label class=\"label\" for=\"${1:formname}_${2:column}\">{$3:label}</label>",
+                       "\t<input class=\"input border date data_$1 datefield\" data-column=\"$2\" data-id=\"\" data-table=\"${4:table}\" id=\"$1_$2\"  onblur=\"dataform.savefield(this);\" type=\"date\">",
+                       "</div>"]
+       },
+       "input-text": {
+               "scope":"html",
+               "prefix":"input-text",
+        "body":["<div class=\"cell\" style=\"width: ${1:400}px;\">",
+               "\t<label class=\"label\" for=\"${2:formname}_${3:column}\">${4:label}</label>",
+               "\t<input class=\"input border text data_$2 ${5:readonly}\" data-column=\"$3\" data-id=\"\" data-table=\"${6:table}\" id=\"$2_$3\"  onblur=\"dataform.savefield(this);\" type=\"text\" $5>",
+               "</div>"]
+ },
+ "input-number": {
+       "scope":"html",
+       "prefix":"input-number",
+ "body":["<div class=\"cell\" style=\"width: ${1:140}px;\">",
+       "\t<label class=\"label\" for=\"${2:formname}_${3:column}\">${4:label}</label>",
+       "\t<input class=\"input border number right-align data_$2 ${5:readonly}\" data-column=\"$3\" data-id=\"\" data-table=\"${6:table}\" id=\"$2_$3\"  onblur=\"dataform.savefield(this);\" type=\"text\" $5>",
+       "</div>"]
+},
+       "form":{
+               "scope":"html",
+               "prefix":"form",
+               "body":"<form id=\"frm_${1:formname}\">$0</form>"
+       },
+       "row": {
+               "scope":"html",
+               "prefix":"row",
+               "body":"<div class=\"row\">$0</div>"
+       },
+       "cellrow": {
+               "scope":"html",
+               "prefix":"cellrow",
+               "body":"<div class=\"cell-row\">$0</div>"
+       },
+       "panel": {
+               "scope":"html",
+               "prefix":"panel",
+               "body":["<div class=\"panel\" id=\"pnl_${1:filename}\"  ${2:style=\"display: none;\"}>","$0","</div>"]
+       },
+       "select": {
+               "scope":"html",
+               "prefix": "select",
+               "body":[
+                       "<div class=\"cell\" style=\"width: ${1:400}px;\">",
+          "\t<label class=\"label\" for=\"${2:formname}_${3:column}\">${4:label}</label>",
+          "\t<select class=\"select border data_$2\" data-column=\"$3\" data-id=\"\" data-selected=\"\" data-table=\"${4:table}\" id=\"$2_$3\"></select>",
+                               "</div>"]
+       },
+       "checkbox": {
+               "scope":"html",
+               "prefix": "checkbox",
+               "body": ["<div class=\"cell\" style=\"width: 100%\">","\t<div class=\"container\">",
+    "\t\t<div class=\"cell-row\">",
+      "\t\t\t<div class=\"cell\" style=\"width: 40px;\">",
+        "\t\t\t\t<input class=\"check data_${2:formname}\" id=\"$2_${3:column}\">  data-column=\"$3\"  data-table=\"$2\" data-id=\"\" value=\"\" type=\"checkbox\" />",
+      "\t\t\t</div>",
+      "\t\t\t<div class=\"cell\">${4: checkbox label text}</div>","\t\t</div>","\t</div>","</div>"]
+       },
+       "textarea": {
+               "scope":"html",
+               "prefix":"textarea",
+               "body":[
+                       "<div class=\"cell\" style=\"width: ${1:100%};\">",
+                       "\t<label class=\"label\" for=\"${2:formname}_${3:column}\">${4:label}</label>",
+                       "\t<textarea class=\"input border data_$2 ${5:richeditarea}\" style=\"height: ${6:height}px;\"  data-id=\"\" data-column=\"$3\" data-table=\"${7:table}\"  id=\"$2_$3\" ></textarea>",
+                       "</div>"
+               ]
+       },
+       "topbarlistpage":{
+               "scope":"html",
+               "prefix":"topbar-listpage",
+               "body":["<div class=\"bar toolbar\">",
+                       "<a class=\"bar-item toolbarbtn\" href=\"index.html\"><span class=\"icon-home\" style=\"font-size: 18px;\"></span>Home</a>",
+                       "<div class=\"bar-item PageHeadTitle\">${1:Page Title}</div>",
+                       "<div class=\"hide-small\">",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"${2:jsclass}.confirmRemove();\"><span class=\"icon-trash\" style=\"font-size: 17px;\"></span>suppr.</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.edit();\"><span class=\"icon-edit\" style=\"font-size: 17px;\"></span>édit.</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.duplicate()\"><span class=\"icon-duplicate\" style=\"font-size: 17px;\"></span>dupl.</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.add();\"><span class=\"icon-plus\" style=\"font-size: 17px;\"></span>ajouter</button>",
+                       "</div> ",
+                       "<div class=\"hide-large hide-medium\">",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"myapp.togglemenu('mobilemenu_$2');\"><span class=\"icon-menu xxlarge\" style=\"font-size: 20px;\"></span></button>",
+                       "</div>",
+                       "<div class=\"toolbar\" id=\"mobilemenu_$2\" style=\"display: none;\">",
+                       "\t<div class=\"bar\">",
+                       "\t\t<button class=\"bar-item toolbarbtn\" onclick=\"$2.add();\"><span class=\"icon-plus\" style=\"font-size: 17px;\"></span>ajouter</button>",
+                       "\t\t<button class=\"bar-item toolbarbtn\" onclick=\"$2.edit();\"><span class=\"icon-edit\" style=\"font-size: 17px;\"></span>édit.</button>",
+                       "\t\t<button class=\"bar-item toolbarbtn\" onclick=\"$2.confirmRemove();\"><span class=\"icon-trash\" style=\"font-size: 17px;\"></span>suppr.</button>",
+                       "\t\t <button class=\"bar-item toolbarbtn\" onclick=\"$2.duplicate()\"><span class=\"icon-duplicate\" style=\"font-size: 17px;\"></span>dupl.</button>",
+                       "\t</div>",
+                       "</div>",
+                       "</div>"]
+       },
+       "topbarformpage":{
+               "scope":"html",
+               "prefix":"topbar-formpage",
+               "body": [
+                       "<div class=\"bar toolbar\">",
+                       "\t<button class=\"bar-item toolbarbtn\" onclick=\"myapp.viewpanel('${1:panelname'});\"><span class=\"icon-back\" style=\"font-size: 18px;\"></span>retour</button>",
+                       "\t<div class=\"bar-item PageHeadTitle\">${2: title}</div>",
+                       "</div>"]
+       },
+       "tablebar":{
+               "scope":"html",
+               "prefix":"tablebar",
+               "body":["<div class=\"bar moduletoolbar\">",
+                       "<div class=\"bar-item PageSubTitle\">${1:Page Title}</div>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"${2:jsclass}.confirmRemove();\"><span class=\"icon-trash\" style=\"font-size: 17px;\"></span>[% lbl.delete %]</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.edit();\"><span class=\"icon-edit\" style=\"font-size: 17px;\"></span>[% lbl.edit %]</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.duplicate()\"><span class=\"icon-duplicate\" style=\"font-size: 17px;\"></span>[% lbl.duplicate %]</button>",
+                       "\t<button class=\"bar-item toolbarbtn right\" onclick=\"$2.add();\"><span class=\"icon-plus\" style=\"font-size: 17px;\"></span>[% lbl.add %]</button>",
+                       "</div>"]
+       },
+       "display-container":{
+               "scope":"html",
+               "prefix":"display-container",
+               "body": [
+                       "<div class=\"display-container\">",
+                       "</div>"]
+       }
+       // Place your oldbell_lu workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 
+       // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 
+       // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 
+       // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 
+       // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 
+       // Placeholders with the same ids are connected.
+       // Example:
+       // "Print to console": {
+       //      "scope": "javascript,typescript",
+       //      "prefix": "log",
+       //      "body": [
+       //              "console.log('$1');",
+       //              "$2"
+       //      ],
+       //      "description": "Log output to console"
+       // }
+}
\ No newline at end of file
index 472fa2a..adc7b83 100644 (file)
@@ -25,10 +25,10 @@ my $sess = ();
 my $se = session->new({db => $db});
 
 $vars->{ua} = $ENV{HTTP_USER_AGENT};
-if (($vars->{ua} !~ /^POT/) || ($vars->{ua} !~ /iPad/)){
+if (($vars->{ua} !~ /^POT/) && ($vars->{ua} !~ /iPad/)){
      print "Location: https://www.plandutravail.lu\n\n";
      exit(0);
- }
+}
 $vars->{realpath} = $cgi->url({-absolute=>1});
 $vars->{filepath} = substr($cgi->url({-absolute=>1}),length($vars->{basepath})+1); 
 $vars->{baseurl} = $cgi->url({-base=>1}).'/'.$vars->{basepath};
@@ -144,8 +144,8 @@ $vars->{remote_addr} = $ENV{REMOTE_ADDR};
 my $template = Template->new({INCLUDE_PATH => [$sitecfg->{tmplpath}]});
 $template->process($skl,$vars) || die "Template process failed: ", $template->error(), "\n";
 $db->disconnect();
-if ($vars->{page} =~ /\.tt/){
-     print '<pre style="display: none;" >'.Dumper($vars)."<pre>";
- } 
+if ($vars->{page} =~ /\.tt/){
+     print '<pre style="display: none;" >'.Dumper($vars)."<pre>";
+ } 
 
 
index 74d63bb..0cca33e 100644 (file)
@@ -61,31 +61,7 @@ sub savepassword(){
   return 1;
 }
 
-# sub admin_sendpassword(){
-#   my $self = shift;
-#   my $email = shift;
-#   my $ret->{messagetype} ='red';
-#   $ret->{message} = "email inconnue!";
-#   my $sql = "select id,userpassword,surname,prename from users where username='".$self->{db}->securetext($email)."';";
-#   my $ex = $self->{db}->querysorted($sql);
-#   if (keys(%{$ex}) > 0){
-#     my $newpwd = $self->randomstring(12);
-#     my $pwd = sha256_hex($newpwd);
-#     $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id='".$ex->{0}->{id}."';");
-#     my $data->{newpassword} = $newpwd;
-#     $data->{name} = $ex->{0}->{prename}." ".$ex->{0}->{surname};
-#     my $eml = sendemail->new();
-#     my $mret = $eml->sendemail('user_forgotpasswd',$email,$data);
-#     if ($mret != 0){
-#       $ret->{messagetype} ='red';
-#       $ret->{message} = "Pour le moment il n'y est pas possible de recevoir un nouveau mot de passe, <br/>si besoin contacter le support!";
-#       return $ret;
-#     }
-#     $ret->{message} = "nous vous avons envoyés un nouveau mot de passe par email!";
-#     $ret->{messagetype} = "green";
-#   }
-#   return $ret;
-# }
+
 
 
 sub passwordforgotten(){
@@ -114,102 +90,15 @@ sub passwordforgotten(){
   return $ret;
 }
 
-# sub registeruser(){
-#   my $self = shift;
-#   my $data = shift;
-#   my $ret->{messagetype} ='red';
-#   $ret->{message} = "Une erreur c'est produite, essayer plus tard!";
-#   $ret->{page} = "message.tt";
-#   my @reqfields = ("companies_company","terms","users_email","members_phone","members_surname","members_prename","members_job");
-#   my $reqf = 1;
-#   foreach my $rf (@reqfields){
-#     if (!exists($data->{$rf})){
-#       $reqf = 0;
-#     }
-#   }
-#   if ($reqf == 0){
-#     $ret->{message} = "Rempissez tous les champs s.v.p.!";
-#     $ret->{page} =  "register.tt";
-#     return $ret;
-#   }
-#   foreach my $d (%{$data}){
-#     $data->{$d} = $self->{db}->securetext($data->{$d});
-#   }
-  
-#   my $user = $self->{db}->querysorted("select id from users where username='".$data->{users_email}."';");
-#   if (keys(%{$user}) > 0){
-#     $ret->{page} = "register.tt";
-#     $ret->{message} = "Il y existe déjà un utilisateur avec la mème adresse e-mail!";
-#     return $ret; 
-#   }
-  
-#   my $newcode = $self->randomstring(6);
-
-#   my $newuserid = $self->{db}->querysorted("INSERT INTO users (username,vcode) VALUES ('".$data->{users_email}."','".$newcode."') returning id;");
-#   #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where isdefault=true));");
-#   my $company = $self->{db}->querysorted("select id from companies where link=unaccent_string('".$data->{companies_company}."');");
-#   if (keys(%{$company}) == 0 ){
-#     $company = $self->{db}->querysorted("INSERT INTO companies (company,link) VALUES ('".$data->{companies_company}."',unaccent_string('".$data->{companies_company}."')) returning id;");
-#     #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where usergroup='company'));");
-#   }
-#   $self->{db}->exec("INSERT INTO members (surname, prename, phone, id_user, id_company, job) VALUES('".$data->{members_surname}."', '".$data->{members_prename}."', '".$data->{members_phone}."', ".$newuserid->{0}->{id}.", ".$company->{0}->{id}.", '".$data->{members_job}."');");
-#   my $maildata->{vcode} = $newcode;
-#   my $eml = sendemail->new();
-#   my $mret = $eml->sendemail('user_verification',$newuserid->{0}->{id},$data->{users_email},$maildata,undef);
-#   if ($mret == 0){
-#     $ret->{message} = "Merci,<br/>nous vous avons envoyé un email,avec un code de vérification!<br/>Entrez ce code ci dessous, pour valider votre compte!<br/>en cas de problèmes envoyer un email à <a href=\"mailto:suppoort\@dks.lu\">info\@solana-architecture.lu</a>";
-#     $ret->{messagetype} = "green";
-#     $ret->{page} = "validationcode.tt";
-#   } else {
-#     $self->{db}->exec("UPDATE users set username='".$data->{users_email}."',vcode=null where id=".$newuserid->{0}->{id}." ;");
-#     $ret->{message} = "nous ne pouvons pas envoyer un email à  '".$data->{users_email}."' ! Si cette email n'existe pas, régisterez-vous avec un email existant!<br>en cas de problèemes envoyer un email à  <a href=\"mailto:info\@solana-architecture.lu\">info\@solana-architecture.lu</a>";
-#     $ret->{messagetype} = "red";
-#     $ret->{page} = "register.tt";
-#   }
-#      #$self->{db}->exec("insert into appaccess (id_user) values (".$newuserid->{0}->{id}.");");
-#   # $ret->{messagetype} =  "green";
-  
-#   return $ret;
-# }
 
 
-# sub validateaccount(){
-#   my $self = shift;
-#   my $data = shift;
-#   foreach my $d (%{$data}){
-#     $data->{$d} = $self->{db}->securetext($data->{$d});
-#   }
-  
-#   my $ret->{messagetype} ='red';
-#   my $vcodedata = $self->{db}->querysorted("select id,vcode,username from users where vcode='".$data->{vcode}."';");
-#   if (keys(%{$vcodedata}) == 0){
-#     $ret->{message} = "code inconnue!";
-#     $ret->{page} = "validationcode.tt";
-#   }
-#   my $newpwd = $self->randomstring(12);
-#   my $pwd = sha256_hex($newpwd);
-#   my $maildata->{password} = $newpwd;
-#   my $eml = sendemail->new();
-#   my $newuserid = $self->{db}->querysorted("UPDATE users set userpassword='".$pwd."',vcode=null,regcode=null where id=".$vcodedata->{0}->{id}." returning id,username;");
-#   my $mret = $eml->sendemail('user_registration',$vcodedata->{0}->{id},$vcodedata->{0}->{username},$maildata,undef);
-#   if ($mret == 0){
-#     $ret->{message} = "Merci,<br/>Nous vous avons envoyé un email avec les données nécessaires pour se connecter!";
-#     $ret->{messagetype} = "green";
-#     $ret->{page} = "message.tt";
-#   } else {
-#     $ret->{message} = "NOus n'avons pas pu vous envoyé un email à '".$newuserid->{0}->{username}."'! Si l'addresse email n'existe pas, essayer avec un email existant!";
-#     $ret->{page} = "message.tt";
-#   }
-#   return $ret;
-# }
-
 sub getsession($){
   my $self = shift;
   my $sid = shift;
   my $sql = "select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
 join users us on (us.id=se.id_user)
 left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-where se.id= '".$self->{db}->securetext($sid)."' and se.remote_addr= '".$ENV{REMOTE_ADDR}."' and 
+where se.id= '".$self->{db}->securetext($sid)."' and se.remote_addr= '".$ENV{REMOTE_ADDR}."' and (se.user_agent LIKE '".'%POT%'."' OR se.user_agent LIKE ''".'%iPad%'."'') and 
 us.isblocked is null group by se.id,us.id,ugrp.id;";
  #and se.user_agent LIKE 'POT/%/%/%'
   my $res= $self->{db}->querysorted($sql);
@@ -304,4 +193,119 @@ sub randstr(){
 #   return 1;
 # }
 
+# sub registeruser(){
+#   my $self = shift;
+#   my $data = shift;
+#   my $ret->{messagetype} ='red';
+#   $ret->{message} = "Une erreur c'est produite, essayer plus tard!";
+#   $ret->{page} = "message.tt";
+#   my @reqfields = ("companies_company","terms","users_email","members_phone","members_surname","members_prename","members_job");
+#   my $reqf = 1;
+#   foreach my $rf (@reqfields){
+#     if (!exists($data->{$rf})){
+#       $reqf = 0;
+#     }
+#   }
+#   if ($reqf == 0){
+#     $ret->{message} = "Rempissez tous les champs s.v.p.!";
+#     $ret->{page} =  "register.tt";
+#     return $ret;
+#   }
+#   foreach my $d (%{$data}){
+#     $data->{$d} = $self->{db}->securetext($data->{$d});
+#   }
+  
+#   my $user = $self->{db}->querysorted("select id from users where username='".$data->{users_email}."';");
+#   if (keys(%{$user}) > 0){
+#     $ret->{page} = "register.tt";
+#     $ret->{message} = "Il y existe déjà un utilisateur avec la mème adresse e-mail!";
+#     return $ret; 
+#   }
+  
+#   my $newcode = $self->randomstring(6);
+
+#   my $newuserid = $self->{db}->querysorted("INSERT INTO users (username,vcode) VALUES ('".$data->{users_email}."','".$newcode."') returning id;");
+#   #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where isdefault=true));");
+#   my $company = $self->{db}->querysorted("select id from companies where link=unaccent_string('".$data->{companies_company}."');");
+#   if (keys(%{$company}) == 0 ){
+#     $company = $self->{db}->querysorted("INSERT INTO companies (company,link) VALUES ('".$data->{companies_company}."',unaccent_string('".$data->{companies_company}."')) returning id;");
+#     #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where usergroup='company'));");
+#   }
+#   $self->{db}->exec("INSERT INTO members (surname, prename, phone, id_user, id_company, job) VALUES('".$data->{members_surname}."', '".$data->{members_prename}."', '".$data->{members_phone}."', ".$newuserid->{0}->{id}.", ".$company->{0}->{id}.", '".$data->{members_job}."');");
+#   my $maildata->{vcode} = $newcode;
+#   my $eml = sendemail->new();
+#   my $mret = $eml->sendemail('user_verification',$newuserid->{0}->{id},$data->{users_email},$maildata,undef);
+#   if ($mret == 0){
+#     $ret->{message} = "Merci,<br/>nous vous avons envoyé un email,avec un code de vérification!<br/>Entrez ce code ci dessous, pour valider votre compte!<br/>en cas de problèmes envoyer un email à <a href=\"mailto:suppoort\@dks.lu\">info\@solana-architecture.lu</a>";
+#     $ret->{messagetype} = "green";
+#     $ret->{page} = "validationcode.tt";
+#   } else {
+#     $self->{db}->exec("UPDATE users set username='".$data->{users_email}."',vcode=null where id=".$newuserid->{0}->{id}." ;");
+#     $ret->{message} = "nous ne pouvons pas envoyer un email à  '".$data->{users_email}."' ! Si cette email n'existe pas, régisterez-vous avec un email existant!<br>en cas de problèemes envoyer un email à  <a href=\"mailto:info\@solana-architecture.lu\">info\@solana-architecture.lu</a>";
+#     $ret->{messagetype} = "red";
+#     $ret->{page} = "register.tt";
+#   }
+#      #$self->{db}->exec("insert into appaccess (id_user) values (".$newuserid->{0}->{id}.");");
+#   # $ret->{messagetype} =  "green";
+  
+#   return $ret;
+# }
+
+
+# sub validateaccount(){
+#   my $self = shift;
+#   my $data = shift;
+#   foreach my $d (%{$data}){
+#     $data->{$d} = $self->{db}->securetext($data->{$d});
+#   }
+  
+#   my $ret->{messagetype} ='red';
+#   my $vcodedata = $self->{db}->querysorted("select id,vcode,username from users where vcode='".$data->{vcode}."';");
+#   if (keys(%{$vcodedata}) == 0){
+#     $ret->{message} = "code inconnue!";
+#     $ret->{page} = "validationcode.tt";
+#   }
+#   my $newpwd = $self->randomstring(12);
+#   my $pwd = sha256_hex($newpwd);
+#   my $maildata->{password} = $newpwd;
+#   my $eml = sendemail->new();
+#   my $newuserid = $self->{db}->querysorted("UPDATE users set userpassword='".$pwd."',vcode=null,regcode=null where id=".$vcodedata->{0}->{id}." returning id,username;");
+#   my $mret = $eml->sendemail('user_registration',$vcodedata->{0}->{id},$vcodedata->{0}->{username},$maildata,undef);
+#   if ($mret == 0){
+#     $ret->{message} = "Merci,<br/>Nous vous avons envoyé un email avec les données nécessaires pour se connecter!";
+#     $ret->{messagetype} = "green";
+#     $ret->{page} = "message.tt";
+#   } else {
+#     $ret->{message} = "NOus n'avons pas pu vous envoyé un email à '".$newuserid->{0}->{username}."'! Si l'addresse email n'existe pas, essayer avec un email existant!";
+#     $ret->{page} = "message.tt";
+#   }
+#   return $ret;
+# }
+
+# sub admin_sendpassword(){
+#   my $self = shift;
+#   my $email = shift;
+#   my $ret->{messagetype} ='red';
+#   $ret->{message} = "email inconnue!";
+#   my $sql = "select id,userpassword,surname,prename from users where username='".$self->{db}->securetext($email)."';";
+#   my $ex = $self->{db}->querysorted($sql);
+#   if (keys(%{$ex}) > 0){
+#     my $newpwd = $self->randomstring(12);
+#     my $pwd = sha256_hex($newpwd);
+#     $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id='".$ex->{0}->{id}."';");
+#     my $data->{newpassword} = $newpwd;
+#     $data->{name} = $ex->{0}->{prename}." ".$ex->{0}->{surname};
+#     my $eml = sendemail->new();
+#     my $mret = $eml->sendemail('user_forgotpasswd',$email,$data);
+#     if ($mret != 0){
+#       $ret->{messagetype} ='red';
+#       $ret->{message} = "Pour le moment il n'y est pas possible de recevoir un nouveau mot de passe, <br/>si besoin contacter le support!";
+#       return $ret;
+#     }
+#     $ret->{message} = "nous vous avons envoyés un nouveau mot de passe par email!";
+#     $ret->{messagetype} = "green";
+#   }
+#   return $ret;
+# }
+
 1;
\ No newline at end of file
index 38bfc3a..ace8920 100644 (file)
@@ -1,37 +1,37 @@
-<div id="dlg_newpassword" class="modal">
-  <div class="modal-content animate-top card-4">
-    <header> 
-      <span onclick="document.getElementById('dlg_newpassword').style.display='none'; return false;" 
-       class="button toolbarbtn display-topright" ><span class="icon icon-remove" style="font-size: 18px;"></span></span>
-      <h2>[% lbl.newpassword %]</h2>
-    </header>
-    <div class="container">
-      <div id="newpasswordmsg">
-        <div class="info-panel2">[% lbl.pwdcondition %]</div>
-      </div>
-      <form id="frm_newpassword">
-        <div class="row" style="margin-top: 5px;">
-          <div class="container">
-            <label for="newpwd1" class="label">[% lbl.password %]</label>
-            <div class="cell">
-            <input type="password" class="input  data_newpassword  " id="newpwd1" data-column="newpwd1" style="width: 250px;display: inline-block;"  data-table="newpassword" data-id=""  value=""   />
-            <button class="button actionbtn  text-white" id="btn_newpwd1" onclick="profile.viewpwd('newpwd1');return false;"><span class="icon icon-eye-open" style="font-size: 16pt;"></span></button>
-          </div>
-          </div>
-          <div class="container">
-            <label for="newpwd2" class="label">[% lbl.retypepwd %]</label>
-            <div class="cell">
-            <input type="password" class="input  data_newpassword " id="newpwd2" data-column="newpwd2" style="width: 250px; display: inline-block;" data-table="newpassword" data-id="" value=""/>
-            <button class="button actionbtn text-white" id="btn_newpwd2" onclick="profile.viewpwd('newpwd2');return false;"><span class="icon icon-eye-open" style="font-size: 16pt;"></span></button>
-          </div>
-          </div>
-        </div>
-      </form>
-    </div>
-  <footer>
-        <button class="button theme-light border" onclick="document.getElementById('dlg_newpassword').style.display='none'; return false;"><span class="icon icon-remove"></span>[% lbl.cancel %]</button>
-        <button class="button actionbtn margin" onclick="profile.generatenewpassword();"><span class="icon icon-Save"></span>[% lbl.genpwd %]</button>
-        <button class="button actionbtn margin" onclick="profile.savepwd();"><span class="icon icon-Save"></span>[% lbl.save %]</button>
-   </footer>
-</div>
+<div id="dlg_newpassword" class="modal">\r
+  <div class="modal-content animate-top card-4">\r
+    <header> \r
+      <span onclick="document.getElementById('dlg_newpassword').style.display='none'; return false;" \r
+       class="button toolbarbtn display-topright" ><span class="icon icon-remove" style="font-size: 18px;"></span></span>\r
+      <h2>[% lbl.newpassword %]</h2>\r
+    </header>\r
+    <div class="container">\r
+      <div id="newpasswordmsg">\r
+        <div class="info-panel2">[% lbl.pwdcondition %]</div>\r
+      </div>\r
+      <form id="frm_newpassword">\r
+        <div class="row" style="margin-top: 5px;">\r
+          <div class="container">\r
+            <label for="newpwd1" class="label">[% lbl.password %]</label>\r
+            <div class="cell">\r
+            <input type="password" class="input  data_newpassword  " id="newpwd1" data-column="newpwd1" style="width: 250px;display: inline-block;"  data-table="newpassword" data-id=""  value=""   />\r
+            <button class="button actionbtn  text-white" id="btn_newpwd1" onclick="profile.viewpwd('newpwd1');return false;"><span class="icon icon-eye-open" style="font-size: 16pt;"></span></button>\r
+          </div>\r
+          </div>\r
+          <div class="container">\r
+            <label for="newpwd2" class="label">[% lbl.retypepwd %]</label>\r
+            <div class="cell">\r
+            <input type="password" class="input  data_newpassword " id="newpwd2" data-column="newpwd2" style="width: 250px; display: inline-block;" data-table="newpassword" data-id="" value=""/>\r
+            <button class="button actionbtn text-white" id="btn_newpwd2" onclick="profile.viewpwd('newpwd2');return false;"><span class="icon icon-eye-open" style="font-size: 16pt;"></span></button>\r
+          </div>\r
+          </div>\r
+        </div>\r
+      </form>\r
+    </div>\r
+  <footer>\r
+        <button class="button theme-light border" onclick="document.getElementById('dlg_newpassword').style.display='none'; return false;"><span class="icon icon-remove"></span>[% lbl.cancel %]</button>\r
+        <button class="button actionbtn margin" onclick="profile.generatenewpassword();"><span class="icon icon-Save"></span>[% lbl.genpwd %]</button>\r
+        <button class="button actionbtn margin" onclick="profile.savepwd();"><span class="icon icon-Save"></span>[% lbl.save %]</button>\r
+   </footer>\r
+</div>\r
 </div>
\ No newline at end of file
index cd18c85..8ed4aa3 100644 (file)
@@ -1,4 +1,4 @@
-[% appversion='1.0.28' %]
+[% appversion='1.0.27' %]
 [% minify = '' %]
 [% PROCESS "lang/${lang}.tt" %]
 <!DOCTYPE html>
index 9e6ef99..aa78a89 100644 (file)
-[% lbl = { 
-  "pot_long" => "Plan d'organisation du travail",
-  "weeklytemplates" => "Wochen-Vorlagen",
-  "template" => "Vorlagen",
-  "staff" => "Arbeitnehmer",
-  "sectorconfig" => "Konfiguration Sektor",
-  "sectorconfigpot" => "sektorielle Konfiguration POT",
-  "periodsconfig" => "Konfiguration Periode",
-  "sectorhoursconfig" => "sektorielle Stunden Konfiguration" ,
-  "back" => "zurück",
-  "delete" => "löschen",
-  "duplicate" => "dupl.",
-  "add" => "neu",
-  "rename" => "umbenennen",
-  "edit" => "bearb.",
-  "copy" => "kopiern",
-  "paste" => "einfügen",
-  "basedata" => "Stammdaten",
-  "periods" => "Perioden",
-  "refperiods" => "Referenz-Perioden",
-  "pdf" => "PDF",
-  "finalstatement" => "SchlussAbrechnung",
-  "finalstatementpot" => "POT Schluss<br/>Abrechnung",
-  "statement" => "Abrechnung",
-  "companyunit" => "Unternhemen / Standort",
-  "logout" => "Logout",
-  "modules" => "Module",
-  "staffcount" => "Arbeitnehmer Anz.",
-  "config" => "Konfiguration",
-  "company" => "Unternehmen",
-  "terms" => "AGB",
-  "administration" => "Administration",
-  "companies" => "Unternehmen",
-  "sectors" => "Sektoren",
-  "sector" => "Sektor",
-  "vacancydays" => "Feiertage",
-  "vacancytypes" => "Urlaubs-Bezeichnungen",
-  "vacancytype" => "Urlaubs-Bezeichnung",
-  "vacancy" => "Urlaub",
-  "recuperationtype" => "Art des Stunden-Ausgleichs",
-  "recuperation" => "Stunden-Ausgleich",
-  "hours" => "Stunden",
-  "infohours" => "Stunden-info",
-  "acceptterms" => "Ich habe die AGB gelesen und bin einverstanden",
-  "users" => "Benutzer",
-  "newpassword" => "neues Passwort",
-  "changelogin" => "Login ändern",
-  "editday" => "Tag bearbeiten",
-  "workhours" => "Arbeitsstunden",
-  "start" => "Anfang",
-  "startdate" => "Anfangs-Datum",
-  "enddate" => "End-Datum",
-  "end" => "Ende",
-  "total" => "Total",
-  "totalday" => "Total tag",
-  "pausehours" => "Pausen-Zeiten",
-  "totalpause" => "Total Pause",
-  "cancel" => "Abbrechen",
-  "save" => "Speichern",
-  "changetemplate" => "changer modèle",
-  "selecttemplate" => "Selection du modèle",
-  "commit" => "Validieren und Abschließen",
-  "pottemplate" => "POT (Vorlage)",
-  "name" => "Name",
-  "staffgroupname" => "Name der Abteilung",
-  "prename" => "Vorname",
-  "companytype" => "Rechtsform",
-  "companyunitname" => "Name der Firma / Geschäftsstelle",
-  "matricule" => "Matrikel-Nr.",
-  "birthdate" => "Geburtsdatum",
-  "job" => "Job / Position",
-  "department" => "Abteilung",
-  "departments" => "Abteilungen",
-  "departmentaccess" => "Abteilungen (Zugriff)",
-  "timetracker" => "Stechuhr",
-  "no" => "Nein",
-  "yes" => "Ja",
-  "address" => "Addresse",
-  "zip" => "PLZ",
-  "city" => "Ort",
-  "country" => "Land",
-  "phone" => "Telefon",
-  "email" => "E-Mail",
-  "contractdata" => "Vertrags-Daten",
-  "renewperiods" => "Perioden  aktualisieren",
-  "weekhours" => "Stunden / Woche",
-  "weekhours_short" => "h/Woche",
-  "minmaxvalues" => "Min/max Werte",
-  "maxdayhours" => "max h/Tag",
-  "maxweekhours" => "max h/Woche",
-  "maxcutoff" => "max Unterbrechung",
-  "maxtotal" => "max Total",
-  "mindailyfreehours" => "min Stunden Ruhezeit",
-  "mindailyouttime" => "min Stunden Ruhezeit",
-  "mindailyouttime2" => "min Stunden<br/>Ruhezeit",
-  "daytotal" => "Total Tag",
-  "weekdays" => "Tage / Woche",
-  "weekdays_short" => "t/Woche",
-  "addstaffmember" => "neuer Arbeitnehmer",
-  "timetracks" => "Zeitstempel",
-  "clean" => "leeren",
-  "cutoff" => "Unterbrechung",
-  "loginlink" => "EInlogggen",
-  "username" => "Login",
-  "password" => "Passwort",
-  "clientaccess" => "Kunden-Login",
-  "login" => "Einloggen",
-  "forgotpassword" => "Passwort vergessen",
-  "user" => "Benutzer",
-  "sendpassword" => "Passwort schicken",
-  "rcs" => "No. Handelsregister",
-  "vatnumber" => "Ust-Id International",
-  "dbschema" => "Datenbnak-Schema",
-  "duration" => "Dauer",
-  "unit" => "EInheit",
-  "payedpauses" => "bezahlte Pausen",
-  "pauses" => "Pausen",
-  "type" => "Typ",
-  "url" => "URL",
-  "lastsync" => "letzte Aktualisierung",
-  "accessblocked" => "Login blockieren",
-  "useraccess" => "Benutzer-Zugriff",
-  "datasetaccess" => "Datensatz-Zugriff",
-  "staffgroupaccess" => "Abteilungs-Zugriff",
-  "dataset" => "Datensatz",
-  "usernamechange" => "Login ändern",
-  "newusername" => "neuer Login",
-  "edittimetracks" => "Stechuhr bearbeiten",
-  "infoouttimes" => "Info Ruhezeiten davor/danach",
-  "freetimebefore" => "Ruhezeit davor",
-  "freetimeafter" => "Ruhezeit danach",
-  "statementbeforevalidation" => "Abrechnung vor Validierung",
-  "reopen" => "Freischalten",
-  "transferhours" => "zu übertragende Stunden",
-  "transferhours1_5" => "zu übertragende Stunden (x1,5)",
-  "weeklyavg" => "Wochen Durchschnitt",
-  "transferfreehours" => "zu übertragende Stunden<br/>Stunden-Ausgleich",
-  "plushourstopayplus40" => "Überstunden<br/>zu bezahlen mit +40%",
-  "hourstopayplus40" => "zu vergütenden Stunden (+40%)",
-  "hourstopayonly40" => "Überstunden<br/>zu beahlen (40%)",
-  "ok" => "OK",
-  "waitmsg" => "Bitte warten!",
-  "close" => "Schließen",
-  "keepvacancy" => "Urlaubs-Einstellungen behalten",
-  "keeprecuperation" => "Stundenausgleich-Einstellungen behalten",
-  "replace" => "austauschen",
-  "qdeletecompany" => "ausgewählte Firma wirklich löschen?",
-  "ddeletestaffgroup" => "ausgewählte Abteilung wirklich löschen?",
-  "qdeleteuser" => "ausgewählte Benutzer wirklich löschen?",
-  "qdeletehours" => "ausgewählte Stunden wirklich löschen?",
-  "qdeletestaff" => "ausgewählte Arbeitnehmer wirklich löschen?",
-  "qdeletedata" => "ausgewählte Daten  wirklich löschen?",
-  "qdeleteworkplan" => "ausgewählte Vorlage wirklich löschen?"
-  "allfieldsrequired" => "bitte alle Felder ausfüllen!",
-  "monday" => "Montag",
-  "tuesday" => "Dienstag",
-  "wednesday" => "Mittwoch",
-  "thursday" => "Donnerstag",
-  "friday" => "Freitag",
-  "saturday" => "Samstag",
-  "sunday" => "Sonntag",
-  "contract" => "Vertrag",
-  "work" => "Arbeit",
-  "contractrequired" => "Alle Felder sind erfordert (außer \"End-Datum\")!",
-  "recuperation_short" => "Ausgleich",
-  "vacancyill2" => "Krank",
-  "statementtransfered2" => "übertragene<br/>Abrechnung",
-  "supphourspayed2" => "bezahlte<br/>Überstunden",
-  "supp44h2" => "+Urlaub wg.<br/>+44 h",
-  "suppsunwork" => "+Urlaub wg.<br/>Sonntagsarbeit",
-  "avgweek_short" => "Wochen<br/>Durchschnitt",
-  "validated" => "validiert",
-  "diffcontract" => "Unterschied<br/>Vertrag",
-  "weekhours2" => "Arbeits-<br/>Stunden",
-  "worktotal2" => "Total<br/>Arbeit",
-  "standard" => "Standard",
-  "pausehours2" => "Pausen",
-  "totalpause2" => "Total<br/>PAuse",
-  "day" => "Tag",
-  "description" => "Beschreibung",
-  "msgdel_stdhours" => "Die Standard-Vorlage  kann nicht gelöscht werden!",
-  "newpassword" => "Neues Passwort",
-  "retypepwd" => "Neues Passwort wiederholen",
-  "pwdcondition" => "Passwörter müssen mindstens 10 Zeichen lang seien und mindestens 1 Grossbuchstabe, 1 Klein-Buchstabe und 1 Zahl enthalten",
-  "genpwd" => "Passwort vorschlagen",
-  "usergroup" => "Berechtigungen",
-  "language" => "Sprache"
+[% lbl = { \r
+  "pot_long" => "Plan d'organisation du travail",\r
+  "weeklytemplates" => "Wochen-Vorlagen",\r
+  "template" => "Vorlagen",\r
+  "staff" => "Arbeitnehmer",\r
+  "sectorconfig" => "Konfiguration Sektor",\r
+  "sectorconfigpot" => "sektorielle Konfiguration POT",\r
+  "periodsconfig" => "Konfiguration Periode",\r
+  "sectorhoursconfig" => "sektorielle Stunden Konfiguration" ,\r
+  "back" => "zurück",\r
+  "delete" => "löschen",\r
+  "duplicate" => "dupl.",\r
+  "add" => "neu",\r
+  "rename" => "umbenennen",\r
+  "edit" => "bearb.",\r
+  "copy" => "kopiern",\r
+  "paste" => "einfügen",\r
+  "basedata" => "Stammdaten",\r
+  "periods" => "Perioden",\r
+  "refperiods" => "Referenz-Perioden",\r
+  "pdf" => "PDF",\r
+  "finalstatement" => "SchlussAbrechnung",\r
+  "finalstatementpot" => "POT Schluss<br/>Abrechnung",\r
+  "statement" => "Abrechnung",\r
+  "companyunit" => "Unternhemen / Standort",\r
+  "logout" => "Logout",\r
+  "modules" => "Module",\r
+  "staffcount" => "Arbeitnehmer Anz.",\r
+  "config" => "Konfiguration",\r
+  "company" => "Unternehmen",\r
+  "terms" => "AGB",\r
+  "administration" => "Administration",\r
+  "companies" => "Unternehmen",\r
+  "sectors" => "Sektoren",\r
+  "sector" => "Sektor",\r
+  "vacancydays" => "Feiertage",\r
+  "vacancytypes" => "Urlaubs-Bezeichnungen",\r
+  "vacancytype" => "Urlaubs-Bezeichnung",\r
+  "vacancy" => "Urlaub",\r
+  "recuperationtype" => "Art des Stunden-Ausgleichs",\r
+  "recuperation" => "Stunden-Ausgleich",\r
+  "hours" => "Stunden",\r
+  "infohours" => "Stunden-info",\r
+  "acceptterms" => "Ich habe die AGB gelesen und bin einverstanden",\r
+  "users" => "Benutzer",\r
+  "newpassword" => "neues Passwort",\r
+  "changelogin" => "Login ändern",\r
+  "editday" => "Tag bearbeiten",\r
+  "workhours" => "Arbeitsstunden",\r
+  "start" => "Anfang",\r
+  "startdate" => "Anfangs-Datum",\r
+  "enddate" => "End-Datum",\r
+  "end" => "Ende",\r
+  "total" => "Total",\r
+  "totalday" => "Total tag",\r
+  "pausehours" => "Pausen-Zeiten",\r
+  "totalpause" => "Total Pause",\r
+  "cancel" => "Abbrechen",\r
+  "save" => "Speichern",\r
+  "changetemplate" => "changer modèle",\r
+  "selecttemplate" => "Selection du modèle",\r
+  "commit" => "Validieren und Abschließen",\r
+  "pottemplate" => "POT (Vorlage)",\r
+  "name" => "Name",\r
+  "staffgroupname" => "Name der Abteilung",\r
+  "prename" => "Vorname",\r
+  "companytype" => "Rechtsform",\r
+  "companyunitname" => "Name der Firma / Geschäftsstelle",\r
+  "matricule" => "Matrikel-Nr.",\r
+  "birthdate" => "Geburtsdatum",\r
+  "job" => "Job / Position",\r
+  "department" => "Abteilung",\r
+  "departments" => "Abteilungen",\r
+  "departmentaccess" => "Abteilungen (Zugriff)",\r
+  "timetracker" => "Stechuhr",\r
+  "no" => "Nein",\r
+  "yes" => "Ja",\r
+  "address" => "Addresse",\r
+  "zip" => "PLZ",\r
+  "city" => "Ort",\r
+  "country" => "Land",\r
+  "phone" => "Telefon",\r
+  "email" => "E-Mail",\r
+  "contractdata" => "Vertrags-Daten",\r
+  "renewperiods" => "Perioden  aktualisieren",\r
+  "weekhours" => "Stunden / Woche",\r
+  "weekhours_short" => "h/Woche",\r
+  "minmaxvalues" => "Min/max Werte",\r
+  "maxdayhours" => "max h/Tag",\r
+  "maxweekhours" => "max h/Woche",\r
+  "maxcutoff" => "max Unterbrechung",\r
+  "maxtotal" => "max Total",\r
+  "mindailyfreehours" => "min Stunden Ruhezeit",\r
+  "mindailyouttime" => "min Stunden Ruhezeit",\r
+  "mindailyouttime2" => "min Stunden<br/>Ruhezeit",\r
+  "daytotal" => "Total Tag",\r
+  "weekdays" => "Tage / Woche",\r
+  "weekdays_short" => "t/Woche",\r
+  "addstaffmember" => "neuer Arbeitnehmer",\r
+  "timetracks" => "Zeitstempel",\r
+  "clean" => "leeren",\r
+  "cutoff" => "Unterbrechung",\r
+  "loginlink" => "EInlogggen",\r
+  "username" => "Login",\r
+  "password" => "Passwort",\r
+  "clientaccess" => "Kunden-Login",\r
+  "login" => "Einloggen",\r
+  "forgotpassword" => "Passwort vergessen",\r
+  "user" => "Benutzer",\r
+  "sendpassword" => "Passwort schicken",\r
+  "rcs" => "No. Handelsregister",\r
+  "vatnumber" => "Ust-Id International",\r
+  "dbschema" => "Datenbnak-Schema",\r
+  "duration" => "Dauer",\r
+  "unit" => "EInheit",\r
+  "payedpauses" => "bezahlte Pausen",\r
+  "pauses" => "Pausen",\r
+  "type" => "Typ",\r
+  "url" => "URL",\r
+  "lastsync" => "letzte Aktualisierung",\r
+  "accessblocked" => "Login blockieren",\r
+  "useraccess" => "Benutzer-Zugriff",\r
+  "datasetaccess" => "Datensatz-Zugriff",\r
+  "staffgroupaccess" => "Abteilungs-Zugriff",\r
+  "dataset" => "Datensatz",\r
+  "usernamechange" => "Login ändern",\r
+  "newusername" => "neuer Login",\r
+  "edittimetracks" => "Stechuhr bearbeiten",\r
+  "infoouttimes" => "Info Ruhezeiten davor/danach",\r
+  "freetimebefore" => "Ruhezeit davor",\r
+  "freetimeafter" => "Ruhezeit danach",\r
+  "statementbeforevalidation" => "Abrechnung vor Validierung",\r
+  "reopen" => "Freischalten",\r
+  "transferhours" => "zu übertragende Stunden",\r
+  "transferhours1_5" => "zu übertragende Stunden (x1,5)",\r
+  "weeklyavg" => "Wochen Durchschnitt",\r
+  "transferfreehours" => "zu übertragende Stunden<br/>Stunden-Ausgleich",\r
+  "plushourstopayplus40" => "Überstunden<br/>zu bezahlen mit +40%",\r
+  "hourstopayplus40" => "zu vergütenden Stunden (+40%)",\r
+  "hourstopayonly40" => "Überstunden<br/>zu beahlen (40%)",\r
+  "ok" => "OK",\r
+  "waitmsg" => "Bitte warten!",\r
+  "close" => "Schließen",\r
+  "keepvacancy" => "Urlaubs-Einstellungen behalten",\r
+  "keeprecuperation" => "Stundenausgleich-Einstellungen behalten",\r
+  "replace" => "austauschen",\r
+  "qdeletecompany" => "ausgewählte Firma wirklich löschen?",\r
+  "ddeletestaffgroup" => "ausgewählte Abteilung wirklich löschen?",\r
+  "qdeleteuser" => "ausgewählte Benutzer wirklich löschen?",\r
+  "qdeletehours" => "ausgewählte Stunden wirklich löschen?",\r
+  "qdeletestaff" => "ausgewählte Arbeitnehmer wirklich löschen?",\r
+  "qdeletedata" => "ausgewählte Daten  wirklich löschen?",\r
+  "qdeleteworkplan" => "ausgewählte Vorlage wirklich löschen?"\r
+  "allfieldsrequired" => "bitte alle Felder ausfüllen!",\r
+  "monday" => "Montag",\r
+  "tuesday" => "Dienstag",\r
+  "wednesday" => "Mittwoch",\r
+  "thursday" => "Donnerstag",\r
+  "friday" => "Freitag",\r
+  "saturday" => "Samstag",\r
+  "sunday" => "Sonntag",\r
+  "contract" => "Vertrag",\r
+  "work" => "Arbeit",\r
+  "contractrequired" => "Alle Felder sind erfordert (außer \"End-Datum\")!",\r
+  "recuperation_short" => "Ausgleich",\r
+  "vacancyill2" => "Krank",\r
+  "statementtransfered2" => "übertragene<br/>Abrechnung",\r
+  "supphourspayed2" => "bezahlte<br/>Überstunden",\r
+  "supp44h2" => "+Urlaub wg.<br/>+44 h",\r
+  "suppsunwork" => "+Urlaub wg.<br/>Sonntagsarbeit",\r
+  "avgweek_short" => "Wochen<br/>Durchschnitt",\r
+  "validated" => "validiert",\r
+  "diffcontract" => "Unterschied<br/>Vertrag",\r
+  "weekhours2" => "Arbeits-<br/>Stunden",\r
+  "worktotal2" => "Total<br/>Arbeit",\r
+  "standard" => "Standard",\r
+  "pausehours2" => "Pausen",\r
+  "totalpause2" => "Total<br/>PAuse",\r
+  "day" => "Tag",\r
+  "description" => "Beschreibung",\r
+  "msgdel_stdhours" => "Die Standard-Vorlage  kann nicht gelöscht werden!",\r
+  "newpassword" => "Neues Passwort",\r
+  "retypepwd" => "Neues Passwort wiederholen",\r
+  "pwdcondition" => "Passwörter müssen mindstens 10 Zeichen lang seien und mindestens 1 Grossbuchstabe, 1 Klein-Buchstabe und 1 Zahl enthalten",\r
+  "genpwd" => "Passwort vorschlagen",\r
+  "usergroup" => "Berechtigungen",\r
+  "language" => "Sprache"\r
  } %]
\ No newline at end of file
index c20d16b..0942977 100644 (file)
   "friday" => "vendredi",
   "saturday" => "samedi",
   "sunday" => "dimanche",
-  "contractrequired" => "Tous les champs sauf sans requis (sauf 'date fin')!",
+  "contractrequired" => "Tous les champs sauf sans requis (sauf \"date fin\")!",
   "contract" => "Contrat",
   "work" => "Travail",
   "recuperation_short" => "Récup",
index bc21276..b615332 100644 (file)
@@ -31,29 +31,5 @@ let users ={
       //.log(data);
       users.tbl.setData(data.result.sqldata);
     });
-  },
-  // confirmchangepassword: function(){
-  //   /* @preserve[% IF session.usergroup == 'admin' ||  session.usergroup == 'manager' %]*/
-  //   let sel =users.tbl.getSelectedData();
-  //   if (sel[0]){
-  //     showinfodlg(">[% lbl.newpassword %]","Êtes vous sûre changer le [% lbl.password %]?",users.setnewpassword,{},"<span class=\"icon-Save\"></span>[% lbl.yes %]","<span class=\"icon-remove\"></span>[% lbl.no %]");
-  //   }
-  //   /* @preserve[% END %]*/
-  // }, 
-  // setnewpassword: function(){
-  //   /* @preserve[% IF session.usergroup == 'admin' ||  session.usergroup == 'manager' %]*/
-  //   let sel =users.tbl.getSelectedData();
-  //   if (sel[0]){
-  //   let fndata = {"fn":"setnewpassword","email":sel[0].username};
-  //   postData("db.cgi",fndata).then(data => {
-  //     document.getElementById('dlg_users').style.display='none';
-  //     if (data && data.result.data.password){
-  //       showmessagedlg(">[% lbl.newpassword %]!",'<div class="container"><input class="input" type="text" value="'+data.result.data.username+'" readonly> <label class="label" for="staffgroups_groupname">Utilisateur</label></div><div class="container"><input class="input" type="text" value="'+data.result.data.password+'" readonly> <label class="label" for="staffgroups_groupname">[% lbl.newpassword %]</label></div>');
-  //     }else {
-  //       showmessagedlg("Erreur!","Une erreur c'est produite pour l'envoie d'un >[% lbl.newpassword %]!");
-  //     }
-  //   });
-  // }
-  //   /* @preserve[% END %]*/
-  // }
+  }
 }
index 670ec63..76baee3 100644 (file)
@@ -1,79 +1,79 @@
-let profile = {
-  reftbl: null,
-generatenewpassword: function(){
-  let fndata = {"fn":"genpwd"};
-  postData("db.cgi",fndata).then(data => {
-    if (data && data.result.data.password){
-      document.getElementById("newpwd1").value=data.result.data.password;
-      profile.viewpwd('newpwd1',"text");
-
-      document.getElementById("newpwd2").value=data.result.data.password; 
-    }
-  });
-},
-showdlgnewpassword: function(tbl=false){
-  let sel = [];
-  if (tbl == true){
-    sel =profile.reftbl.getSelectedData();
-    if (sel.length == 0){
-      return false;
-    }
-  } 
-  document.getElementById("newpwd1").value = "";
-  document.getElementById("newpwd2").value = "";
-  profile.viewpwd('newpwd1',"pwd");
-  profile.viewpwd('newpwd2',"pwd");
-  app.viewdialog("newpassword");
-  return false;
-},
-validatepwd: function(){
-  let pwd1 = document.getElementById("newpwd1").value;
-  let pwd2 = document.getElementById("newpwd1").value;
-  let res = true;
-  if (pwd1 != pwd2) { res =  false; console.log(pwd1 + "!=" +pwd2);}
-  if (pwd1.length < 10 || pwd2.length < 10) { res=false; console.log("pwd length mismatch!");}
-  if (/[a-z]/.test(pwd1) == false || /[a-z]/.test(pwd2) == false) {res = false; console.log("lower letters mismatch!");}
-  if (/[A-Z]/.test(pwd1) == false || /[A-Z]/.test(pwd2) == false) {res = false; console.log("upper letters mismatch!");}
-  if (/[0-9]/.test(pwd1) == false || /[0-9]/.test(pwd2) == false) { res =false; console.log("number letters mismatch!");}
-  return res;
-},
-viewpwd(id,force){
-  
-  if (force == "text"){
-    document.getElementById(id).type = "text";
-    document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-close"></span>';
-  } else if (force == "pwd"){
-    document.getElementById(id).type = "password";
-    document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-open"></span>';
-  }else {
-    var fldtype = document.getElementById(id).type;
-    if (fldtype == "text"){
-      document.getElementById(id).type = "password";
-      document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-open"></span>';
-    } else {
-      document.getElementById(id).type = "text";
-      document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-close"></span>';
-    }
-  }
-  
-  return false;
-},
-savepwd: function(){
-  let valp = profile.validatepwd();
-  let sel = [];
-  if (profile.reftbl){
-    sel =profile.reftbl.getSelectedData();
-    console.log("has reftbl!");
-  } else {
-    sel.push({id:"[% session.id %]"});
-    console.log("set own profile pwd!");
-  }
-  if (sel[0] && valp==true){
-    postData("db.cgi",{"fn":"savenewpwd","pwd":document.getElementById("newpwd1").value,"iduser":sel[0].id}).then(data => {
-      app.closedlg("dlg_newpassword");
-      dataform.formsaved({});
-    })
-  }
-  return false;
-}
+let profile = {\r
+  reftbl: null,\r
+generatenewpassword: function(){\r
+  let fndata = {"fn":"genpwd"};\r
+  postData("db.cgi",fndata).then(data => {\r
+    if (data && data.result.data.password){\r
+      document.getElementById("newpwd1").value=data.result.data.password;\r
+      profile.viewpwd('newpwd1',"text");\r
+\r
+      document.getElementById("newpwd2").value=data.result.data.password; \r
+    }\r
+  });\r
+},\r
+showdlgnewpassword: function(tbl=false){\r
+  let sel = [];\r
+  if (tbl == true){\r
+    sel =profile.reftbl.getSelectedData();\r
+    if (sel.length == 0){\r
+      return false;\r
+    }\r
+  } \r
+  document.getElementById("newpwd1").value = "";\r
+  document.getElementById("newpwd2").value = "";\r
+  profile.viewpwd('newpwd1',"pwd");\r
+  profile.viewpwd('newpwd2',"pwd");\r
+  app.viewdialog("newpassword");\r
+  return false;\r
+},\r
+validatepwd: function(){\r
+  let pwd1 = document.getElementById("newpwd1").value;\r
+  let pwd2 = document.getElementById("newpwd1").value;\r
+  let res = true;\r
+  if (pwd1 != pwd2) { res =  false; console.log(pwd1 + "!=" +pwd2);}\r
+  if (pwd1.length < 10 || pwd2.length < 10) { res=false; console.log("pwd length mismatch!");}\r
+  if (/[a-z]/.test(pwd1) == false || /[a-z]/.test(pwd2) == false) {res = false; console.log("lower letters mismatch!");}\r
+  if (/[A-Z]/.test(pwd1) == false || /[A-Z]/.test(pwd2) == false) {res = false; console.log("upper letters mismatch!");}\r
+  if (/[0-9]/.test(pwd1) == false || /[0-9]/.test(pwd2) == false) { res =false; console.log("number letters mismatch!");}\r
+  return res;\r
+},\r
+viewpwd(id,force){\r
+  \r
+  if (force == "text"){\r
+    document.getElementById(id).type = "text";\r
+    document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-close"></span>';\r
+  } else if (force == "pwd"){\r
+    document.getElementById(id).type = "password";\r
+    document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-open"></span>';\r
+  }else {\r
+    var fldtype = document.getElementById(id).type;\r
+    if (fldtype == "text"){\r
+      document.getElementById(id).type = "password";\r
+      document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-open"></span>';\r
+    } else {\r
+      document.getElementById(id).type = "text";\r
+      document.getElementById("btn_" + id).innerHTML='<span class="icon icon-eye-close"></span>';\r
+    }\r
+  }\r
+  \r
+  return false;\r
+},\r
+savepwd: function(){\r
+  let valp = profile.validatepwd();\r
+  let sel = [];\r
+  if (profile.reftbl){\r
+    sel =profile.reftbl.getSelectedData();\r
+    console.log("has reftbl!");\r
+  } else {\r
+    sel.push({id:"[% session.id %]"});\r
+    console.log("set own profile pwd!");\r
+  }\r
+  if (sel[0] && valp==true){\r
+    postData("db.cgi",{"fn":"savenewpwd","pwd":document.getElementById("newpwd1").value,"iduser":sel[0].id}).then(data => {\r
+      app.closedlg("dlg_newpassword");\r
+      dataform.formsaved({});\r
+    })\r
+  }\r
+  return false;\r
+}\r
 }
\ No newline at end of file
index 265a2a2..71eaac9 100644 (file)
@@ -2,7 +2,7 @@
 <div class="display-container">
   <div class="bar toolbar">
     <a class="bar-item toolbarbtn" href="[% abspath %]index.html"><span class="icon icon-back" style="font-size: 16px;"></span>[% lbl.back %]</a>
-    <div class="bar-item PageHeadTitle">[% lbl.titles.sectorconfig %]</div>
+    <div class="bar-item PageHeadTitle">[% lbl.sectorconfig %]</div>
     [% IF (session.usergroup == 'admin') %]
     <!--<button class="bar-item toolbarbtn" onclick="companies.setview('basedata');"><span class="icon icon-staff" style="font-size: 16px;"></span>[% lbl.basedata %]</button> 
     <button class="bar-item toolbarbtn" onclick="users.gettbldata();companies.setview('users');"><span class="icon icon-user" style="font-size: 16px;"></span>[% lbl.users %]</button> 
@@ -18,7 +18,7 @@
 <div class="display-container">
   <div class="bar moduletoolbar">
           <div class="bar-item SubHeadTitle">
-            [% lbl.titles.sectorconfigpot %]
+            [% lbl.sectorconfigpot %]
           </div>
           <!--<button class="bar-item toolbarbtn right" onclick="worktimes.remove(); return false;" id="btn_delete_staffcontract"><span class="icon icon-remove text-red" style="font-size: 16px;"></span>[% lbl.delete %]</button> 
           <button class="bar-item toolbarbtn right" onclick="worktimes.edit(); return false;"><span class="icon icon-edit" style="font-size: 16px;"></span>[% lbl.edit %]</button>
index 4788eed..f72bdbf 100644 (file)
@@ -2,7 +2,7 @@
 <div class="display-container">
   <div class="bar toolbar">
    <a class="bar-item toolbarbtn" href="[% abspath %]index.html"><span class="icon icon-back" style="font-size: 16px;"></span>[% lbl.back %]</a>
-    <div class="bar-item PageHeadTitle">[% lbl.titles.staff %]</div>
+    <div class="bar-item PageHeadTitle">[% lbl.staff %]</div>
     <button class="bar-item toolbarbtn" onclick="staff.setview('basedata');"><span class="icon icon-staff" style="font-size: 16px;"></span>[% lbl.basedata %]</button>
     <button class="bar-item toolbarbtn" onclick="staff.setview('periods');"><span class="icon icon-calendar" style="font-size: 16px;"></span>[% lbl.periods %]</button>
     [% IF session.usergroup != 'teamleader' %]
diff --git a/app/tmpl/module/timetracker/pnl_timertracker.tt b/app/tmpl/module/timetracker/pnl_timertracker.tt
new file mode 100644 (file)
index 0000000..7c538db
--- /dev/null
@@ -0,0 +1,67 @@
+<div class="display-container">\r
+  <form id="frm_timetracker">\r
+  <div class="row">\r
+  \r
+    <div class="cell" style="width: 400px;">\r
+      <label class="label" for="timetracker_type">Type</label>\r
+      <select class="select border data_timetracker" data-column="type" data-id="" data-selected="" data-table="timetracker" id="timetracker_type"></select>\r
+    </div>\r
+    <div class="cell" style="width: 400px;">\r
+      <label class="label" for="timetracker_name">Name</label>\r
+      <input class="input border text data_timetracker" data-column="name" data-id="" data-table="timetracker" id="timetracker_name"  onblur="dataform.savefield(this);" type="text">\r
+    </div>\r
+    <div class="cell" style="width: 400px;">\r
+      <label class="label" for="timetracker_stampstartlimit">Limit (minutes)</label>\r
+      <input class="input border text data_timetracker number" data-column="stampstartlimit" data-id="" data-table="timetracker" id="timetracker_stampstartlimit"  onblur="dataform.savefield(this);" type="number">\r
+    </div>\r
+  </div>\r
+  <div class="row">\r
+    <div class="col">\r
+    <fieldset>\r
+      <legend>Network</legend>\r
+      <div class="cell" style="width: 400px;">\r
+        <label class="label" for="timetracker_networktype">Network Type</label>\r
+        <select class="select border data_timetracker" data-column="nettype" data-id="" data-selected="" data-table="timetracker" id="timetracker_networktype">\r
+          <option value="dhcp">DHCP</option>\r
+          <option value="static">Static</option>\r
+        </select>\r
+      </div>\r
+      <div class="cell" style="width: 400px;">\r
+        <label class="label" for="timetracker_netip">IP</label>\r
+        <input class="input border text data_timetracker" data-column="netip" data-id="" data-table="timetracker" id="timetracker_netip"  onblur="dataform.savefield(this);" type="text">\r
+      </div>\r
+      <div class="cell" style="width: 400px;">\r
+        <label class="label" for="timetracker_netsubnet">Subnet</label>\r
+        <input class="input border text data_timetracker" data-column="netsubnet" data-id="" data-table="timetracker" id="timetracker_netsubnet"  onblur="dataform.savefield(this);" type="text">\r
+      </div>\r
+      <div class="cell" style="width: 400px;">\r
+        <label class="label" for="timetracker_netgateway">Gateway</label>\r
+        <input class="input border text data_timetracker" data-column="netgateway" data-id="" data-table="timetracker" id="timetracker_netgateway"  onblur="dataform.savefield(this);" type="text">\r
+      </div>\r
+      <div class="cell" style="width: 400px;">\r
+        <label class="label" for="timetracker_netdns">DNS</label>\r
+        <input class="input border text data_timetracker" data-column="netdns" data-id="" data-table="timetracker" id="timetracker_netdns"  onblur="dataform.savefield(this);" type="text">\r
+      </div>\r
+    </fieldset>\r
+    </div>\r
+    <div class="col">\r
+      <div class="bar moduletoolbar">\r
+        <div class="bar-item PageSubTitle">WLAN</div>\r
+        <button class="bar-item toolbarbtn right" onclick="timetracker.confirmRemoveWLAN();"><span class="icon-trash" style="font-size: 17px;"></span>[% lbl.delete %]</button>\r
+        <button class="bar-item toolbarbtn right" onclick="timetracker.editWLAN();"><span class="icon-edit" style="font-size: 17px;"></span>[% lbl.edit %]</button>\r
+        <button class="bar-item toolbarbtn right" onclick="timetracker.addWLAN();"><span class="icon-plus" style="font-size: 17px;"></span>[% lbl.add %]</button>\r
+      </div>\r
+      <div id="tbl_timetrackerwlan"></div>\r
+    </div>\r
+  </div>\r
+  <div class="row">\r
+    <div class="bar moduletoolbar">\r
+      <div class="bar-item PageSubTitle">Openvpn</div>\r
+      <button class="bar-item toolbarbtn right" onclick="timetracker.confirmRemoveOVPN();"><span class="icon-trash" style="font-size: 17px;"></span>[% lbl.delete %]</button>\r
+      <button class="bar-item toolbarbtn right" onclick="timetracker.editOVPN();"><span class="icon-edit" style="font-size: 17px;"></span>[% lbl.edit %]</button>\r
+      <button class="bar-item toolbarbtn right" onclick="timetracker.addOVPN();"><span class="icon-plus" style="font-size: 17px;"></span>[% lbl.add %]</button>\r
+    </div>\r
+    <div id="tbl_timetrackerovpn"></div>\r
+  </div>\r
+</form>\r
+</div>\r
diff --git a/app/tmpl/module/timetracker/timetracker.js b/app/tmpl/module/timetracker/timetracker.js
new file mode 100644 (file)
index 0000000..dd8d2fb
--- /dev/null
@@ -0,0 +1,8 @@
+let timetracker = {\r
+  tblwlan: null,\r
+  tblovpn: null,\r
+  current_id: null,\r
+  init: function(){\r
+    \r
+  }\r
+}
\ No newline at end of file
diff --git a/app/tmpl/module/timetracker/timetrackers.js b/app/tmpl/module/timetracker/timetrackers.js
new file mode 100644 (file)
index 0000000..caeadb1
--- /dev/null
@@ -0,0 +1,6 @@
+let timetrackers={\r
+  tbl: null,\r
+  init: function(){\r
+\r
+  },\r
+}
\ No newline at end of file
diff --git a/app/tmpl/module/timetrackers.tt b/app/tmpl/module/timetrackers.tt
new file mode 100644 (file)
index 0000000..769c3a3
--- /dev/null
@@ -0,0 +1,25 @@
+<div class="display-container">\r
+  <div class="bar toolbar">\r
+   <a class="bar-item toolbarbtn" href="[% abspath %]index.html"><span class="icon icon-back" style="font-size: 16px;"></span>[% lbl.back %]</a>\r
+    <div class="bar-item PageHeadTitle">[% lbl.timetrackers %]</div>\r
+    [% IF session.usergroup == 'admin' %]\r
+      <button class="bar-item toolbarbtn  right" onclick="timetracker.remove();"><span class="icon icon-remove text-red" style="font-size: 16px;"></span>[% lbl.delete %]</button>\r
+      \r
+      <button class="bar-item toolbarbtn  right" onclick="timertracker.add();"><span class="icon icon-plus" style="font-size: 16px;"><br/>[% lbl.add %]</button> \r
+    [% END %]\r
+    <!-- <button class="bar-item toolbarbtn  right" onclick="timertracker.edit();"><span class="icon icon-edit" style="font-size: 16px;"><br/>[% lbl.edit %]</button> -->\r
+  </div>\r
+</div>\r
+<div class="display-container">\r
+  <div class="cell-row">\r
+    <div class="cell" style="width: 300px;">\r
+      <div id="tbl_timetracker" ></div>\r
+    </div>\r
+    <div class="cell" >\r
+      [% INCLUDE block/pnl_nodata.tt %] \r
+      [% INCLUDE module/timetracker/pnl_timetracker.tt %]\r
+    </div>\r
+  </div>\r
+</div>\r
+<script type="text/javascript" src="timetracker/timetrackers[% minify%].js?v=[% appversion %]"></script>\r
+<script type="text/javascript" src="timetracker/timetracker[% minify%].js?v=[% appversion %]"></script>\r
index bfde748..dfa764a 100644 (file)
@@ -1,7 +1,7 @@
 <div class="display-container">
 <div class="bar toolbar">
       <a class="bar-item toolbarbtn" href="[% abspath %]index.html"><span class="icon icon-back" style="font-size: 16px;"></span>[% lbl.back %]</a>
-      <div class="bar-item PageHeadTitle">[% lbl.titles.weekytemplates %]</div>
+      <div class="bar-item PageHeadTitle">[% lbl.weekytemplates %]</div>
       <div class="toolbar" id="tbar_tbl_workplans">
   <button class="bar-item toolbarbtn right" onclick="workplans.remove();"><span class="icon icon-remove text-red" style="font-size: 16px;"></span>[% lbl.delete %]</button>
   <button class="bar-item toolbarbtn right" onclick="workplans.duplicate();"><span class="icon icon-duplicate" style="font-size: 16px;"></span>[% lbl.duplicate %]</button>
@@ -21,7 +21,7 @@
       [% INCLUDE block/pnl_nodata.tt %]
       <div class="panel" id="pnl_workplans" style="display: none;">
         <div class="bar moduletoolbar">
-          <div class="bar-item PageHeadTitle">[% lbl.titles.template %]</div>
+          <div class="bar-item PageHeadTitle">[% lbl.template %]</div>
             <button class="bar-item toolbarbtn right" onclick="workplans.edit();"><span class="icon icon-edit" style="font-size: 16px;"></span>[% lbl.edit %]</button>
             <button class="bar-item toolbarbtn right" onclick="workplans.setcopyday();"><span class="icon icon-copy" style="font-size: 16px;"></span>[% lbl.copy %]</button>
             <button class="bar-item toolbarbtn right" onclick="workplans.pasteday();"><span class="icon icon-paste" id="pasteday" style="font-size: 16px;"></span>[% lbl.paste %]</button>
index 5c638af..0595d1c 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "POT",
-  "version": "1.0.26",
+  "version": "1.0.27",
   "description": "plan d'organisation du travail",
   "main": "main.js",
   "scripts": {
index c262b8d..63ae81e 100644 (file)
@@ -1,17 +1,17 @@
-<VirtualHost *:80>
-Servername app.pot.lan
-ServerAdmin webmaster@localhost
-DocumentRoot /usr/home/dksalu/public_html/potapp
-DirectoryIndex index.html index.cgi
-
-<Directory "/usr/home/dksalu/public_html/potapp">
-
-Options +Indexes +ExecCGI
-AllowOverride All
-
-</Directory>
-
-ErrorLog ${APACHE_LOG_DIR}/error.log
-CustomLog ${APACHE_LOG_DIR}/access.log combined
-
+<VirtualHost *:80>\r
+Servername app.pot.lan\r
+ServerAdmin webmaster@localhost\r
+DocumentRoot /usr/home/dksalu/public_html/potapp\r
+DirectoryIndex index.html index.cgi\r
+\r
+<Directory "/usr/home/dksalu/public_html/potapp">\r
+\r
+Options +Indexes +ExecCGI\r
+AllowOverride All\r
+\r
+</Directory>\r
+\r
+ErrorLog ${APACHE_LOG_DIR}/error.log\r
+CustomLog ${APACHE_LOG_DIR}/access.log combined\r
+\r
 </VirtualHost>
\ No newline at end of file
index d08c02f..f886707 100644 (file)
@@ -1,17 +1,17 @@
-<VirtualHost *:80>
-Servername lu.plandutravail.lan
-ServerAdmin webmaster@localhost
-DocumentRoot /usr/home/dksalu/public_html/plandutravail_lu
-DirectoryIndex index.html index.cgi
-
-<Directory "/usr/home/dksalu/public_html/plandutravail_lu">
-
-Options +Indexes +ExecCGI
-AllowOverride All
-
-</Directory>
-
-ErrorLog ${APACHE_LOG_DIR}/error.log
-CustomLog ${APACHE_LOG_DIR}/access.log combined
-
+<VirtualHost *:80>\r
+Servername lu.plandutravail.lan\r
+ServerAdmin webmaster@localhost\r
+DocumentRoot /usr/home/dksalu/public_html/plandutravail_lu\r
+DirectoryIndex index.html index.cgi\r
+\r
+<Directory "/usr/home/dksalu/public_html/plandutravail_lu">\r
+\r
+Options +Indexes +ExecCGI\r
+AllowOverride All\r
+\r
+</Directory>\r
+\r
+ErrorLog ${APACHE_LOG_DIR}/error.log\r
+CustomLog ${APACHE_LOG_DIR}/access.log combined\r
+\r
 </VirtualHost>
\ No newline at end of file
index df40ab0..42d2291 100644 (file)
@@ -1,19 +1,19 @@
-#!/usr/bin/perl
-
-use strict;
-
-my $num = 12;
-my $randstring = &randstr($num);
-  print  "RandPWD:\n".$randstring."\n===\n";
-       while (($randstring !~ /[A-Z]+/) || ($randstring !~ /[a-z]+/) || ($randstring !~ /[0-9]+/)){
-    $randstring = &randstr($num);
-    print  "RandPWD:\n".$randstring."\n===\n";
-  } 
-
-
-sub randstr(){
-  my $num = shift;
-  my @alphanumeric = ('a'..'z', 'A'..'Z', 0..9);
-       my $randstring = join '', map $alphanumeric[rand @alphanumeric], 0..$num;
-  return $randstring;
+#!/usr/bin/perl\r
+\r
+use strict;\r
+\r
+my $num = 12;\r
+my $randstring = &randstr($num);\r
+  print  "RandPWD:\n".$randstring."\n===\n";\r
+       while (($randstring !~ /[A-Z]+/) || ($randstring !~ /[a-z]+/) || ($randstring !~ /[0-9]+/)){\r
+    $randstring = &randstr($num);\r
+    print  "RandPWD:\n".$randstring."\n===\n";\r
+  } \r
+\r
+\r
+sub randstr(){\r
+  my $num = shift;\r
+  my @alphanumeric = ('a'..'z', 'A'..'Z', 0..9);\r
+       my $randstring = join '', map $alphanumeric[rand @alphanumeric], 0..$num;\r
+  return $randstring;\r
 }
\ No newline at end of file
index f4c7ea4..288d484 100644 (file)
@@ -1,4 +1,4 @@
-Timestamp   Filename        Error   Message
-2021-01-11 19:49:30.488 +0100  POT.fmp12       0       Import of script steps from clipboard started
-2021-01-11 19:49:30.504 +0100  Startup 0       script steps imported : 1
-2021-01-11 19:49:30.504 +0100  POT.fmp12       0       Import completed
+Timestamp   Filename        Error   Message\r
+2021-01-11 19:49:30.488 +0100  POT.fmp12       0       Import of script steps from clipboard started\r
+2021-01-11 19:49:30.504 +0100  Startup 0       script steps imported : 1\r
+2021-01-11 19:49:30.504 +0100  POT.fmp12       0       Import completed\r