diff --git a/atelier.php b/atelier.php index ba17753..d7ec5be 100644 --- a/atelier.php +++ b/atelier.php @@ -2,9 +2,10 @@ // TODO: vérifier disponibilité de la salle -require_once("session_init.php"); -require_once("config.inc.php"); -require_once('fonctions.php'); +require_once "session_init.php"; +require_once "include/entete_dolibarr.php"; +require_once "config.inc.php"; +require_once 'fonctions.php'; //echo "argc=" . $argc . EOL . "argv=" . EOL; //print_r($argv); @@ -21,20 +22,19 @@ $optind=null; $opt = getopt( 'h::', $param, $optind); +$cat = getparam( "cat", "all" ); +$action = getparam( "action", "" ); +$date = getparam("date"); +$heure = getparam("heure"); +$courriel = getparam("courriel"); -$cat = getpost( "cat", "all" ); -$action = getpost( "action", "sondage" ); -$date = getpost("date"); -$heure = getpost("heure"); -$courriel = getpost("courriel"); -echo "action = " . $action; if( !empty(getopt("h")) or !empty(getopt("help")) ) { // affiche l'aide de la commande print "Aide de la commande atelier.php\n atelier.php [--h|-h] [--date=] [--heure=] [action=] [cat=] -atelier.php --action=sondage --date=<01/01/20> --heure=<10h30> +atelier.php --action=nouveau --date=<01/01/20> --heure=<10h30> atelier.php --action=sendmail [cat=] atelier.php --action=liste Avec l'argument --action=liste affiche un résumé des ateliers en cours. @@ -60,24 +60,28 @@ Avec l'argument --action=sendmail, elle envoi un mail contenant la liste des ate switch ($action) { - case "sondage": + case "nouveau": // sondage => crée un nouveau sondage // enregistre le sondage dans la base opensurvey de dolibarr - echo "Création du sondage "; - $date_time = date_reservation( $date, $heure); + echo "Création d'un sondage le " ; + $date_time = date_reservation($date, $heure); + print_r($date_time); + echo date_format( $date_time["debut"], "j/m/Y à g\hi") . EOL; if ( !verif_agenda( $date_time ) ) { - echo 'La date est disponible'; + //echo 'La date est disponible'; require_once( "donnees.inc.php"); require_once( "db.class.php"); echo "Enregistrement dans dolibarr/opensurvey" . EOL; $db = new db( "dolibarr" ); - $sondage = new sondage($commentaires, $sujet, $date_time["ts_debut"]); + $sondage = new sondage($commentaires, $sujet); $sondage->mail_admin = "contact@lalis.fr"; $sondage->nom_admin = "Daniel"; - $sondage->titre = "Atelier du " . $opt["date"] . " à " . $opt["heure"]; + $sondage->titre = "Atelier du " . date_format( $date_time["debut"], "j/m/Y à g\hi"); + $sondage->datetime_debut = date_format( $date_time['debut'], "Y-m-d H:i:s"); + $sondage->datetime_fin = date_format( $date_time['fin'], "Y-m-d H:i:s"); $sondage->write($db); - print_r($sondage); + //print_r($sondage); $db->close(); // enregistre la réservation dans mrbs @@ -86,18 +90,17 @@ Avec l'argument --action=sendmail, elle envoi un mail contenant la liste des ate $reservation = new reservation( $date_time[ "ts_debut" ], $date_time["ts_fin"], addslashes(html_entity_decode($commentaires, ENT_QUOTES ))); $reservation->write($db); - print_r($reservation) . EOL; + //print_r($reservation) . EOL; // envoi de l'évènement sur l'agenda nextcloud require_once("send_nextcloud.php"); echo "Ajout à l'agenda Nextcloud" . EOL; require_once('send_nextcloud.php'); - envoi_event($date_time, $opt, $base_url . "dbarr/public/opensurvey/studs.php?sondage=" . $sondage->id_sondage); + envoi_event($date_time, $base_url . "dbarr/public/opensurvey/studs.php?sondage=" . $sondage->id_sondage); }else { echo "La date n'est pas disponible."; } - break; case "sendmail": require_once("send_mail.php"); diff --git a/config.inc.php b/config.inc.php index 411ad65..f7251eb 100755 --- a/config.inc.php +++ b/config.inc.php @@ -1,7 +1,6 @@ "); - define( 'TAB', "$nbsp$nbsp$nbsp$nbsp"); + define( 'TAB', "    "); } ?> diff --git a/courriel_ateliers.php b/courriel_ateliers.php new file mode 100644 index 0000000..702eac6 --- /dev/null +++ b/courriel_ateliers.php @@ -0,0 +1,23 @@ + +Sélectioner la catégorie à laquelle envoyer le courriel des ateliers
+ +
+ou l\'adresse courriel de la personne.
+ + + +'; + + +?> diff --git a/include/db.class.php b/include/db.class.php index 13f1863..de653a8 100644 --- a/include/db.class.php +++ b/include/db.class.php @@ -61,6 +61,7 @@ class db $this->result = $this->connect->query( $string ) ; if ( $this->connect->error ) log_error( "Échec de la commande query" . " => ". $this->connect->error . "
" . __file__ . esp( 'ligne' ) . __line__ . "\n" . $string, false, true ); + return $this->connect->error; } function error() @@ -80,7 +81,8 @@ class sondage public $nom_admin; public $fk_user_creat = 1; public $titre; - public $date_fin; + public $datetime_debut; + public $datetime_fin; public $status = 1; public $format ="A"; public $mailsonde = 1; @@ -89,20 +91,20 @@ class sondage public $tms; public $sujet; - function __construct($commentaires, $sujet, $datetime) + function __construct($commentaires, $sujet) { $this->commentaires = $commentaires; $this->sujet = $sujet; - $this->id_sondage = $datetime; + $this->id_sondage = date("YmdHis"); $this->entity = 1; } function write($db) { - if ($this->date_fin != null) + if ($this->datetime_fin != null) { $dfc = "date_fin, "; - $dfv = "'" . $this->date_fin . "', "; + $dfv = "'" . $this->datetime_fin . "', "; }else { $dfc = ''; @@ -137,7 +139,7 @@ class reservation { $this->ical_uid = uniqid("MRBS-") . "-" . bin2hex(random_bytes(4)) . "@librepc.com"; $query = "INSERT INTO mrbs_entry (start_time, end_time, create_by, name, type, description, status, ical_uid) VALUES ($this->start_time, $this->end_time, '$this->create_by', '$this->name', '$this->type', '$this->description', $this->status, '$this->ical_uid')"; - echo $query; + //echo $query; $db->query($query); } } diff --git a/include/entete_dolibarr.php b/include/entete_dolibarr.php new file mode 100644 index 0000000..7b57ea4 --- /dev/null +++ b/include/entete_dolibarr.php @@ -0,0 +1,50 @@ + 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; +// Try main.inc.php using relative path +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php"; +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; +if (! $res) die("Include of main fails"); + +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array("outilslalis@outilslalis")); + +$action=GETPOST('action', 'alpha'); + + +// Securite acces client +if (! $user->rights->outilslalis->read) accessforbidden(); +$socid=GETPOST('socid','int'); +if (isset($user->societe_id) && $user->societe_id > 0) +{ + $action = ''; + $socid = $user->societe_id; +} + +$max=5; +$now=dol_now(); + +$form = new Form($db); +$formfile = new FormFile($db); + +llxHeader("",$langs->trans("OutilsLalisArea")); + +print load_fiche_titre($langs->trans("OutilsLalisArea"),'','outilslalis.png@outilslalis'); + +print '
'; + + + +?> diff --git a/include/fonctions.php b/include/fonctions.php index f098dba..a9cd294 100644 --- a/include/fonctions.php +++ b/include/fonctions.php @@ -1,6 +1,6 @@ ' . $var . "
"; @@ -28,17 +28,32 @@ function getpost( $var, $default="", $session=false ) function date_reservation( $date, $heure ) { - $date_exploded = explode( "/", $date ); - print_r($date_exploded); - if ( $date_exploded[2] < 2000 ) //si année sur 2 chiffres + if ( strpos($date, "/") != 0 ) { - $date_exploded[2] += 2000; // on rajoute 2000 + $date_exploded = explode( "/", $date ); + if ( $date_exploded[2] < 2000 ) //si année sur 2 chiffres + { + $date_exploded[2] += 2000; // on rajoute 2000 + } + if ( strpos($heure, "h") != 0 ) + { + $time_exploded = explode( "h", $heure ); + }else + { + return 1; + } + $date_time["mysql"] = $date_exploded[2] . "-" . $date_exploded[1] . "-" . $date_exploded[0] . " " . $time_exploded[0] . ":" . $time_exploded[1] .":00"; + }elseif( strpos($date, "-") != 0 ) + { + $date_time["mysql"] = $date . " " . $heure . ":00"; + + }else + { + return 1; } - $time_exploded = explode( "h", $heure ); - print_r($time_exploded); - $date_time["mysql"] = $date_exploded[2] . "-" . $date_exploded[1] . "-" . $date_exploded[0] . " " . $time_exploded[0] . ":" . $time_exploded[1] .":00"; + $date_time["debut"] = DateTime::createFromFormat("Y-m-d H:i:s", $date_time["mysql"]); - $interval = new DateInterval('PT1H30M'); + $interval = new DateInterval('PT01H30M'); $date_time["fin"] = clone $date_time["debut"]; $date_time["fin"]->add( $interval ); $date_time["ts_debut"] = $date_time["debut"]->getTimestamp(); @@ -67,21 +82,5 @@ function verif_agenda( $date_time ) if ( !empty($result) ) return 1; } return 0; -} - -function write( $str ) -{ - global $env; - if ($env == CLI) - { - - }else - { - echo - } - - - } ?> - diff --git a/include/recap.php b/include/recap.php index dd5b7aa..9bf0394 100644 --- a/include/recap.php +++ b/include/recap.php @@ -1,12 +1,12 @@ result->num_rows !=0 ) { - echo "Liste des sondages:" . EOL; while( $sondage = $db->result->fetch_array() ) { // tri des résultats des sondages qui sont compilés dns un seul champ @@ -63,46 +62,48 @@ function recap() { break; } - } } - - + echo "

