Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into develop

Conflicts:
	htdocs/core/tpl/login.tpl.php
This commit is contained in:
Laurent Destailleur 2017-01-12 11:32:51 +01:00
commit 2c6672d17a
16 changed files with 82 additions and 69 deletions

View File

@ -26,11 +26,11 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm |
# Misc dependencies # Misc dependencies
# fonts-dejavu-core | ttf-dejavu-core, # fonts-dejavu-core | ttf-dejavu-core,
xdg-utils, xdg-utils,
virtual-mysql-client, mariadb-client | virtual-mysql-client,
${misc:Depends}, ${misc:Depends},
${perl:Depends} ${perl:Depends}
Recommends: apache2 | lighttpd | httpd, Recommends: apache2 | lighttpd | httpd,
virtual-mysql-server mariadb-server | virtual-mysql-server
Suggests: www-browser, php5-geoip Suggests: www-browser, php5-geoip
Description: Web based software to manage a company or foundation Description: Web based software to manage a company or foundation
Dolibarr ERP & CRM is an easy to use open source/free software package for Dolibarr ERP & CRM is an easy to use open source/free software package for

View File

@ -162,7 +162,7 @@ export res=$?
# ---------------------------- copy demo files # ---------------------------- copy demo files
export documentdir=`cat $mydir/../../htdocs/conf/conf.php | grep '^\$dolibarr_main_data_root' | sed -e 's/$dolibarr_main_data_root=//' | sed -e 's/;//' | sed -e "s/'//g" ` export documentdir=`cat $mydir/../../htdocs/conf/conf.php | grep '^\$dolibarr_main_data_root' | sed -e 's/$dolibarr_main_data_root=//' | sed -e 's/;//' | sed -e "s/'//g" | sed -e 's/"//g' `
if [ "x$documentdir" != "x" ] if [ "x$documentdir" != "x" ]
then then
echo cp -pr $mydir/documents_demo/* "$documentdir/" echo cp -pr $mydir/documents_demo/* "$documentdir/"
@ -174,7 +174,7 @@ then
echo cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images" echo cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images"
cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images" cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images"
else else
echo Detection of documents directory failed so demo files were not copied. echo Detection of documents directory $documentdir failed so demo files were not copied.
fi fi

View File

@ -194,7 +194,7 @@ class CommandeApi extends DolibarrApi
* @return array Array of order objects * @return array Array of order objects
*/ */
function getListForSoc($socid = 0) { function getListForSoc($socid = 0) {
return getList(0,"s.rowid","ASC",0,0,$socid); return $this->getList(0,"s.rowid","ASC",0,0,$socid);
} }

View File

@ -54,6 +54,7 @@ $langs->load("loan");
$langs->load("donations"); $langs->load("donations");
$langs->load("trips"); $langs->load("trips");
$langs->load("members"); $langs->load("members");
$langs->load("compta");
$id = GETPOST('id','int'); $id = GETPOST('id','int');
$ref = GETPOST('ref','alpha'); $ref = GETPOST('ref','alpha');

View File

@ -449,7 +449,7 @@ foreach ($accounts as $key=>$type)
// Ref // Ref
if (! empty($arrayfields['b.ref']['checked'])) if (! empty($arrayfields['b.ref']['checked']))
{ {
print '<td class="titlefield">'.$acc->getNomUrl(1).'</td>'; print '<td>'.$acc->getNomUrl(1).'</td>';
if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['nbfield']++;
} }

View File

@ -131,6 +131,7 @@ class Contact extends CommonObject
$clause = "AND"; $clause = "AND";
} }
$sql.= ' '.$clause.' sp.entity IN ('.getEntity($this->element, 1).')'; $sql.= ' '.$clause.' sp.entity IN ('.getEntity($this->element, 1).')';
$sql.= " AND (sp.priv='0' OR (sp.priv='1' AND sp.fk_user_creat=".$user->id."))";
if ($user->societe_id > 0) $sql.=" AND sp.fk_soc = ".$user->societe_id; if ($user->societe_id > 0) $sql.=" AND sp.fk_soc = ".$user->societe_id;
$resql=$this->db->query($sql); $resql=$this->db->query($sql);

View File

