1
0
Fork 0

Integration dans dolibarr et nconnector

This commit is contained in:
Daniel Tartavel 2020-02-06 17:14:30 +01:00
parent df5d29cfc3
commit 932c0148f8
13 changed files with 335 additions and 98 deletions

View File

@ -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=<date>] [--heure=<heure>] [action=<action>] [cat=<catégorie>]
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=<all|membres|contacts>]
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");

View File

@ -1,7 +1,6 @@
<?php
date_default_timezone_set("Europe/Paris");
set_include_path (get_include_path() . PATH_SEPARATOR . __DIR__ . "/include/" . PATH_SEPARATOR . __DIR__ . "/config/");
//constantes des niveaux de log
@ -14,14 +13,14 @@ define( 'WEB', 1);
$base_url = "https://lalis69.ddns.net:10443/";
if ( empty($_SERVER) )
{
$env = CLI;
$web = CLI;
define( 'EOL', "\n");
define( 'TAB', "\t");
}else
{
$env = WEB;
$web = WEB;
define( 'EOL', "<br>");
define( 'TAB', "$nbsp$nbsp$nbsp$nbsp");
define( 'TAB', "&nbsp&nbsp&nbsp&nbsp");
}
?>

23
courriel_ateliers.php Normal file
View File

@ -0,0 +1,23 @@
<?php
require_once "session_init.php";
require_once "include/entete_dolibarr.php";
require_once "config.inc.php";
require_once 'fonctions.php';
echo '<form action="atelier.php" method="post">
Sélectioner la catégorie à laquelle envoyer le courriel des ateliers<br>
<select name="cat">
<option value="membres" default>Membres</option>
<option value="contacts">Contacts</option>
<option value="all">Tous</option>
</select>
<br>
ou l\'adresse courriel de la personne.<br>
<input type="email" name="courriel" />
<input type="submit" value="envoyer" />
<input type="hidden" name="action" value="sendmail" />
</form>';
?>

View File

@ -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 . "<br />" . __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);
}
}

View File

@ -0,0 +1,50 @@
<?php
require_once "session_init.php";
// Load Dolibarr environment
$res=0;
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
while($i > 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 '<div class="fichecenter"><div class="fichethirdleft">';
?>

View File

@ -1,6 +1,6 @@
<?php
function getpost( $var, $default="", $session=false )
function getparam( $var, $default="", $session=false )
{
global $opt;
//echo '$var =>' . $var . "<br />";
@ -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
}
}
?>

View File

@ -1,12 +1,12 @@
<?php
require_once( "db.class.php" );
function recap()
{
global $base_url;
global $base_url, $web;
require_once "db.class.php";
// on ouvre la bd dolibarr 2 fois
// la première la liste des sondages actifs triés par date de date_fin
// la deuxième pour lire les résumlatts des sondages
// la deuxième pour lire les résultats des sondages
$db = new db("dolibarr");
$db2= new db("dolibarr");
@ -15,7 +15,6 @@ function recap()
// Pour chaque sondage on va lire les résultats
if ( $db->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 "<h2>Liste des sondages</h2>";
foreach( $resultat as $resume)
{
if ($env)
if ($web)
{
$titre = "<h1>" . $resume["titre"] . "</H1>";
$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 = "<h4>" . $resume["titre"] . "</h4>";
$url = TAB . 'Url : <a href="' . $resume["url"] . '">' . $resume["url"] . '</a>' . 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 "<h1>Aucun atelier de prévu</h1>";
}else
{
echo "Aucun atelier de prévu" . EOL;
}
}
llxFooter();
}
?>

View File

@ -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);
}
}

View File

@ -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

156
nconnector.php Executable file
View File

@ -0,0 +1,156 @@
#!/usr/bin/php
<?php
require_once "session_init.php";
require_once "config.inc.php";
require_once "log.php";
require_once "db.class.php";
include_once "entete_dolibarr.php";
function concat ($a, $b)
{
if ( !empty($a) && !empty($b) )
{
$r = $a . " " . $b;
}else
{
$r = $a . $b;
}
return $r;
}
$status_nc='';
$flag = 0;
$data = array("displayname"=>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;
}
?>

View File

@ -82,19 +82,10 @@ print load_fiche_titre($langs->trans("OutilsLalisArea"),'','outilslalis.png@outi
print '<div class="fichecenter"><div class="fichethirdleft">';
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 '</div></div></div>';
// End of page
llxFooter();
$db->close();

15
saisie_atelier.php Normal file
View File

@ -0,0 +1,15 @@
<?php
require_once "session_init.php";
require_once "include/entete_dolibarr.php";
require_once "config.inc.php";
require_once 'fonctions.php';
echo '<form action="atelier.php" method="post">
Date et heure de l\'atelier : <input type="date" name="date" />
<input type="time" name="heure" required />
<input type="submit" value="envoyer" />
<input type="hidden" name="action" value="nouveau" />
</form>';
?>

View File

@ -1,7 +1,7 @@
<?php
ini_set('session.use_strict_mode','true');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('session.use_strict_mode','true');
ini_set('session.cookie_secure','true');
ini_set('session.hash_function','md5');
date_default_timezone_set("Europe/Paris");