diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php
index 1a75a199dc684..02cba5cd91242 100644
--- a/htdocs/admin/company.php
+++ b/htdocs/admin/company.php
@@ -385,7 +385,7 @@
}
else
{
- print '';
+ print '';
}
print '';
print '';
diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index f686109d01528..55b6543c19596 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -2340,7 +2340,7 @@
$ref = dol_sanitizeFileName($object->ref);
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
- $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref, '/'));
+ $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref, '/').'([^\-])+');
$file = $fileparams['fullname'];
// Define output language
@@ -2365,7 +2365,7 @@
dol_print_error($db, $result);
exit();
}
- $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref, '/'));
+ $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref, '/').'([^\-])+');
$file = $fileparams['fullname'];
}
diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php
index 9fbdb2ffd7ef5..c8e96919f8431 100644
--- a/htdocs/comm/propal/list.php
+++ b/htdocs/comm/propal/list.php
@@ -56,6 +56,7 @@
$search_societe=GETPOST('search_societe','alpha');
$search_montant_ht=GETPOST('search_montant_ht','alpha');
$search_author=GETPOST('search_author','alpha');
+$search_product_category=GETPOST('search_product_category','int');
$search_town=GETPOST('search_town','alpha');
$viewstatut=$db->escape(GETPOST('viewstatut'));
$object_statut=$db->escape(GETPOST('propal_statut'));
@@ -91,6 +92,7 @@
$search_societe='';
$search_montant_ht='';
$search_author='';
+ $search_product_category='';
$search_town='';
$year='';
$month='';
@@ -145,14 +147,15 @@
$limit = $conf->liste_limit;
-if (! $sall) $sql = 'SELECT';
-else $sql = 'SELECT DISTINCT';
+$sql = 'SELECT';
+if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
$sql.= ' s.rowid, s.nom as name, s.town, s.client, s.code_client,';
$sql.= ' p.rowid as propalid, p.note_private, p.total_ht, p.ref, p.ref_client, p.fk_statut, p.fk_user_author, p.datep as dp, p.fin_validite as dfv,';
if (! $user->rights->societe->client->voir && ! $socid) $sql .= " sc.fk_soc, sc.fk_user,";
$sql.= ' u.login';
$sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s, '.MAIN_DB_PREFIX.'propal as p';
-if ($sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet as pd ON p.rowid=pd.fk_propal';
+if ($sall || $search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet as pd ON p.rowid=pd.fk_propal';
+if ($search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=pd.fk_product';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'user as u ON p.fk_user_author = u.rowid';
// We'll need this table joined to the select in order to filter by sale
if ($search_sale > 0 || (! $user->rights->societe->client->voir && ! $socid)) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
@@ -190,7 +193,8 @@
if ($sall) {
$sql .= natural_search(array('s.nom', 'p.note_private', 'p.note_public', 'pd.description'), $sall);
}
-if ($socid) $sql.= ' AND s.rowid = '.$socid;
+if ($search_product_category > 0) $sql.=" AND cp.fk_categorie = ".$search_product_category;
+if ($socid > 0) $sql.= ' AND s.rowid = '.$socid;
if ($viewstatut <> '')
{
$sql.= ' AND p.fk_statut IN ('.$viewstatut.')';
@@ -223,7 +227,7 @@
$result = $db->query($sql);
$nbtotalofrecords = $db->num_rows($result);
}
-
+//print $sql;
$sql.= $db->plimit($limit + 1,$offset);
$result=$db->query($sql);
@@ -265,15 +269,28 @@
if ($user->rights->societe->client->voir || $socid)
{
$langs->load("commercial");
- $moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': ';
+ $moreforfilter.='
';
+ $moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': ';
$moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user);
- $moreforfilter.=' ';
+ $moreforfilter.='
';
}
// If the user can view prospects other than his'
if ($user->rights->societe->client->voir || $socid)
{
- $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': ';
+ $moreforfilter.='';
+ $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': ';
$moreforfilter.=$form->select_dolusers($search_user,'search_user',1);
+ $moreforfilter.='
';
+ }
+ // If the user can view prospects other than his'
+ if ($conf->categorie->enabled && $user->rights->produit->lire)
+ {
+ include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
+ $moreforfilter.='';
+ $moreforfilter.=$langs->trans('IncludingProductWithTag'). ': ';
+ $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1);
+ $moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1);
+ $moreforfilter.='
';
}
if (! empty($moreforfilter))
{
diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php
index 84718e7dc894b..cc5251e65927a 100644
--- a/htdocs/commande/card.php
+++ b/htdocs/commande/card.php
@@ -2,7 +2,7 @@
/* Copyright (C) 2003-2006 Rodolphe Quiedeville
* Copyright (C) 2004-2014 Laurent Destailleur
* Copyright (C) 2005 Marc Barilley / Ocebo
- * Copyright (C) 2005-2013 Regis Houssin
+ * Copyright (C) 2005-2015 Regis Houssin
* Copyright (C) 2006 Andre Cianfarani
* Copyright (C) 2010-2013 Juanjo Menent
* Copyright (C) 2011 Philippe Grand
@@ -2334,7 +2334,6 @@
$ref = dol_sanitizeFileName($object->ref);
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
- $fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref, '/'));
$file = $fileparams['fullname'];
// Define output language
@@ -2359,7 +2358,7 @@
dol_print_error($db, $result);
exit();
}
- $fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref, '/'));
+ $fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref, '/').'([^\-])+');
$file = $fileparams['fullname'];
}
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 041bb42633f7c..6b145ffd4f20b 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -3,7 +3,7 @@
* Copyright (C) 2004 Eric Seigne
* Copyright (C) 2004-2014 Laurent Destailleur
* Copyright (C) 2005 Marc Barilley / Ocebo
- * Copyright (C) 2005-2012 Regis Houssin
+ * Copyright (C) 2005-2015 Regis Houssin
* Copyright (C) 2006 Andre Cianfarani
* Copyright (C) 2010-2015 Juanjo Menent
* Copyright (C) 2012-2013 Christophe Battarel
@@ -3821,7 +3821,7 @@
$ref = dol_sanitizeFileName($object->ref);
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
- $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref, '/'));
+ $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref, '/').'([^\-])+');
$file = $fileparams['fullname'];
// Define output language
@@ -3846,7 +3846,7 @@
dol_print_error($db, $result);
exit();
}
- $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref, '/'));
+ $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref, '/').'([^\-])+');
$file = $fileparams['fullname'];
}
diff --git a/htdocs/core/actions_extrafields.inc.php b/htdocs/core/actions_extrafields.inc.php
index 03d724b9bba4c..4c5f0b512d24d 100644
--- a/htdocs/core/actions_extrafields.inc.php
+++ b/htdocs/core/actions_extrafields.inc.php
@@ -1,5 +1,5 @@
+/* Copyright (C) 2011-2015 Laurent Destailleur
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -148,7 +148,21 @@
}
}
- $result=$extrafields->addExtraField($_POST['attrname'],$_POST['label'],$_POST['type'],$_POST['pos'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$default_value,$params,(GETPOST('alwayseditable')?1:0));
+ $result=$extrafields->addExtraField(
+ GETPOST('attrname'),
+ GETPOST('label'),
+ GETPOST('type'),
+ GETPOST('pos'),
+ $extrasize,
+ $elementtype,
+ (GETPOST('unique')?1:0),
+ (GETPOST('required')?1:0),
+ $default_value,
+ $params,
+ (GETPOST('alwayseditable')?1:0),
+ (GETPOST('perms')?GETPOST('perms'):''),
+ (GETPOST('list')?1:0)
+ );
if ($result > 0)
{
setEventMessage($langs->trans('SetupSaved'));
@@ -285,7 +299,20 @@
$params['options'][$key] = $value;
}
}
- $result=$extrafields->update($_POST['attrname'],$_POST['label'],$_POST['type'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$pos,$params,(GETPOST('alwayseditable')?1:0));
+ $result=$extrafields->update(
+ GETPOST('attrname'),
+ GETPOST('label'),
+ GETPOST('type'),
+ $extrasize,
+ $elementtype,
+ (GETPOST('unique')?1:0),
+ (GETPOST('required')?1:0),
+ $pos,
+ $params,
+ (GETPOST('alwayseditable')?1:0),
+ (GETPOST('perms')?GETPOST('perms'):''),
+ (GETPOST('list')?1:0)
+ );
if ($result > 0)
{
setEventMessage($langs->trans('SetupSaved'));
diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php
index 6e41384dbce9f..1aadc47b79ee1 100644
--- a/htdocs/core/class/CMailFile.class.php
+++ b/htdocs/core/class/CMailFile.class.php
@@ -37,7 +37,7 @@
class CMailFile
{
var $subject; // Topic: Subject of email
- var $addr_from; // From: Label and EMail of sender (must include '<>'). For example '' or 'John Doe ' or '')
+ var $addr_from; // From: Label and EMail of sender (must include '<>'). For example '' or 'John Doe ' or '')
// Sender: Who send the email ("Sender" has sent emails on behalf of "From").
// Use it when the "From" is an email of a domain that is a SPF protected domain, and sending smtp server is not this domain. In such case, use for Sender an email of the protected domain.
// Return-Path: Email where to send bounds.
@@ -387,7 +387,7 @@ function sendfile()
// If Windows, sendmail_from must be defined
if (isset($_SERVER["WINDIR"]))
{
- if (empty($this->addr_from)) $this->addr_from = 'robot@mydomain.com';
+ if (empty($this->addr_from)) $this->addr_from = 'robot@example.com';
@ini_set('sendmail_from',$this->getValidAddress($this->addr_from,2));
}
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 6370062a6a9dc..13d2881563f55 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -404,7 +404,7 @@ function setValues($db)
$this->css = "/theme/".$this->theme."/style.css.php";
// conf->email_from = email pour envoi par dolibarr des mails automatiques
- $this->email_from = "robot@domain.com";
+ $this->email_from = "robot@example.com";
if (! empty($this->global->MAIN_MAIL_EMAIL_FROM)) $this->email_from = $this->global->MAIN_MAIL_EMAIL_FROM;
// conf->notification->email_from = email pour envoi par Dolibarr des notifications
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index e770bb5ea721d..c236df1819929 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -4357,16 +4357,18 @@ static function selectarray($htmlname, $array, $id='', $show_empty=0, $key_in_la
global $conf, $langs;
// Do we want a multiselect ?
- $multiselect = 0;
- if (preg_match('/^multi/',$htmlname)) $multiselect = 1;
+ //$jsbeautify = 0;
+ //if (preg_match('/^multi/',$htmlname)) $jsbeautify = 1;
+ $jsbeautify = 1;
if ($value_as_key) $array=array_combine($array, $array);
$out='';
// Add code for jquery to use multiselect
- if ($addjscombo && empty($conf->dol_use_jmobile) && $multiselect)
+ if ($addjscombo && empty($conf->dol_use_jmobile) && $jsbeautify)
{
+ $minLengthToAutocomplete=0;
$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT')?constant('REQUIRE_JQUERY_MULTISELECT'):'select2':$conf->global->MAIN_USE_JQUERY_MULTISELECT;
$out.='