@ -155,7 +155,7 @@ class CMailFile
} }
if (! empty($conf->global->MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML)) $this->msgishtml=1; // To force to send everything with content type html. if (! empty($conf->global->MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML)) $this->msgishtml=1; // To force to send everything with content type html.
// Detect images // Detect images
if ($this->msgishtml) if ($this->msgishtml)
{ {
@ -210,9 +210,10 @@ class CMailFile
$this->addr_bcc = $addr_bcc; $this->addr_bcc = $addr_bcc;
$this->deliveryreceipt = $deliveryreceipt; $this->deliveryreceipt = $deliveryreceipt;
$this->trackid = $trackid; $this->trackid = $trackid;
$smtp_headers = $this->write_smtpheaders(); $smtp_headers = $this->write_smtpheaders();
if (! empty($moreinheader)) $smtp_headers.=$moreinheader; // $moreinheader contains the \r\n if (! empty($moreinheader)) $smtp_headers.=$moreinheader; // $moreinheader contains the \r\n
// Define mime_headers // Define mime_headers
$mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list); $mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list);
@ -272,8 +273,9 @@ class CMailFile
$smtps->setFrom($this->getValidAddress($from,0,1)); $smtps->setFrom($this->getValidAddress($from,0,1));
$smtps->setTrackId($trackid); $smtps->setTrackId($trackid);
$smtps->setReplyTo($this->getValidAddress($from,0,1)); // Set property with this->smtps->setReplyTo after constructor if you want to use another value than the From $smtps->setReplyTo($this->getValidAddress($from,0,1)); // Set property with this->smtps->setReplyTo after constructor if you want to use another value than the From
if (! empty($moreinheader)) $smtps->setMoreInHeader($moreinheader); if (! empty($moreinheader)) $smtps->setMoreInHeader($moreinheader);
if (! empty($this->html)) if (! empty($this->html))
{ {
if (!empty($css)) if (!empty($css))
@ -478,16 +480,16 @@ class CMailFile
'maildao' 'maildao'
)); ));
$reshook = $hookmanager->executeHooks('doactions', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doactions', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
if (! empty($reshook)) if (! empty($reshook))
{ {
$this->error = "Error in hook maildao doactions " . $reshook; $this->error = "Error in hook maildao doactions " . $reshook;
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_ERR); dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_ERR);
return $reshook; return $reshook;
} }
// Check number of recipient is lower or equal than MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL // Check number of recipient is lower or equal than MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL
if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL=10; if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL=10;
$tmparray1 = explode(',', $this->addr_to); $tmparray1 = explode(',', $this->addr_to);
if (count($tmparray1) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL) if (count($tmparray1) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)
{ {
@ -495,6 +497,7 @@ class CMailFile
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING); dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
return false; return false;
} }
if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL=10;
$tmparray2 = explode(',', $this->addr_cc); $tmparray2 = explode(',', $this->addr_cc);
if (count($tmparray2) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL) if (count($tmparray2) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)
{ {
@ -502,6 +505,7 @@ class CMailFile
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING); dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
return false; return false;
} }
if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL=10;
$tmparray3 = explode(',', $this->addr_bcc); $tmparray3 = explode(',', $this->addr_bcc);
if (count($tmparray3) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL) if (count($tmparray3) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)
{ {
@ -509,14 +513,14 @@ class CMailFile
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING); dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
return false; return false;
} }
if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL=10;
if ((count($tmparray1)+count($tmparray2)+count($tmparray3)) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL) if ((count($tmparray1)+count($tmparray2)+count($tmparray3)) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
{ {
$this->error = 'Too much recipients in to:, cc:, bcc:'; $this->error = 'Too much recipients in to:, cc:, bcc:';
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING); dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
return false; return false;
} }
// Action according to choosed sending method // Action according to choosed sending method
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
{ {
@ -558,6 +562,7 @@ class CMailFile
{ {
$additionnalparam .= ($additionnalparam?' ':'').'-ba'; $additionnalparam .= ($additionnalparam?' ':'').'-ba';
} }
if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_ADDPARAM)) $additionnalparam .= ($additionnalparam?' ':'').'-U '.$additionnalparam; // Use -U to add additionnal params if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_ADDPARAM)) $additionnalparam .= ($additionnalparam?' ':'').'-U '.$additionnalparam; // Use -U to add additionnal params
dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port').", additionnal_parameters=".$additionnalparam, LOG_DEBUG); dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port').", additionnal_parameters=".$additionnalparam, LOG_DEBUG);
@ -881,7 +886,7 @@ class CMailFile
// Receiver // Receiver
if (isset($this->addr_cc) && $this->addr_cc) $out.= "Cc: ".$this->getValidAddress($this->addr_cc,2).$this->eol2; if (isset($this->addr_cc) && $this->addr_cc) $out.= "Cc: ".$this->getValidAddress($this->addr_cc,2).$this->eol2;
if (isset($this->addr_bcc) && $this->addr_bcc) $out.= "Bcc: ".$this->getValidAddress($this->addr_bcc,2).$this->eol2; // Question: bcc must not be into header, only into SMTP command "RCPT TO". Does php mail support this ? if (isset($this->addr_bcc) && $this->addr_bcc) $out.= "Bcc: ".$this->getValidAddress($this->addr_bcc,2).$this->eol2; // TODO Question: bcc must not be into header, only into SMTP command "RCPT TO". Does php mail support this ?
// Delivery receipt // Delivery receipt
if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $out.= "Disposition-Notification-To: ".$this->getValidAddress($this->addr_from,2).$this->eol2; if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $out.= "Disposition-Notification-To: ".$this->getValidAddress($this->addr_from,2).$this->eol2;