Liste des sondages

"; foreach( $resultat as $resume) { - if ($env) + if ($web) { - $titre = "

" . $resume["titre"] . "

"; - $str = TAB . strstr( $resume["nom_atelier"][$atelier["atelier"]], "@checkbox" , true ) . " Votes : " . $atelier["votes"] . EOL; - $pas_atelier = TAB . "Pas d'ateliers" . EOL; - $url = TAB . "Url : " . $resume["url"] . EOL; + + $str_atelier = "

" . $resume["titre"] . "

"; + $url = TAB . 'Url : ' . $resume["url"] . '' . EOL; }else { - $titre = $resume["titre"]; - $str = TAB . strstr( $resume["nom_atelier"][$atelier["atelier"]], "@checkbox" , true ) . " Votes : " . $atelier["votes"] . EOL; - $pas_atelier = TAB . "Pas d'ateliers" . EOL; + echo "Liste des sondages:" . EOL; + $str_atelier = $resume["titre"]; $url = TAB . "Url : " . $resume["url"] . EOL; } - echo $titre . EOL; + + echo $str_atelier; foreach( $resume["reponse"] as $atelier ) { - if ( isset ($atelier["atelier"]) ) + if ( !empty($atelier["atelier"]) ) { - + $str = TAB . strstr( $resume["atelier"], "@checkbox" , true ) . " Votes : " . $atelier["votes"] . EOL; echo $str; - }else { - echo $pas_atelier; + echo TAB . "Pas d'ateliers" . EOL; } - echo $url; } - echo EOL; + echo $url; + } }else { - echo "Aucun atelier de prévu" . EOL; + if ($web) + { + echo "

