Can make a link between a member and a user

This commit is contained in:
Laurent Destailleur 2009-05-06 23:30:49 +00:00
parent cba6e942e7
commit 1e37d24bf4
11 changed files with 349 additions and 202 deletions

View File

@ -58,7 +58,6 @@ class Adherent extends CommonObject
var $login; var $login;
var $pass; var $pass;
var $societe; var $societe;
var $fk_soc;
var $adresse; var $adresse;
var $cp; var $cp;
var $ville; var $ville;
@ -90,6 +89,8 @@ class Adherent extends CommonObject
var $user_id; var $user_id;
var $user_login; var $user_login;
var $fk_soc;
// Fields loaded by fetch_subscriptions() // Fields loaded by fetch_subscriptions()
var $fistsubscription_date; var $fistsubscription_date;
var $fistsubscription_amount; var $fistsubscription_amount;
@ -296,13 +297,30 @@ class Adherent extends CommonObject
$this->id=$id; $this->id=$id;
// Update minor fields // Update minor fields
$result=$this->update($user,1,1); $result=$this->update($user,1,1); // nosync is 1 to avoid update data of user
if ($result < 0) if ($result < 0)
{ {
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
// Add link to user
if ($this->user_id)
{
// Add link to user
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET";
$sql.= " fk_member = '".$this->id."'";
$sql.= " WHERE rowid = ".$this->user_id;
dol_syslog("Adherent::create sql=".$sql);
$resql = $this->db->query($sql);
if (! $resql)
{
$this->error='Failed to update user to make link with member';
$this->db->rollback();
return -4;
}
}
$this->use_webcal=($conf->global->PHPWEBCALENDAR_MEMBERSTATUS=='always'?1:0); $this->use_webcal=($conf->global->PHPWEBCALENDAR_MEMBERSTATUS=='always'?1:0);
if (! $notrigger) if (! $notrigger)
@ -456,9 +474,23 @@ class Adherent extends CommonObject
} }
} }
if ($nbrowsaffected) // Remove link to user
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member = NULL where fk_member = ".$this->id;
dol_syslog("Adherent::update sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) { $this->error=$this->db->error(); $this->db->rollback(); return -5; }
// If there is a user linked to this member
if ($this->user_id > 0)
{ {
if ($this->user_id && ! $nosyncuser) $sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member = ".$this->id." where rowid = ".$this->user_id;
dol_syslog("Adherent::update sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) { $this->error=$this->db->error(); $this->db->rollback(); return -5; }
}
if ($nbrowsaffected) // If something has change in data
{
if ($this->user_id > 0 && ! $nosyncuser)
{ {
require_once(DOL_DOCUMENT_ROOT."/user.class.php"); require_once(DOL_DOCUMENT_ROOT."/user.class.php");

View File

@ -133,6 +133,10 @@ if ($_REQUEST["action"] == 'update' && ! $_POST["cancel"])
{ {
$result=$adh->fetch($_POST["rowid"]); $result=$adh->fetch($_POST["rowid"]);
// Is it a new link to a user ?
$nosyncuser=0;
if ($adh->user_id != $_POST["userid"]) $nosyncuser=1;
// If change (allowed on all members) or (allowed on myself and i am edited memeber) // If change (allowed on all members) or (allowed on myself and i am edited memeber)
if ($user->rights->adherent->creer || ($user->rights->adherent->self->creer && $adh->user_id == $user->id)) if ($user->rights->adherent->creer || ($user->rights->adherent->self->creer && $adh->user_id == $user->id))
{ {
@ -177,6 +181,9 @@ if ($_REQUEST["action"] == 'update' && ! $_POST["cancel"])
$adh->statut = $_POST["statut"]; $adh->statut = $_POST["statut"];
$adh->public = $_POST["public"]; $adh->public = $_POST["public"];
$adh->fk_soc = $_POST["socid"];
$adh->user_id = $_POST["userid"];
foreach($_POST as $key => $value) foreach($_POST as $key => $value)
{ {
if (ereg("^options_",$key)) if (ereg("^options_",$key))
@ -187,7 +194,7 @@ if ($_REQUEST["action"] == 'update' && ! $_POST["cancel"])
} }
} }
$result=$adh->update($user,0); $result=$adh->update($user,0,$nosyncuser);
if ($result >= 0 && ! sizeof($adh->errors)) if ($result >= 0 && ! sizeof($adh->errors))
{ {
if (isset($_FILES['photo']['tmp_name']) && trim($_FILES['photo']['tmp_name'])) if (isset($_FILES['photo']['tmp_name']) && trim($_FILES['photo']['tmp_name']))
@ -230,7 +237,7 @@ if ($_REQUEST["action"] == 'update' && ! $_POST["cancel"])
} }
} }
if ($user->rights->adherent->creer && $_POST["action"] == 'add') if ($_POST["action"] == 'add' && $user->rights->adherent->creer)
{ {
$datenaiss=''; $datenaiss='';
if (isset($_POST["naissday"]) && $_POST["naissday"] if (isset($_POST["naissday"]) && $_POST["naissday"]
@ -265,6 +272,9 @@ if ($user->rights->adherent->creer && $_POST["action"] == 'add')
$morphy=$_POST["morphy"]; $morphy=$_POST["morphy"];
$cotisation=$_POST["cotisation"]; $cotisation=$_POST["cotisation"];
$userid=$_POST["userid"];
$socid=$_POST["socid"];
$adh->prenom = $prenom; $adh->prenom = $prenom;
$adh->nom = $nom; $adh->nom = $nom;
$adh->societe = $societe; $adh->societe = $societe;
@ -283,8 +293,12 @@ if ($user->rights->adherent->creer && $_POST["action"] == 'add')
$adh->typeid = $typeid; $adh->typeid = $typeid;
$adh->note = $comment; $adh->note = $comment;
$adh->morphy = $morphy; $adh->morphy = $morphy;
foreach($_POST as $key => $value){ $adh->user_id = $userid;
if (ereg("^options_",$key)){ $adh->fk_soc = $socid;
foreach($_POST as $key => $value)
{
if (ereg("^options_",$key))
{
//escape values from POST, at least with addslashes, to avoid obvious SQL injections //escape values from POST, at least with addslashes, to avoid obvious SQL injections
//(array_options is directly input in the DB in adherent.class.php::update()) //(array_options is directly input in the DB in adherent.class.php::update())
$adh->array_options[$key]=addslashes($_POST[$key]); $adh->array_options[$key]=addslashes($_POST[$key]);
@ -374,9 +388,8 @@ if ($user->rights->adherent->creer && $_POST["action"] == 'add')
} }
$db->commit(); $db->commit();
$rowid=$adh->id;
Header("Location: liste.php?statut=-1"); $action='';
exit;
} }
else else
{ {
@ -537,6 +550,7 @@ if ($user->rights->adherent->creer && $_POST["action"] == 'confirm_add_spip' &&
llxHeader(); llxHeader();
$html = new Form($db);
if ($errmsg) if ($errmsg)
{ {
@ -577,25 +591,34 @@ if ($action == 'edit')
dol_fiche_head($head, 'general', $langs->trans("Member")); dol_fiche_head($head, 'general', $langs->trans("Member"));
$rowspan=14;
$rowspan+=sizeof($adho->attribute_label);
if ($conf->societe->enabled) $rowspan++;
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="post" enctype="multipart/form-data">'; print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="post" enctype="multipart/form-data">';
print "<input type=\"hidden\" name=\"action\" value=\"update\">"; print "<input type=\"hidden\" name=\"action\" value=\"update\">";
print "<input type=\"hidden\" name=\"rowid\" value=\"$rowid\">"; print "<input type=\"hidden\" name=\"rowid\" value=\"$rowid\">";
print "<input type=\"hidden\" name=\"statut\" value=\"".$adh->statut."\">"; print "<input type=\"hidden\" name=\"statut\" value=\"".$adh->statut."\">";
$htmls = new Form($db);
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// Ref // Ref
print '<tr><td>'.$langs->trans("Ref").'</td><td class="valeur" colspan="2">'.$adh->id.'&nbsp;</td></tr>'; print '<tr><td>'.$langs->trans("Ref").'</td><td class="valeur" colspan="2">'.$adh->id.'</td></tr>';
// Physique-Moral
$morphys["phy"] = $langs->trans("Physical");
$morphys["mor"] = $langs->trans("Morale");
print "<tr><td>".$langs->trans("Person").'*</td><td colspan="2">';
$html->select_array("morphy", $morphys, $adh->morphy);
print "</td></tr>";
// Societe
print '<tr><td>'.$langs->trans("Company").'</td><td colspan="2"><input type="text" name="societe" size="40" value="'.$adh->societe.'"></td></tr>';
// Nom // Nom
print '<tr><td>'.$langs->trans("Lastname").'*</td><td><input type="text" name="nom" size="40" value="'.$adh->nom.'"></td>'; print '<tr><td>'.$langs->trans("Lastname").'*</td><td><input type="text" name="nom" size="40" value="'.$adh->nom.'"></td>';
// Photo // Photo
$rowspan=16;
$rowspan+=sizeof($adho->attribute_label);
print '<td align="center" valign="middle" width="25%" rowspan="'.$rowspan.'">'; print '<td align="center" valign="middle" width="25%" rowspan="'.$rowspan.'">';
if (file_exists($conf->adherent->dir_output."/".$adh->id.".jpg")) if (file_exists($conf->adherent->dir_output."/".$adh->id.".jpg"))
{ {
@ -629,7 +652,7 @@ if ($action == 'edit')
print '<tr><td>'.$langs->trans("Type").'*</td><td>'; print '<tr><td>'.$langs->trans("Type").'*</td><td>';
if ($user->rights->adherent->creer) // If $user->rights->adherent->self->creer, we do not allow. if ($user->rights->adherent->creer) // If $user->rights->adherent->self->creer, we do not allow.
{ {
$htmls->select_array("typeid", $adht->liste_array(), $adh->typeid); $html->select_array("typeid", $adht->liste_array(), $adh->typeid);
} }
else else
{ {
@ -638,16 +661,6 @@ if ($action == 'edit')
} }
print "</td></tr>"; print "</td></tr>";
// Physique-Moral
$morphys["phy"] = $langs->trans("Physical");
$morphys["mor"] = $langs->trans("Morale");
print "<tr><td>".$langs->trans("Person")."*</td><td>";
$htmls->select_array("morphy", $morphys, $adh->morphy);
print "</td></tr>";
// Societe
print '<tr><td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" size="40" value="'.$adh->societe.'"></td></tr>';
// Adresse // Adresse
print '<tr><td>'.$langs->trans("Address").'</td><td>'; print '<tr><td>'.$langs->trans("Address").'</td><td>';
print '<textarea name="adresse" wrap="soft" cols="40" rows="2">'.$adh->adresse.'</textarea></td></tr>'; print '<textarea name="adresse" wrap="soft" cols="40" rows="2">'.$adh->adresse.'</textarea></td></tr>';
@ -657,7 +670,7 @@ if ($action == 'edit')
// Pays // Pays
print '<tr><td>'.$langs->trans("Country").'</td><td>'; print '<tr><td>'.$langs->trans("Country").'</td><td>';
$htmls->select_pays($adh->pays_code?$adh->pays_code:$mysoc->pays_code,'pays'); $html->select_pays($adh->pays_code?$adh->pays_code:$mysoc->pays_code,'pays');
print '</td></tr>'; print '</td></tr>';
// Tel // Tel
@ -674,12 +687,12 @@ if ($action == 'edit')
// Date naissance // Date naissance
print "<tr><td>".$langs->trans("Birthday")."</td><td>\n"; print "<tr><td>".$langs->trans("Birthday")."</td><td>\n";
$htmls->select_date(($adh->naiss ? $adh->naiss : -1),'naiss','','',1,'update'); $html->select_date(($adh->naiss ? $adh->naiss : -1),'naiss','','',1,'update');
print "</td></tr>\n"; print "</td></tr>\n";
// Profil public // Profil public
print "<tr><td>".$langs->trans("Public")."</td><td>\n"; print "<tr><td>".$langs->trans("Public")."</td><td>\n";
print $htmls->selectyesno("public",$adh->public,1); print $html->selectyesno("public",$adh->public,1);
print "</td></tr>\n"; print "</td></tr>\n";
// Attributs supplementaires // Attributs supplementaires
@ -688,6 +701,19 @@ if ($action == 'edit')
print "<tr><td>$value</td><td><input type=\"text\" name=\"options_$key\" size=\"40\" value=\"".$adh->array_options["options_$key"]."\"></td></tr>\n"; print "<tr><td>$value</td><td><input type=\"text\" name=\"options_$key\" size=\"40\" value=\"".$adh->array_options["options_$key"]."\"></td></tr>\n";
} }
// Third party Dolibarr
if ($conf->societe->enabled)
{
print '<tr><td>'.$langs->trans("LinkedToDolibarrThirdParty").'</td><td class="valeur">';
print $html->select_societes($adh->fk_soc,'socid','',1);
print '</td></tr>';
}
// Login Dolibarr
print '<tr><td>'.$langs->trans("LinkedToDolibarrUser").'</td><td class="valeur">';
print $html->select_users($adh->user_id,'userid',1);
print '</td></tr>';
print '<tr><td colspan="3" align="center">'; print '<tr><td colspan="3" align="center">';
print '<input type="submit" class="button" name="submit" value="'.$langs->trans("Save").'">'; print '<input type="submit" class="button" name="submit" value="'.$langs->trans("Save").'">';
print ' &nbsp; &nbsp; &nbsp; '; print ' &nbsp; &nbsp; &nbsp; ';
@ -709,16 +735,25 @@ if ($action == 'create')
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
$htmls = new Form($db);
$adht = new AdherentType($db); $adht = new AdherentType($db);
print_fiche_titre($langs->trans("NewMember")); print_fiche_titre($langs->trans("NewMember"));
print '<form name="add" action="fiche.php" method="post" enctype="multipart/form-data">'; print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="post" enctype="multipart/form-data">';
print '<input type="hidden" name="action" value="add">'; print '<input type="hidden" name="action" value="add">';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// Moral-Physique
$morphys["phy"] = "Physique";
$morphys["mor"] = "Morale";
print "<tr><td>".$langs->trans("Person")."*</td><td>\n";
$html->select_array("morphy", $morphys, $adh->morphy);
print "</td>\n";
// Company
print '<tr><td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" size="40" value="'.$adh->societe.'"></td></tr>';
// Nom // Nom
print '<tr><td>'.$langs->trans("Lastname").'*</td><td><input type="text" name="nom" value="'.$adh->nom.'" size="40"></td>'; print '<tr><td>'.$langs->trans("Lastname").'*</td><td><input type="text" name="nom" value="'.$adh->nom.'" size="40"></td>';
print '</tr>'; print '</tr>';
@ -750,22 +785,12 @@ if ($action == 'create')
$listetype=$adht->liste_array(); $listetype=$adht->liste_array();
if (sizeof($listetype)) if (sizeof($listetype))
{ {
$htmls->select_array("typeid", $listetype, $typeid); $html->select_array("typeid", $listetype, $typeid);
} else { } else {
print '<font class="error">'.$langs->trans("NoTypeDefinedGoToSetup").'</font>'; print '<font class="error">'.$langs->trans("NoTypeDefinedGoToSetup").'</font>';
} }
print "</td>\n"; print "</td>\n";
// Moral-Physique
$morphys["phy"] = "Physique";
$morphys["mor"] = "Morale";
print "<tr><td>".$langs->trans("Person")."*</td><td>\n";
$htmls->select_array("morphy", $morphys, $adh->morphy);
print "</td>\n";
print '<tr><td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" size="40" value="'.$adh->societe.'"></td></tr>';
// Adresse // Adresse
print '<tr><td valign="top">'.$langs->trans("Address").'</td><td>'; print '<tr><td valign="top">'.$langs->trans("Address").'</td><td>';
print '<textarea name="adresse" wrap="soft" cols="40" rows="2">'.$adh->adresse.'</textarea></td></tr>'; print '<textarea name="adresse" wrap="soft" cols="40" rows="2">'.$adh->adresse.'</textarea></td></tr>';
@ -775,7 +800,7 @@ if ($action == 'create')
// Pays // Pays
print '<tr><td>'.$langs->trans("Country").'</td><td>'; print '<tr><td>'.$langs->trans("Country").'</td><td>';
$htmls->select_pays($adh->pays_id ? $adh->pays_id : $mysoc->pays_id,'pays_id'); $html->select_pays($adh->pays_id ? $adh->pays_id : $mysoc->pays_id,'pays_id');
print '</td></tr>'; print '</td></tr>';
// Tel pro // Tel pro
@ -792,20 +817,32 @@ if ($action == 'create')
// Date naissance // Date naissance
print "<tr><td>".$langs->trans("Birthday")."</td><td>\n"; print "<tr><td>".$langs->trans("Birthday")."</td><td>\n";
$htmls->select_date(($adh->naiss ? $adh->naiss : -1),'naiss','','',1,'add'); $html->select_date(($adh->naiss ? $adh->naiss : -1),'naiss','','',1,'add');
print "</td></tr>\n"; print "</td></tr>\n";
// Attribut optionnels // Profil public
print "<tr><td>".$langs->trans("Public")."</td><td>\n";
print $html->selectyesno("public",$adh->public,1);
print "</td></tr>\n";
// Attribut optionnels
foreach($adho->attribute_label as $key=>$value) foreach($adho->attribute_label as $key=>$value)
{ {
print "<tr><td>$value</td><td><input type=\"text\" name=\"options_$key\" size=\"40\"></td></tr>\n"; print "<tr><td>$value</td><td><input type=\"text\" name=\"options_$key\" size=\"40\"></td></tr>\n";
} }
// Profil public // Third party Dolibarr
print "<tr><td>".$langs->trans("Public")."</td><td>\n"; if ($conf->societe->enabled)
print $htmls->selectyesno("public",$adh->public,1); {
print "</td></tr>\n"; print '<tr><td>'.$langs->trans("LinkedToDolibarrThirdParty").'</td><td class="valeur">';
print $html->select_societes($adh->fk_soc,'socid','',1);
print '</td></tr>';
}
// Login Dolibarr
print '<tr><td>'.$langs->trans("LinkedToDolibarrUser").'</td><td class="valeur">';
print $html->select_users($adh->user_id,'userid',1);
print '</td></tr>';
print "</table>\n"; print "</table>\n";
print '<br>'; print '<br>';
@ -939,6 +976,8 @@ if ($rowid && $action != 'edit')
if ($ret == 'html') print '<br>'; if ($ret == 'html') print '<br>';
} }
$rowspan=14+sizeof($adho->attribute_label);
if ($conf->societe->enabled) $rowspan++;
print '<form action="fiche.php" method="post" enctype="multipart/form-data">'; print '<form action="fiche.php" method="post" enctype="multipart/form-data">';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
@ -949,7 +988,13 @@ if ($rowid && $action != 'edit')
print $html->showrefnav($adh,'rowid'); print $html->showrefnav($adh,'rowid');
print '</td></tr>'; print '</td></tr>';
// Nom // Morphy
print '<tr><td>'.$langs->trans("Person").'</td><td class="valeur" colspan="2">'.$adh->getmorphylib().'</td></tr>';
// Company
print '<tr><td>'.$langs->trans("Company").'</td><td class="valeur" colspan="2">'.$adh->societe.'</td></tr>';
// Nom
print '<tr><td>'.$langs->trans("Lastname").'</td><td class="valeur" colspan="2">'.$adh->nom.'&nbsp;</td>'; print '<tr><td>'.$langs->trans("Lastname").'</td><td class="valeur" colspan="2">'.$adh->nom.'&nbsp;</td>';
print '</tr>'; print '</tr>';
@ -958,7 +1003,6 @@ if ($rowid && $action != 'edit')
// Login // Login
print '<tr><td>'.$langs->trans("Login").'</td><td class="valeur">'.$adh->login.'&nbsp;</td>'; print '<tr><td>'.$langs->trans("Login").'</td><td class="valeur">'.$adh->login.'&nbsp;</td>';
$rowspan=16+sizeof($adho->attribute_label);
print '<td rowspan="'.$rowspan.'" align="center" valign="middle" width="25%">'; print '<td rowspan="'.$rowspan.'" align="center" valign="middle" width="25%">';
if (file_exists($conf->adherent->dir_output."/".$adh->id.".jpg")) if (file_exists($conf->adherent->dir_output."/".$adh->id.".jpg"))
{ {
@ -977,13 +1021,7 @@ if ($rowid && $action != 'edit')
// Type // Type
print '<tr><td>'.$langs->trans("Type").'</td><td class="valeur">'.$adht->getNomUrl(1)."</td></tr>\n"; print '<tr><td>'.$langs->trans("Type").'</td><td class="valeur">'.$adht->getNomUrl(1)."</td></tr>\n";
// Morphy // Address
print '<tr><td>'.$langs->trans("Person").'</td><td class="valeur">'.$adh->getmorphylib().'</td></tr>';
// Company
print '<tr><td>'.$langs->trans("Company").'</td><td class="valeur">'.$adh->societe.'</td></tr>';
// Adresse
print '<tr><td>'.$langs->trans("Address").'</td><td class="valeur">'.nl2br($adh->adresse).'</td></tr>'; print '<tr><td>'.$langs->trans("Address").'</td><td class="valeur">'.nl2br($adh->adresse).'</td></tr>';
// CP / Ville // CP / Ville
@ -1013,22 +1051,16 @@ if ($rowid && $action != 'edit')
// Status // Status
print '<tr><td>'.$langs->trans("Status").'</td><td class="valeur">'.$adh->getLibStatut(4).'</td></tr>'; print '<tr><td>'.$langs->trans("Status").'</td><td class="valeur">'.$adh->getLibStatut(4).'</td></tr>';
// Login Dolibarr // Other attributs
print '<tr><td>'.$langs->trans("DolibarrLogin").'</td><td class="valeur">'; foreach($adho->attribute_label as $key=>$value)
if ($adh->user_id) {
{ print "<tr><td>$value</td><td>".$adh->array_options["options_$key"]."&nbsp;</td></tr>\n";
$dolibarr_user=new User($db); }
$dolibarr_user->id=$adh->user_id;
$result=$dolibarr_user->fetch();
print $dolibarr_user->getLoginUrl(1);
}
else print $langs->trans("NoDolibarrAccess");
print '</td></tr>';
// Third party Dolibarr // Third party Dolibarr
if ($conf->societe->enabled) if ($conf->societe->enabled)
{ {
print '<tr><td>'.$langs->trans("ThirdPartyDolibarr").'</td><td class="valeur">'; print '<tr><td>'.$langs->trans("LinkedToDolibarrThirdParty").'</td><td class="valeur">';
if ($adh->fk_soc) if ($adh->fk_soc)
{ {
$company=new Societe($db); $company=new Societe($db);
@ -1042,11 +1074,17 @@ if ($rowid && $action != 'edit')
print '</td></tr>'; print '</td></tr>';
} }
// Other attributs // Login Dolibarr
foreach($adho->attribute_label as $key=>$value) print '<tr><td>'.$langs->trans("LinkedToDolibarrUser").'</td><td class="valeur">';
{ if ($adh->user_id)
print "<tr><td>$value</td><td>".$adh->array_options["options_$key"]."&nbsp;</td></tr>\n"; {
} $dolibarr_user=new User($db);
$dolibarr_user->id=$adh->user_id;
$result=$dolibarr_user->fetch();
print $dolibarr_user->getLoginUrl(1);
}
else print $langs->trans("NoDolibarrAccess");
print '</td></tr>';
print "</table>\n"; print "</table>\n";
print '</form>'; print '</form>';
@ -1122,19 +1160,6 @@ if ($rowid && $action != 'edit')
} }
} }
// Create user
if (! $user->societe_id && ! $adh->user_id)
{
if ($user->rights->user->user->creer)
{
print '<a class="butAction" href="fiche.php?rowid='.$adh->id.'&amp;action=create_user">'.$langs->trans("CreateDolibarrLogin").'</a>';
}
else
{
print "<font class=\"butActionRefused\" href=\"#\">".$langs->trans("CreateDolibarrLogin")."</font>";
}
}
// Create third party // Create third party
if ($conf->societe->enabled && ! $adh->fk_soc) if ($conf->societe->enabled && ! $adh->fk_soc)
{ {
@ -1148,6 +1173,19 @@ if ($rowid && $action != 'edit')
} }
} }
// Create user
if (! $user->societe_id && ! $adh->user_id)
{
if ($user->rights->user->user->creer)
{
print '<a class="butAction" href="fiche.php?rowid='.$adh->id.'&amp;action=create_user">'.$langs->trans("CreateDolibarrLogin").'</a>';
}
else
{
print "<font class=\"butActionRefused\" href=\"#\">".$langs->trans("CreateDolibarrLogin")."</font>";
}
}
// Supprimer // Supprimer
if ($user->rights->adherent->supprimer) if ($user->rights->adherent->supprimer)
{ {

View File

@ -105,19 +105,22 @@ print '</form>';
# Affiche lignes des constantes # Affiche lignes des constantes
if ($all==1){ if ($all==1)
{
$sql = "SELECT rowid, name, value, note, entity "; $sql = "SELECT rowid, name, value, note, entity ";
$sql.= "FROM llx_const "; $sql.= "FROM llx_const ";
$sql.= "WHERE entity IN (0,".$conf->entity.") "; $sql.= "WHERE entity IN (0,".$conf->entity.") ";
$sql.= "ORDER BY name ASC"; $sql.= "ORDER BY name ASC";
}else{ }
else
{
$sql = "SELECT rowid, name, value, note, entity "; $sql = "SELECT rowid, name, value, note, entity ";
$sql.= "FROM llx_const "; $sql.= "FROM llx_const ";
$sql.= "WHERE visible = 1 "; $sql.= "WHERE visible = 1 ";
$sql.= "AND entity IN (0,".$conf->entity.") "; $sql.= "AND entity IN (0,".$conf->entity.") ";
$sql.= "ORDER BY name ASC"; $sql.= "ORDER BY name ASC";
} }
dol_syslog("Const::listConstant sql=".$sql,LOG_DEBUG); dol_syslog("Const::listConstant sql=".$sql);
$result = $db->query($sql); $result = $db->query($sql);
if ($result) if ($result)
{ {
@ -130,20 +133,21 @@ if ($result)
$obj = $db->fetch_object($result); $obj = $db->fetch_object($result);
$var=!$var; $var=!$var;
print '<form action="const.php" method="POST">'; print "\n";
print '<form action="'.DOL_URL_ROOT.'/admin/const.php" method="POST">';
print '<input type="hidden" name="action" value="update">'; print '<input type="hidden" name="action" value="update">';
print '<input type="hidden" name="rowid" value="'.$rowid.'">'; print '<input type="hidden" name="rowid" value="'.$obj->rowid.'">';
print '<input type="hidden" name="constname" value="'.$obj->name.'">'; print '<input type="hidden" name="constname" value="'.$obj->name.'">';
print "<tr $bc[$var] class=value><td>$obj->name</td>\n"; print "<tr $bc[$var] class=value><td>$obj->name</td>\n";
// Value // Value
print '<td>'; print '<td>';
print '<input type="text" class="flat" size="30" name="constvalue" value="'.stripslashes($obj->value).'">'; print '<input type="text" class="flat" size="30" name="constvalue" value="'.$obj->value.'">';
print '</td><td>'; print '</td><td>';
// Note // Note
print '<input type="text" class="flat" size="40" name="constnote" value="'.stripslashes(nl2br($obj->note)).'">'; print '<input type="text" class="flat" size="40" name="constnote" value="'.nl2br($obj->note).'">';
print '</td>'; print '</td>';
// Entity // Entity
@ -164,6 +168,7 @@ if ($result)
print "</td></tr>\n"; print "</td></tr>\n";
print '</form>'; print '</form>';
print "\n";
$i++; $i++;
} }
} }

View File

@ -71,8 +71,12 @@ ListOfGroupsForUser=List of groups for this user
UsersToAdd=Users to add to this group UsersToAdd=Users to add to this group
GroupsToAdd=Groups to add to this user GroupsToAdd=Groups to add to this user
NoLogin=No login NoLogin=No login
CreateDolibarrLogin=Create Dolibarr account LinkToCompanyContact=Link to third party / contact
CreateDolibarrThirdParty=Create third party LinkedToDolibarrMember=Link to member
LinkedToDolibarrUser=Link to Dolibarr user
LinkedToDolibarrThirdParty=Link to Dolibarr third party
CreateDolibarrLogin=Create a user
CreateDolibarrThirdParty=Create a third party
LoginAccountDisable=Account disabled, put a new login to activate it. LoginAccountDisable=Account disabled, put a new login to activate it.
LoginAccountDisableInDolibarr=Account disabled in Dolibarr. LoginAccountDisableInDolibarr=Account disabled in Dolibarr.
LoginAccountDisableInLdap=Account disabled in the domain. LoginAccountDisableInLdap=Account disabled in the domain.

View File

@ -71,7 +71,11 @@ ListOfGroupsForUser=Liste des groupes pour cet utilisateur
UsersToAdd=Utilisateur à ajouter à ce groupe UsersToAdd=Utilisateur à ajouter à ce groupe
GroupsToAdd=Groupes à ajouter pour cet utilisateur GroupsToAdd=Groupes à ajouter pour cet utilisateur
NoLogin=Pas de login NoLogin=Pas de login
CreateDolibarrLogin=Créer un compte Dolibarr LinkToCompanyContact=Lien tiers / contact
LinkedToDolibarrMember=Lien adhérent
LinkedToDolibarrUser=Lien utilisateur Dolibarr
LinkedToDolibarrThirdParty=Lien tiers Dolibarr
CreateDolibarrLogin=Créer un compte utilisateur
CreateDolibarrThirdParty=Créer un tiers CreateDolibarrThirdParty=Créer un tiers
LoginAccountDisable=Le compte est désactivé, mettre un nouveau login pour l'activer. LoginAccountDisable=Le compte est désactivé, mettre un nouveau login pour l'activer.
LoginAccountDisableInDolibarr=Le compte est désactivé sur Dolibarr. LoginAccountDisableInDolibarr=Le compte est désactivé sur Dolibarr.

View File

@ -154,7 +154,7 @@ function dol_loginfunction($langs,$conf,$mysoc)
print '<tr><td align="left" valign="top" nowrap="nowrap"> &nbsp; <b>'.$langs->trans("Entity").'</b> &nbsp; </td>'; print '<tr><td align="left" valign="top" nowrap="nowrap"> &nbsp; <b>'.$langs->trans("Entity").'</b> &nbsp; </td>';
print '<td valign="top" nowrap="nowrap">'; print '<td valign="top" nowrap="nowrap">';
$html->select_array('entity',$entity); print $html->selectarray('entity',$entity);
print '</td></tr>'; print '</td></tr>';
} }

View File

@ -81,21 +81,21 @@ function analyse_sql_injection(&$var)
$result = array(); $result = array();
foreach ($var as $key => $value) foreach ($var as $key => $value)
{ {
if (test_sql_inject($key) > 0) if (test_sql_inject($key) > 0)
{ {
unset($var[$key]); unset($var[$key]);
} }
else else
{ {
if (analyse_sql_injection($value)) if (analyse_sql_injection($value))
{ {
$var[$key] = $value; $var[$key] = $value;
} }
else else
{ {
unset($var[$key]); unset($var[$key]);
} }
} }
} }
return true; return true;
} }
@ -112,12 +112,8 @@ analyse_sql_injection($_POST);
// This is to make Dolibarr working with Plesk // This is to make Dolibarr working with Plesk
set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs'); set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs');
// Retrieve the entity in login form, and after in the cookie
$entityCookieName = "DOLENTITYID_dolibarr";
if (isset($_POST["entity"])) $_SESSION["dol_entity"] = $_POST["entity"];
if (isset($_COOKIE[$entityCookieName])) $_SESSION["dol_entity"] = $_COOKIE[$entityCookieName];
// Set and init common variables // Set and init common variables
// This include will set $conf, $langs and $mysoc objects
require_once("master.inc.php"); require_once("master.inc.php");
// Check if HTTPS // Check if HTTPS
@ -166,7 +162,27 @@ session_name($sessionname);
session_start(); session_start();
dol_syslog("Start session name=".$sessionname." Session id()=".session_id().", _SESSION['dol_login']=".(isset($_SESSION["dol_login"])?$_SESSION["dol_login"]:'').", ".ini_get("session.gc_maxlifetime")); dol_syslog("Start session name=".$sessionname." Session id()=".session_id().", _SESSION['dol_login']=".(isset($_SESSION["dol_login"])?$_SESSION["dol_login"]:'').", ".ini_get("session.gc_maxlifetime"));
// Disable modules (this must be after session_start) // Retrieve the entity in login form and in the cookie.
// This must be after the init of session (session_start) or this create serious pb of corrupted session.
$entityCookieName = "DOLENTITYID_dolibarr";
if (isset($_POST["loginfunction"]) && isset($_POST["entity"]))
{
$_SESSION["dol_entity"] = $_POST["entity"];
$conf->entity=$_SESSION["dol_entity"];
dol_syslog("Will work on entity ".$conf->entity);
// Now we need to reload the conf with the choosed entity
$conf->setValues($db);
}
elseif (isset($_COOKIE[$entityCookieName]))
{
$_SESSION["dol_entity"] = $_COOKIE[$entityCookieName];
$conf->entity=$_SESSION["dol_entity"];
dol_syslog("Will work on entity ".$conf->entity);
// Now we need to reload the conf with the choosed entity
$conf->setValues($db);
}
// Disable modules (this must be after session_start and after conf has been reloaded)
if (! empty($_REQUEST["disablemodules"])) $_SESSION["disablemodules"]=$_REQUEST["disablemodules"]; if (! empty($_REQUEST["disablemodules"])) $_SESSION["disablemodules"]=$_REQUEST["disablemodules"];
if (! empty($_SESSION["disablemodules"])) if (! empty($_SESSION["disablemodules"]))
{ {
@ -663,7 +679,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
{ {
print "<head>\n"; print "<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$conf->character_set_client."\">\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$conf->character_set_client."\">\n";
// Affiche meta // Affiche meta
print '<meta name="robots" content="noindex,nofollow">'."\n"; // Evite indexation par robots print '<meta name="robots" content="noindex,nofollow">'."\n"; // Evite indexation par robots
@ -1088,8 +1104,8 @@ function llxFooter($foot='')
} }
print '"</script>'."\n"; print '"</script>'."\n";
// Add Xdebug coverage of code // Add Xdebug coverage of code
if (defined('XDEBUGCOVERAGE')) { var_dump(xdebug_get_code_coverage()); } if (defined('XDEBUGCOVERAGE')) { var_dump(xdebug_get_code_coverage()); }
} }
if ($conf->use_javascript_ajax) if ($conf->use_javascript_ajax)
@ -1098,21 +1114,21 @@ function llxFooter($foot='')
} }
// If there is some logs in buffer to show // If there is some logs in buffer to show
if (sizeof($conf->logbuffer)) if (sizeof($conf->logbuffer))
{ {
print "\n"; print "\n";
print "<!-- Start of log output\n"; print "<!-- Start of log output\n";
//print '<div class="hidden">'."\n"; //print '<div class="hidden">'."\n";
foreach($conf->logbuffer as $logline) foreach($conf->logbuffer as $logline)
{ {
print $logline."<br>\n"; print $logline."<br>\n";
} }
//print '</div>'."\n"; //print '</div>'."\n";
print "End of log output -->\n"; print "End of log output -->\n";
} }
print "\n"; print "\n";
if ($foot) print '<!-- '.$foot.' -->'."\n"; if ($foot) print '<!-- '.$foot.' -->'."\n";
print "</body>\n"; print "</body>\n";
print "</html>\n"; print "</html>\n";

View File

@ -115,7 +115,8 @@ require_once(DOL_DOCUMENT_ROOT."/core/conf.class.php");
$conf = new Conf(); $conf = new Conf();
// Retrieve the entity // Retrieve the entity
if (isset($_SESSION["dol_entity"])) $conf->entity = $_SESSION["dol_entity"]; // Removed: The session has not been initialized yet so using SESSION is forbidden here
//if (isset($_SESSION["dol_entity"])) $conf->entity = $_SESSION["dol_entity"];
// Identifiant propres au serveur base de donnee // Identifiant propres au serveur base de donnee
$conf->db->host = $dolibarr_main_db_host; $conf->db->host = $dolibarr_main_db_host;

View File

@ -684,7 +684,7 @@ class User extends CommonObject
} }
/** /**
* \brief Cree l'utilisateur en base * \brief Create user in database
* \param user Objet user qui demande la creation * \param user Objet user qui demande la creation
* \param notrigger 1 ne declenche pas les triggers, 0 sinon * \param notrigger 1 ne declenche pas les triggers, 0 sinon
* \return int <0 si KO, id compte cree si OK * \return int <0 si KO, id compte cree si OK
@ -693,8 +693,9 @@ class User extends CommonObject
{ {
global $conf,$langs; global $conf,$langs;
// Nettoyage parametres // Clean parameters
$this->login = trim($this->login); $this->login = trim($this->login);
if (! isset($this->entity)) $this->entity=$conf->entity; // If not defined, we use default value
dol_syslog("User::Create login=".$this->login.", user=".(is_object($user)?$user->id:''), LOG_DEBUG); dol_syslog("User::Create login=".$this->login.", user=".(is_object($user)?$user->id:''), LOG_DEBUG);
@ -970,7 +971,7 @@ class User extends CommonObject
dol_syslog("User::update notrigger=".$notrigger.", nosyncmember=".$nosyncmember); dol_syslog("User::update notrigger=".$notrigger.", nosyncmember=".$nosyncmember);
// Nettoyage parametres // Clean parameters
$this->nom = trim($this->nom); $this->nom = trim($this->nom);
$this->prenom = trim($this->prenom); $this->prenom = trim($this->prenom);
$this->fullname = $this->prenom." ".$this->nom; $this->fullname = $this->prenom." ".$this->nom;
@ -1025,9 +1026,23 @@ class User extends CommonObject
} }
} }
if ($nbrowsaffected) // If user is linked to a member, remove old link to this member
if ($this->fk_member > 0)
{ {
if ($this->fk_member && ! $nosyncmember) $sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member = NULL where fk_member = ".$this->fk_member;
dol_syslog("User::update sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) { $this->error=$this->db->error(); $this->db->rollback(); return -5; }
}
// Set link to user
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member =".($this->fk_member>0?$this->fk_member:'null')." where rowid = ".$this->id;
dol_syslog("User::update sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) { $this->error=$this->db->error(); $this->db->rollback(); return -5; }
if ($nbrowsaffected) // If something has changed in data
{
if ($this->fk_member > 0 && ! $nosyncmember)
{ {
require_once(DOL_DOCUMENT_ROOT."/adherents/adherent.class.php"); require_once(DOL_DOCUMENT_ROOT."/adherents/adherent.class.php");
@ -1042,7 +1057,7 @@ class User extends CommonObject
$adh->nom=$this->nom; $adh->nom=$this->nom;
$adh->login=$this->login; $adh->login=$this->login;
$adh->pass=$this->pass; $adh->pass=$this->pass;
$adh->societe=$this->societe_id; $adh->societe=(empty($adh->societe) && $this->societe_id ? $this->societe_id : $adh->societe);
$adh->email=$this->email; $adh->email=$this->email;
$adh->phone=$this->office_phone; $adh->phone=$this->office_phone;

View File

@ -829,7 +829,9 @@ else
print '<td colspan="2">'.$fuser->prenom.'</td>'; print '<td colspan="2">'.$fuser->prenom.'</td>';
print "</tr>\n"; print "</tr>\n";
$rowspan=12; $rowspan=11;
if ($conf->societe->enabled) $rowspan++;
if ($conf->adherent->enabled) $rowspan++;
// Login // Login
print '<tr><td width="25%" valign="top">'.$langs->trans("Login").'</td>'; print '<tr><td width="25%" valign="top">'.$langs->trans("Login").'</td>';
@ -922,30 +924,6 @@ else
} }
print '</td></tr>'; print '</td></tr>';
// Company / Contact
print '<tr><td width="25%" valign="top">'.$langs->trans("Company").' / '.$langs->trans("Contact").'</td>';
print '<td>';
if ($fuser->societe_id > 0)
{
$societe = new Societe($db);
$societe->fetch($fuser->societe_id);
print $societe->getNomUrl(1,'');
}
else
{
print $langs->trans("ThisUserIsNot");
}
if ($fuser->contact_id)
{
$contact = new Contact($db);
$contact->fetch($fuser->contact_id);
if ($fuser->societe_id > 0) print ' / ';
else print '<br>';
print '<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$fuser->contact_id.'">'.img_object($langs->trans("ShowContact"),'contact').' '.dol_trunc($contact->getFullName($langs),32).'</a>';
}
print '</td>';
print "</tr>\n";
// Tel pro // Tel pro
print '<tr><td width="25%" valign="top">'.$langs->trans("PhonePro").'</td>'; print '<tr><td width="25%" valign="top">'.$langs->trans("PhonePro").'</td>';
print '<td>'.dol_print_phone($fuser->office_phone,'',0,0,1).'</td>'; print '<td>'.dol_print_phone($fuser->office_phone,'',0,0,1).'</td>';
@ -1000,12 +978,39 @@ else
print "</tr>\n"; print "</tr>\n";
} }
// Company / Contact
if ($conf->societe->enabled)
{
print '<tr><td width="25%" valign="top">'.$langs->trans("LinkToCompanyContact").'</td>';
print '<td>';
if ($fuser->societe_id > 0)
{
$societe = new Societe($db);
$societe->fetch($fuser->societe_id);
print $societe->getNomUrl(1,'');
}
else
{
print $langs->trans("ThisUserIsNot");
}
if ($fuser->contact_id)
{
$contact = new Contact($db);
$contact->fetch($fuser->contact_id);
if ($fuser->societe_id > 0) print ' / ';
else print '<br>';
print '<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$fuser->contact_id.'">'.img_object($langs->trans("ShowContact"),'contact').' '.dol_trunc($contact->getFullName($langs),32).'</a>';
}
print '</td>';
print "</tr>\n";
}
// Module Adherent // Module Adherent
if ($conf->adherent->enabled) if ($conf->adherent->enabled)
{ {
$langs->load("members"); $langs->load("members");
print '<tr><td width="25%" valign="top">'.$langs->trans("MemberAccount").'</td>'; print '<tr><td width="25%" valign="top">'.$langs->trans("LinkedToDolibarrMember").'</td>';
print '<td colspan="2">'; print '<td>';
if ($fuser->fk_member) if ($fuser->fk_member)
{ {
$adh=new Adherent($db); $adh=new Adherent($db);
@ -1261,7 +1266,9 @@ else
print '<input type="hidden" name="entity" value="'.$conf->entity.'">'; print '<input type="hidden" name="entity" value="'.$conf->entity.'">';
print '<table width="100%" class="border">'; print '<table width="100%" class="border">';
$rowspan=10; $rowspan=9;
if ($conf->societe->enabled) $rowspan++;
if ($conf->adherent->enabled) $rowspan++;
print '<tr><td width="25%" valign="top">'.$langs->trans("Ref").'</td>'; print '<tr><td width="25%" valign="top">'.$langs->trans("Ref").'</td>';
print '<td colspan="2">'; print '<td colspan="2">';
@ -1398,28 +1405,6 @@ else
} }
print '</td></tr>'; print '</td></tr>';
// Company / Contact
print '<tr><td width="25%" valign="top">'.$langs->trans("Company").' / '.$langs->trans("Contact").'</td>';
print '<td>';
if ($fuser->societe_id > 0)
{
$societe = new Societe($db);
$societe->fetch($fuser->societe_id);
print $societe->getNomUrl(1,'');
if ($fuser->contact_id)
{
$contact = new Contact($db);
$contact->fetch($fuser->contact_id);
print ' / '.'<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$fuser->contact_id.'">'.img_object($langs->trans("ShowContact"),'contact').' '.dol_trunc($contact->getFullName($langs),32).'</a>';
}
}
else
{
print $langs->trans("ThisUserIsNot");
}
print '</td>';
print "</tr>\n";
// Tel pro // Tel pro
print "<tr>".'<td valign="top">'.$langs->trans("PhonePro").'</td>'; print "<tr>".'<td valign="top">'.$langs->trans("PhonePro").'</td>';
print '<td>'; print '<td>';
@ -1511,6 +1496,52 @@ else
print '</td></tr>'; print '</td></tr>';
} }
// Company / Contact
if ($conf->societe->enabled)
{
print '<tr><td width="25%" valign="top">'.$langs->trans("LinkToCompanyContact").'</td>';
print '<td>';
if ($fuser->societe_id > 0)
{
$societe = new Societe($db);
$societe->fetch($fuser->societe_id);
print $societe->getNomUrl(1,'');
if ($fuser->contact_id)
{
$contact = new Contact($db);
$contact->fetch($fuser->contact_id);
print ' / '.'<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$fuser->contact_id.'">'.img_object($langs->trans("ShowContact"),'contact').' '.dol_trunc($contact->getFullName($langs),32).'</a>';
}
}
else
{
print $langs->trans("ThisUserIsNot");
}
print '</td>';
print "</tr>\n";
}
// Module Adherent
if ($conf->adherent->enabled)
{
$langs->load("members");
print '<tr><td width="25%" valign="top">'.$langs->trans("LinkedToDolibarrMember").'</td>';
print '<td>';
if ($fuser->fk_member)
{
$adh=new Adherent($db);
$adh->fetch($fuser->fk_member);
$adh->ref=$adh->login; // Force to show login instead of id
print $adh->getNomUrl(1);
}
else
{
print $langs->trans("UserNotLinkedToMember");
}
print '</td>';
print "</tr>\n";
}
print '<tr><td align="center" colspan="3">'; print '<tr><td align="center" colspan="3">';
print '<input value="'.$langs->trans("Save").'" class="button" type="submit" name="save">'; print '<input value="'.$langs->trans("Save").'" class="button" type="submit" name="save">';
print ' &nbsp; '; print ' &nbsp; ';

View File

@ -20,6 +20,7 @@
ALTER TABLE llx_adherent ADD UNIQUE INDEX uk_adherent_login (login); ALTER TABLE llx_adherent ADD UNIQUE INDEX uk_adherent_login (login);
ALTER TABLE llx_adherent ADD UNIQUE INDEX uk_adherent_fk_soc (fk_soc);
ALTER TABLE llx_adherent ADD INDEX idx_adherent_fk_soc (fk_soc); ALTER TABLE llx_adherent ADD INDEX idx_adherent_fk_soc (fk_soc);
ALTER TABLE llx_adherent ADD INDEX idx_adherent_fk_adherent_type (fk_adherent_type); ALTER TABLE llx_adherent ADD INDEX idx_adherent_fk_adherent_type (fk_adherent_type);