View File

@ -2448,9 +2448,10 @@ abstract class CommonObject
* Fetch array of objects linked to current object. Links are loaded into this->linkedObjects array and this->linkedObjectsIds * Fetch array of objects linked to current object. Links are loaded into this->linkedObjects array and this->linkedObjectsIds
* Possible usage for parameters: * Possible usage for parameters:
* - all parameters empty -> we look all link to current object (current object can be source or target) * - all parameters empty -> we look all link to current object (current object can be source or target)
* - one couple id+type is provided -> this will set $justsource or $justtarget * - source id+type -> will get target list linked to source
* - one couple id+type is provided and other type is provided -> this will set $justsource or $justtarget + criteria on other type * - target id+type -> will get source list linked to target
* * - source id+type + target type -> will get target list of the type
* - target id+type + target source -> will get source list of the type
* *
* @param int $sourceid Object source id (if not defined, id of object) * @param int $sourceid Object source id (if not defined, id of object)
* @param string $sourcetype Object source type (if not defined, element name of object) * @param string $sourcetype Object source type (if not defined, element name of object)

View File

@ -5876,7 +5876,7 @@ class Form
*/ */
global $dolibarr_main_url_root; global $dolibarr_main_url_root;
$ret.='<!-- Put link to gravatar -->'; $ret.='<!-- Put link to gravatar -->';
$ret.='<img class="photo'.$modulepart.($cssclass?' '.$cssclass:'').'" alt="Gravatar avatar" title="'.$email.' Gravatar avatar" border="0"'.($width?' width="'.$width.'"':'').($height?' height="'.$height.'"':'').' src="https://www.gravatar.com/avatar/'.dol_hash(strtolower(trim($email)),3).'?s='.$width.'&d='.urlencode(dol_buildpath($nophoto,2)).'">'; // gravatar need md5 hash $ret.='<img class="photo'.$modulepart.($cssclass?' '.$cssclass:'').'" alt="Gravatar avatar" title="'.$email.' Gravatar avatar" border="0"'.($width?' width="'.$width.'"':'').($height?' height="'.$height.'"':'').' src="https://www.gravatar.com/avatar/'.dol_hash(strtolower(trim($email)),3).'?s='.$width.'&d='.urlencode(dol_buildpath($nophoto,3)).'">'; // gravatar need md5 hash
} }
else else
{ {

View File

@ -135,10 +135,13 @@ class modDeplacement extends DolibarrModules
$this->export_sql_end[$r] .=' AND d.entity IN ('.getEntity('deplacement',1).')'; $this->export_sql_end[$r] .=' AND d.entity IN ('.getEntity('deplacement',1).')';
if (empty($user->rights->societe->client->voir)) $this->export_sql_end[$r] .=' AND (sc.fk_user = '.(empty($user)?0:$user->id).' OR d.fk_soc IS NULL)'; if (empty($user->rights->societe->client->voir)) $this->export_sql_end[$r] .=' AND (sc.fk_user = '.(empty($user)?0:$user->id).' OR d.fk_soc IS NULL)';
$childids = $user->getAllChildIds(); if (! empty($user)) // Not defined during migration process
$childids[]=$user->id; {
$childids = $user->getAllChildIds();
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')'; $childids[]=$user->id;
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
}
} }

