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
# fonts-dejavu-core | ttf-dejavu-core,
xdg-utils,
virtual-mysql-client,
mariadb-client | virtual-mysql-client,
${misc:Depends},
${perl:Depends}
Recommends: apache2 | lighttpd | httpd,
virtual-mysql-server
mariadb-server | virtual-mysql-server
Suggests: www-browser, php5-geoip
Description: Web based software to manage a company or foundation
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
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" ]
then
echo cp -pr $mydir/documents_demo/* "$documentdir/"
@ -174,7 +174,7 @@ then
echo cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images"
cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images"
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

View File

@ -194,7 +194,7 @@ class CommandeApi extends DolibarrApi
* @return array Array of order objects
*/
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("trips");
$langs->load("members");
$langs->load("compta");
$id = GETPOST('id','int');
$ref = GETPOST('ref','alpha');

View File

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

View File

@ -131,6 +131,7 @@ class Contact extends CommonObject
$clause = "AND";
}
$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;
$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.
// Detect images
if ($this->msgishtml)
{
@ -210,9 +210,10 @@ class CMailFile
$this->addr_bcc = $addr_bcc;
$this->deliveryreceipt = $deliveryreceipt;
$this->trackid = $trackid;
$smtp_headers = $this->write_smtpheaders();
if (! empty($moreinheader)) $smtp_headers.=$moreinheader; // $moreinheader contains the \r\n
// Define mime_headers
$mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list);
@ -272,8 +273,9 @@ class CMailFile
$smtps->setFrom($this->getValidAddress($from,0,1));
$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
if (! empty($moreinheader)) $smtps->setMoreInHeader($moreinheader);
if (! empty($this->html))
{
if (!empty($css))
@ -478,16 +480,16 @@ class CMailFile
'maildao'
));
$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;
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_ERR);
return $reshook;
}
// 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);
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);
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);
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);
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);
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);
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)
{
$this->error = 'Too much recipients in to:, cc:, bcc:';
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
return false;
}
// Action according to choosed sending method
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
{
@ -558,6 +562,7 @@ class CMailFile
{
$additionnalparam .= ($additionnalparam?' ':'').'-ba';
}
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);
@ -881,7 +886,7 @@ class CMailFile
// Receiver
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
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
* Possible usage for parameters:
* - 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
* - one couple id+type is provided and other type is provided -> this will set $justsource or $justtarget + criteria on other type
*
* - source id+type -> will get target list linked to source
* - 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 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;
$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
{

View File

@ -135,10 +135,13 @@ class modDeplacement extends DolibarrModules
$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)';
$childids = $user->getAllChildIds();
$childids[]=$user->id;
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
if (! empty($user)) // Not defined during migration process
{
$childids = $user->getAllChildIds();
$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">
<table class="left centpercent" title="Enter login details">
<table class="left centpercent" title="<?php echo $langs->trans("EnterLoginDetail"); ?>">
<!-- Login -->
<tr>
<td class="nowrap center valignmiddle">

View File

@ -191,7 +191,7 @@ if (constant('DOL_DATA_ROOT') === null) {
}
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))
{
print 'Click on following link. ';

View File

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

View File

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

View File

@ -17,7 +17,7 @@
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

View File

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