Aucun atelier de prévu

"; + }else + { + echo "Aucun atelier de prévu" . EOL; + } } - + llxFooter(); } ?> diff --git a/include/send_mail.php b/include/send_mail.php index f12ac69..a024580 100644 --- a/include/send_mail.php +++ b/include/send_mail.php @@ -50,8 +50,8 @@ function send_mail( $cat_dest, $destinataire, $texte='' ) while( $contacts = $db->result->fetch_array() ) { $mail_adresse = $contacts["email"]; - envoi_mail( $mail_adresse, "[Lalis] prochains ateliers", $mail, $headers ); - //echo "envoi mail: $mail_adresse," . "[Lalis] prochains ateliers" . $mail . $headers; + //envoi_mail( $mail_adresse, "[Lalis] prochains ateliers", $mail, $headers ); + echo "envoi mail: $mail_adresse," . "[Lalis] prochains ateliers" . $mail . $headers; sleep(1); } } diff --git a/include/send_nextcloud.php b/include/send_nextcloud.php index 34f8a39..f20b28a 100644 --- a/include/send_nextcloud.php +++ b/include/send_nextcloud.php @@ -2,13 +2,13 @@ require_once('SimpleCalDAVClient.php'); -function envoi_event($date_time, $opt, $url) +function envoi_event($date_time, $url) { $client = new SimpleCalDAVClient(); - $date = $opt["date"]; + $date = date_format($date_time['debut'], 'd/m/Y' ); $date_creation = date("Ymd\THis\Z"); - $datetime_start = date("Ymd\THis\Z", $date_time["ts_debut"]); - $datetime_fin = date("Ymd\THis\Z", $date_time["ts_fin"]); + $datetime_start = date_format($date_time["debut"], "Ymd\THis\Z"); + $datetime_fin = date_format($date_time["fin"], "Ymd\THis\Z"); $ID = uniqid(); $NewEvent = "BEGIN:VCALENDAR PRODID:-//Atelier Lalis//FR @@ -21,14 +21,12 @@ TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:CEST DTSTART:19700329T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:CET DTSTART:19701025T030000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE BEGIN:VEVENT @@ -45,6 +43,7 @@ LOCATION:Lalis 7 place Louis Chazette 69001 Lyon DESCRIPTION:Inscription: $url END:VEVENT END:VCALENDAR"; +echo $NewEvent; try { /* * To establish a connection and to choose a calendar on the server, use diff --git a/nconnector.php b/nconnector.php new file mode 100755 index 0000000..787fd84 --- /dev/null +++ b/nconnector.php @@ -0,0 +1,156 @@ +#!/usr/bin/php + +array("value"=>"","scope"=>"contacts","verified"=>"0"),"address"=>array("value"=>"[adresse]","scope"=>"private","verified"=>"0"),"website"=>array("value"=>"","scope"=>"private","verified"=>"0"),"email"=>array("value"=>"","scope"=>"contacts","verified"=>"1"),"avatar"=>array("scope"=>"contacts","verified"=>"0"),"phone"=>array("value"=>"","scope"=>"private","verified"=>"0"),"twitter"=>array("value"=>"","scope"=>"private","verified"=>"0")); + +$doldb = new db("dolibarr"); +$ncdb = new db("nextcloud"); + +$doldb->query("SELECT login, firstname, lastname, pass_crypted, fk_adherent_type, address, email, phone_perso, phone_mobile, zip, town, fk_user_valid, datefin FROM llx_adherent"); +//print_r ($ncdb); +while ($user = $doldb->result->fetch_assoc()) +{ + $insert = false; + if ($user["fk_user_valid"] == null) $user["fk_user_valid"] = 0; + $ncdb->query("SELECT uid FROM oc_accounts WHERE uid='" . $user["login"] . "'"); + if ( $ncdb->result->num_rows != 0 ) + { + // L'utilisateur existe déjà, on ne le crée pas, mais on vérifie sa validité et si il est à jour de cotisation. + $ncuser = $ncdb->result->fetch_assoc(); + + // vérification si l'utilisateur est à jour de cotisation + if( !empty($user['datefin']) ) + { + $datefin = DateTime::createFromFormat("Y-m-d H:i:s", $user['datefin']); + $interval = new DateInterval('P0000Y02M00D'); + + $datefin->add($interval); + if ( $datefin->getTimestamp() <= time() ) + { + // désactive l'utilisateur hors cotisation + echo "Utilisateur " . $user["login"] . " hors cotisation" .EOL; + $status = "false"; + }else + { + // réactive l'utilisateur désactivé à jour de cotisation. + //echo "réactive l'utilisateur " . $user["login"] . " désactivé à jour de cotisation" . EOL; + $status = "true"; + } + } + $ncdb->query("SELECT configvalue FROM oc_preferences WHERE userid='" . $user["login"] . "' AND appid='core' AND configkey='enabled'"); + if ( $ncdb->result->num_rows != 0 ) + { + // le validité de l'utilisateur est définie + //echo "utilisateur " . $user["login"] . " valide" . EOL; + $r = $ncdb->result->fetch_assoc(); + $status_nc = $r["configvalue"] ; + }else + { + // pas de définition de la validité de l'utilisateur => par défaut utilisateur valide + //echo "utilisateur valide par défaut"; + $insert = true; // insertion de la validité dans la table préférence + //$status_nc = 'true'; + } + if ( $user["fk_user_valid"] == 0 || $status_nc == "false" ) + { + // différence entre nexcloud et dolibarr + //echo "mise à jour du statut de => " . $user["login"] . " à " . $user["fk_user_valid"] . EOL; + //write_status( $insert, $user["login"], $user["fk_user_valid"], $ncdb ); + $status = "false"; + }else + { + $status ="true"; + } + if ( $status_nc != $status ) + { + write_status( $insert, $user['login'] , $status, $ncdb ); + } + }else + { + echo $user["login"] . " n'existe pas" . EOL; + if ( empty($user["phone_mobile"]) ) + { + $data["phone"]["value"] = $user["phone_perso"]; + }else + { + $data["phone"]["value"] = $user["phone_mobile"]; + } + + $data["displayname"]["value"] = addslashes(concat(utf8_encode($user["firstname"]), utf8_encode($user["lastname"]))); + $address = concat(utf8_encode($user['address']), $user["zip"]); + $data["address"]["value"] = (concat ($address, utf8_encode($user["town"]))); + $data["email"]["value"] = "'" . $user["email"] . "'"; + print_r($data); + if ( ($account_data = json_encode($data)) == false ) + { + echo json_last_error() . EOL; + exit (0); + } + + $oc_account_query = 'INSERT INTO oc_accounts (uid, data) VALUES ("' . $user["login"] . '","' . addslashes($account_data) .'")'; + $oc_users_query = 'INSERT INTO oc_users (uid, displayname, password, uid_lower) VALUES ("' . $user["login"] . '","' . $user["firstname"] . ' ' . $user["lastname"] . '","1|' . $user["pass_crypted"] . '","' . strtolower($user["login"]) . '")'; + + if ($user["fk_adherent_type"] == 2) + { + $gid="membres"; + }else if ($user["fk_adherent_type"] == 3) + { + $gid="contributeurs"; + } + + $oc_group_user_query = "INSERT INTO oc_group_user(uid, gid) VALUES ('" . $user["login"] . "','" . $gid . "')"; + + $oc_preferences_query_quota = "INSERT INTO oc_preferences(userid, appid, configkey, configvalue) VALUES ('" . $user["login"] . "', 'files', 'quota', '10 GB')"; + $oc_preferences_query_email = "INSERT INTO oc_preferences(userid, appid, configkey, configvalue) VALUES ('" . $user["login"] . "', 'settings', 'email', '" . $user["email"] . "')"; + //echo $account_data . EOL . $oc_account_query . EOL . $oc_users_query .EOL . $oc_group_user_query . EOL . $oc_preferences_query_quota . EOL . $oc_preferences_query_email . EOL; + + $ncdb->query($oc_account_query); + $ncdb->query($oc_users_query); + $ncdb->query($oc_group_user_query); + $ncdb->query($oc_preferences_query_quota); + $ncdb->query($oc_preferences_query_email); + } + + //$ncdb->result->close(); + //if ($flag > 12) exit; +} +//$doldb->result->close(); +llxFooter(); + +function write_status( $mode, $uid, $status, $db ) +{ + if ( $mode ) + { + echo "Création du statut de" . $uid . " statut: " . $status . EOL; + $query = "INSERT INTO oc_preferences (userid, appid, configkey, configvalue) VALUES ( '" . $uid . "', 'core', 'enabled', '" . $status . "' ) "; + }else + { + echo "Modification du statut de " . $uid . " statut: " . $status . EOL; + $query = "UPDATE oc_preferences SET configvalue = '" . $status ."' WHERE userid='" . $uid . "' AND appid='core' AND configkey='enabled'" ; + + } + $db->query( $query ); + //echo $query; +} +?> diff --git a/outilslalisindex.php b/outilslalisindex.php index c4b626b..d4bb142 100644 --- a/outilslalisindex.php +++ b/outilslalisindex.php @@ -82,19 +82,10 @@ print load_fiche_titre($langs->trans("OutilsLalisArea"),'','outilslalis.png@outi print '
'; - - - - require_once 'config.inc.php'; include "recap.php"; recap(); - - - - - /* BEGIN MODULEBUILDER DRAFT MYOBJECT // Draft MyObject if (! empty($conf->outilslalis->enabled) && $user->rights->outilslalis->read) @@ -114,4 +105,3 @@ print '
'; // End of page llxFooter(); -$db->close(); diff --git a/saisie_atelier.php b/saisie_atelier.php new file mode 100644 index 0000000..154ca07 --- /dev/null +++ b/saisie_atelier.php @@ -0,0 +1,15 @@ + +Date et heure de l\'atelier : + + + +'; + +?> diff --git a/session_init.php b/session_init.php index 24f5df1..c6198e4 100644 --- a/session_init.php +++ b/session_init.php @@ -1,7 +1,7 @@