View File

@ -89,7 +89,7 @@ $(document).ready(function () {
<div id="login_right"> <div id="login_right">
<table class="left centpercent" title="Enter login details"> <table class="left centpercent" title="<?php echo $langs->trans("EnterLoginDetail"); ?>">
<!-- Login --> <!-- Login -->
<tr> <tr>
<td class="nowrap center valignmiddle"> <td class="nowrap center valignmiddle">

View File

@ -191,7 +191,7 @@ if (constant('DOL_DATA_ROOT') === null) {
} }
if (@file_exists($lockfile)) if (@file_exists($lockfile))
{ {
print 'Install pages have been disabled for security reason (by lock file install.lock into dolibarr root directory).<br>'; print 'Install pages have been disabled for security reason (by lock file install.lock into dolibarr documents directory).<br>';
if (! empty($dolibarr_main_url_root)) if (! empty($dolibarr_main_url_root))
{ {
print 'Click on following link. '; print 'Click on following link. ';

View File

@ -460,6 +460,7 @@ DeletePicture=Picture delete
ConfirmDeletePicture=Confirm picture deletion? ConfirmDeletePicture=Confirm picture deletion?
Login=Login Login=Login
CurrentLogin=Current login CurrentLogin=Current login
EnterLoginDetail=Enter login details
January=January January=January
February=February February=February
March=March March=March

View File

@ -36,21 +36,21 @@ class Entrepot extends CommonObject
public $element='stock'; public $element='stock';
public $table_element='entrepot'; public $table_element='entrepot';
public $picto='stock'; public $picto='stock';
/** /**
* Warehouse closed, inactive * Warehouse closed, inactive
*/ */
const STATUS_CLOSED = 0; const STATUS_CLOSED = 0;
/** /**
* Warehouse open and operations for customer shipping, supplier dispatch, internal stock transfers/corrections allowed. * Warehouse open and operations for customer shipping, supplier dispatch, internal stock transfers/corrections allowed.
*/ */
const STATUS_OPEN_ALL = 1; const STATUS_OPEN_ALL = 1;
/** /**
* Warehouse open and operations for stock transfers/corrections allowed (not for customer shipping and supplier dispatch). * Warehouse open and operations for stock transfers/corrections allowed (not for customer shipping and supplier dispatch).
*/ */
const STATUS_OPEN_INTERNAL = 2; const STATUS_OPEN_INTERNAL = 2;
var $libelle; var $libelle;
var $description; var $description;
@ -61,10 +61,10 @@ class Entrepot extends CommonObject
var $zip; var $zip;
var $town; var $town;
var $fk_parent; var $fk_parent;
// List of short language codes for status // List of short language codes for status
var $statuts = array(); var $statuts = array();
/** /**
* Constructor * Constructor
* *
@ -85,7 +85,7 @@ class Entrepot extends CommonObject
{ {
$this->statuts[self::STATUS_OPEN_ALL] = 'Opened'; $this->statuts[self::STATUS_OPEN_ALL] = 'Opened';
} }
} }
/** /**
@ -97,9 +97,9 @@ class Entrepot extends CommonObject
function create($user) function create($user)
{ {
global $conf; global $conf;
$this->libelle = trim($this->libelle); $this->libelle = trim($this->libelle);
// Si libelle non defini, erreur // Si libelle non defini, erreur
if ($this->libelle == '') if ($this->libelle == '')
{ {
@ -112,7 +112,7 @@ class Entrepot extends CommonObject
$this->db->begin(); $this->db->begin();
$sql = "INSERT INTO ".MAIN_DB_PREFIX."entrepot (entity, datec, fk_user_author, label, fk_parent)"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."entrepot (entity, datec, fk_user_author, label, fk_parent)";
$sql .= " VALUES (".$conf->entity.",'".$this->db->idate($now)."',".$user->id.",'".$this->db->escape($this->libelle)."', ".($this->fk_parent > 0 ? $this->fk_parent : 'NULL').")"; $sql .= " VALUES (".$conf->entity.",'".$this->db->idate($now)."',".$user->id.",'".$this->db->escape($this->libelle)."', ".($this->fk_parent > 0 ? $this->fk_parent : "NULL").")";
dol_syslog(get_class($this)."::create", LOG_DEBUG); dol_syslog(get_class($this)."::create", LOG_DEBUG);
$result=$this->db->query($sql); $result=$this->db->query($sql);
@ -161,19 +161,19 @@ class Entrepot extends CommonObject
function update($id, $user) function update($id, $user)
{ {
if (empty($id)) $id = $this->id; if (empty($id)) $id = $this->id;
// Check if new parent is already a child of current warehouse // Check if new parent is already a child of current warehouse
if(!empty($this->fk_parent)) if(!empty($this->fk_parent))
{ {
$TChildWarehouses = array($id); $TChildWarehouses = array($id);
$TChildWarehouses = $this->get_children_warehouses($this->id, $TChildWarehouses); $TChildWarehouses = $this->get_children_warehouses($this->id, $TChildWarehouses);
if(in_array($this->fk_parent, $TChildWarehouses)) if(in_array($this->fk_parent, $TChildWarehouses))
{ {
$this->error = 'ErrorCannotAddThisParentWarehouse'; $this->error = 'ErrorCannotAddThisParentWarehouse';
return -2; return -2;
} }
} }
$this->libelle=trim($this->libelle); $this->libelle=trim($this->libelle);
$this->description=trim($this->description); $this->description=trim($this->description);
@ -186,7 +186,7 @@ class Entrepot extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."entrepot "; $sql = "UPDATE ".MAIN_DB_PREFIX."entrepot ";
$sql .= " SET label = '" . $this->db->escape($this->libelle) ."'"; $sql .= " SET label = '" . $this->db->escape($this->libelle) ."'";
$sql .= ", fk_parent = " . (($this->fk_parent > 0) ? $this->fk_parent : 'NULL'); $sql .= ", fk_parent = " . (($this->fk_parent > 0) ? $this->fk_parent : "NULL");
$sql .= ", description = '" . $this->db->escape($this->description) ."'"; $sql .= ", description = '" . $this->db->escape($this->description) ."'";
$sql .= ", statut = " . $this->statut; $sql .= ", statut = " . $this->statut;
$sql .= ", lieu = '" . $this->db->escape($this->lieu) ."'"; $sql .= ", lieu = '" . $this->db->escape($this->lieu) ."'";
@ -232,7 +232,7 @@ class Entrepot extends CommonObject
if ($result < 0) { $error++; } if ($result < 0) { $error++; }
// End call triggers // End call triggers
} }
$elements = array('stock_mouvement','product_stock','product_warehouse_properties'); $elements = array('stock_mouvement','product_stock','product_warehouse_properties');
foreach($elements as $table) foreach($elements as $table)
{ {
@ -516,12 +516,12 @@ class Entrepot extends CommonObject
function LibStatut($statut,$mode=0) function LibStatut($statut,$mode=0)
{ {
global $langs; global $langs;
$langs->load('stocks'); $langs->load('stocks');
$picto = 'statut5'; $picto = 'statut5';
$label = $langs->trans($this->statuts[$statut]); $label = $langs->trans($this->statuts[$statut]);
if ($mode == 0) if ($mode == 0)
{ {
@ -569,10 +569,10 @@ class Entrepot extends CommonObject
$langs->load("stocks"); $langs->load("stocks");
if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips
$result=''; $result='';
$label = ''; $label = '';
$label = '<u>' . $langs->trans("ShowWarehouse").'</u>'; $label = '<u>' . $langs->trans("ShowWarehouse").'</u>';
$label.= '<br><b>' . $langs->trans('Ref') . ':</b> ' . (empty($this->label)?$this->libelle:$this->label); $label.= '<br><b>' . $langs->trans('Ref') . ':</b> ' . (empty($this->label)?$this->libelle:$this->label);
if (! empty($this->lieu)) if (! empty($this->lieu))
@ -591,11 +591,11 @@ class Entrepot extends CommonObject
$linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"';
$linkclose.=' class="classfortooltip"'; $linkclose.=' class="classfortooltip"';
} }
$linkstart = '<a href="'.$url.'"'; $linkstart = '<a href="'.$url.'"';
$linkstart.=$linkclose.'>'; $linkstart.=$linkclose.'>';
$linkend='</a>'; $linkend='</a>';
if ($withpicto) $result.=($link.img_object(($notooltip?'':$label), 'stock', ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend.' '); if ($withpicto) $result.=($link.img_object(($notooltip?'':$label), 'stock', ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend.' ');
$result.=$linkstart.($showfullpath ? $this->get_full_arbo() : (empty($this->label)?$this->libelle:$this->label)).$linkend; $result.=$linkstart.($showfullpath ? $this->get_full_arbo() : (empty($this->label)?$this->libelle:$this->label)).$linkend;
return $result; return $result;
@ -628,60 +628,60 @@ class Entrepot extends CommonObject
$this->country_id=1; $this->country_id=1;
$this->country_code='FR'; $this->country_code='FR';
} }
/** /**
* Return full path to current warehouse * Return full path to current warehouse
* *
* @return string String full path to current warehouse separated by " >> " * @return string String full path to current warehouse separated by " >> "
*/ */
function get_full_arbo() function get_full_arbo()
{ {
global $user,$langs,$conf; global $user,$langs,$conf;
$TArbo = array(empty($this->label)?$this->libelle:$this->label); $TArbo = array(empty($this->label)?$this->libelle:$this->label);
$protection=100; // We limit depth of warehouses to 100 $protection=100; // We limit depth of warehouses to 100
$warehousetmp = new Entrepot($this->db); $warehousetmp = new Entrepot($this->db);
$parentid = $this->fk_parent; // If parent_id not defined on current object, we do not start consecutive searches of parents $parentid = $this->fk_parent; // If parent_id not defined on current object, we do not start consecutive searches of parents
$i=0; $i=0;
while ($parentid > 0 && $i < $protection) while ($parentid > 0 && $i < $protection)
{ {
$sql = 'SELECT fk_parent FROM '.MAIN_DB_PREFIX.'entrepot WHERE rowid = '.$parentid; $sql = 'SELECT fk_parent FROM '.MAIN_DB_PREFIX.'entrepot WHERE rowid = '.$parentid;
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
$objarbo = $this->db->fetch_object($resql); $objarbo = $this->db->fetch_object($resql);
if ($objarbo) if ($objarbo)
{ {
$warehousetmp->fetch($parentid); $warehousetmp->fetch($parentid);
$TArbo[] = $warehousetmp->label; $TArbo[] = $warehousetmp->label;
$parentid = $objarbo->fk_parent; $parentid = $objarbo->fk_parent;
} }
else break; else break;
} }
else dol_print_error($this->db); else dol_print_error($this->db);
$i++; $i++;
} }
return implode(' >> ', array_reverse($TArbo)); return implode(' >> ', array_reverse($TArbo));
} }
/** /**
* Return array of children warehouses ids from $id warehouse (recursive function) * Return array of children warehouses ids from $id warehouse (recursive function)
* *
* @param int $id id parent warehouse * @param int $id id parent warehouse
* @param array() $TChildWarehouses array which will contain all children (param by reference) * @param array() $TChildWarehouses array which will contain all children (param by reference)
* @return array() $TChildWarehouses array which will contain all children * @return array() $TChildWarehouses array which will contain all children
*/ */
function get_children_warehouses($id, &$TChildWarehouses) { function get_children_warehouses($id, &$TChildWarehouses) {
$sql = 'SELECT rowid $sql = 'SELECT rowid
FROM '.MAIN_DB_PREFIX.'entrepot FROM '.MAIN_DB_PREFIX.'entrepot
WHERE fk_parent = '.$id; WHERE fk_parent = '.$id;
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if($resql) { if($resql) {
while($res = $this->db->fetch_object($resql)) { while($res = $this->db->fetch_object($resql)) {
@ -689,9 +689,9 @@ class Entrepot extends CommonObject
$this->get_children_warehouses($res->rowid, $TChildWarehouses); $this->get_children_warehouses($res->rowid, $TChildWarehouses);
} }
} }
return $TChildWarehouses; return $TChildWarehouses;
} }
} }

View File

@ -17,7 +17,7 @@
use Luracast\Restler\RestException; use Luracast\Restler\RestException;
//require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
/** /**
* API class for contact object * API class for contact object

View File

@ -64,9 +64,10 @@ class CompanyBankAccount extends Account
* Create bank information record * Create bank information record
* *
* @param User $user User * @param User $user User
* @param int $notrigger 1=Disable triggers
* @return int <0 if KO, >= 0 if OK * @return int <0 if KO, >= 0 if OK
*/ */
function create(User $user = null) function create(User $user = null, $notrigger=0)
{ {
$now=dol_now(); $now=dol_now();