diff --git a/build/README b/build/README index 897a59c4eef..4816be8bc3a 100644 --- a/build/README +++ b/build/README @@ -28,9 +28,6 @@ Note: Prerequisites to build autoexe DoliWamp package: recommanded), open file build/exe/doliwamp.iss and click on button "Compile". The .exe file will be build into directory build. -- To build a translaction package, launch the script -> perl makepack-dolibarrlang.pl - - To build a theme package, launch the script > perl makepack-dolibarrtheme.pl diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index d96b84ab822..80f3283114c 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -2,7 +2,7 @@ #---------------------------------------------------------------------------- # \file build/makepack-dolibarr.pl # \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps) -# \author (c)2004-2014 Laurent Destailleur +# \author (c)2004-2015 Laurent Destailleur # # This is list of constant you can set to have generated packages moved into a specific dir: #DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild' @@ -15,8 +15,12 @@ use Cwd; + +# Change this to defined target for option 98 and 99 $PROJECT="dolibarr"; -$RPMSUBVERSION="auto"; # auto use value found into BUILD +$PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr"; +$PUBLISHBETARC="ldestailleur\@asso.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files"; + @LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages %REQUIREMENTPUBLISH=( @@ -41,6 +45,7 @@ $RPMSUBVERSION="auto"; # auto use value found into BUILD "makensis.exe"=>"NSIS" ); +$RPMSUBVERSION="auto"; # auto use value found into BUILD if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat if (-d "/usr/src/packages") { $RPMDIR="/usr/src/packages"; } # opensuse if (-d "/usr/src/RPM") { $RPMDIR="/usr/src/RPM"; } # mandrake @@ -59,8 +64,6 @@ $DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/; $SOURCE="$DIR/.."; $DESTI="$SOURCE/build"; -$PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr"; -$PUBLISHBETARC="ldestailleur\@asso.dolibarr.org:/home/dolibarr/dolibarr.org/files"; if (! $ENV{"DESTIBETARC"} || ! $ENV{"DESTISTABLE"}) { print "Error: Missing environment variables.\n"; @@ -213,9 +216,9 @@ else { printf(" %2d - %-14s (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target}); } $cpt=98; - printf(" %2d - %-14s (%s)\n",$cpt,"ASSO (publish)","Need ".join(",",values %REQUIREMENTPUBLISH)); + printf(" %2d - %-14s (%s)\n",$cpt,"ASSO (publish)","Need ".$REQUIREMENTPUBLISH{"ASSO"}); $cpt=99; - printf(" %2d - %-14s (%s)\n",$cpt,"SF (publish)","Need ".join(",",values %REQUIREMENTPUBLISH)); + printf(" %2d - %-14s (%s)\n",$cpt,"SF (publish)","Need ".$REQUIREMENTPUBLISH{"SF"}); # Ask which target to build print "Choose one target number or several separated with space (0 - ".$cpt."): "; @@ -1049,9 +1052,16 @@ if ($nboftargetok) { if (! $filesize) { next; } print "\n"; - print "Publish file ".$file." to ".$filestoscan{$file}."\n"; - - $destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD; + + if ($target eq 'SF') { + $destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD; + print "Publish file ".$file." to $NEWPUBLISH/".$filestoscan{$file}."\n"; + } + else + { + $destFolder="$NEWPUBLISH"; + print "Publish file ".$file." to $NEWPUBLISH\n"; + } # mkdir #my $ssh = Net::SSH::Perl->new("frs.sourceforge.net"); diff --git a/build/makepack-howto.txt b/build/makepack-howto.txt index 9e5004f4ba7..4e52c6a50eb 100644 --- a/build/makepack-howto.txt +++ b/build/makepack-howto.txt @@ -8,7 +8,7 @@ This files describe steps made by Dolibarr packaging team to make a beta version of Dolibarr, step by step. - Check all files are commited. -- Update version/info in /ChangeLog +- Update version/info in ChangeLog. To generate a changelog, you can do "git log x.y.z..HEAD --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e '^FIXED\|NEW'" - Update version number with x.y.z-w in htdocs/filefunc.inc.php - Update version number with x.y.z-w in build/debian/changelog - Update version number with x.y.z-w in build/rpm/*.spec @@ -17,10 +17,11 @@ beta version of Dolibarr, step by step. - Create a branch (x.y). - Run makepack-dolibarr.pl to generate all packages. + - Move build files into www.dolibarr.org web site (/home/dolibarr/wwwroot/files/lastbuild). -- Post a news on dolibarr.org/dolibarr.fr +- Post a news on dolibarr.org/dolibarr.fr + social networks - Send mail on mailings-list @@ -35,14 +36,16 @@ complete release of Dolibarr, step by step. - Update version number with x.y.z in build/rpm/*.spec - Commit all changes. -- Build Dolibarr and DoliWamp packages with makepack-dolibarr.pl +- Run makepack-dolibarr.pl to generate all packages. + - Check content of built packages. - Move build files into www.dolibarr.org web site (/home/dolibarr/wwwroot/files/stable). + - Run makepack-dolibarr.pl again with option to publish files on sourceforge. This will also add official tag. - Edit symbolic links in directory "/home/dolibarr/wwwroot/files/stable/xxx" on server to point to new files (used by some web sites). +- Post a news on dolibarr.org/dolibarr.fr + social networks - Send mail on mailings-list -- Send news on OpenSource web sites (if major beta or release) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 37758eea2ab..506dfacb5c8 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -421,7 +421,8 @@ class ActionComm extends CommonObject $resql=$this->db->query($sql); if ($resql) { - if ($this->db->num_rows($resql)) + $num=$this->db->num_rows($resql); + if ($num) { $obj = $this->db->fetch_object($resql); @@ -477,13 +478,15 @@ class ActionComm extends CommonObject $this->elementtype = $obj->elementtype; } $this->db->free($resql); - return 1; } else { $this->error=$this->db->lasterror(); return -1; } + + return $num; + } diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 206de4d523c..5c33fdaaf7e 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -144,7 +144,7 @@ if (empty($reshook)) // Reopen a closed order else if ($action == 'reopen' && $user->rights->commande->creer) { - if ($object->statut == Commande::STATUS_CLOSED) + if ($object->statut == STATUS_CANCELED || $object->statut == Commande::STATUS_CLOSED) { $result = $object->set_reopen($user); if ($result > 0) @@ -1269,7 +1269,7 @@ if ($action == 'create' && $user->rights->commande->creer) $demand_reason_id = (!empty($objectsrc->demand_reason_id)?$objectsrc->demand_reason_id:(!empty($soc->demand_reason_id)?$soc->demand_reason_id:0)); $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); - $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; + $dateorder = empty($conf->global->MAIN_AUTOFILL_DATE_ORDER)?-1:''; $datedelivery = (! empty($objectsrc->date_livraison) ? $objectsrc->date_livraison : ''); @@ -1290,7 +1290,7 @@ if ($action == 'create' && $user->rights->commande->creer) $demand_reason_id = $soc->demand_reason_id; $remise_percent = $soc->remise_percent; $remise_absolue = 0; - $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; + $dateorder = empty($conf->global->MAIN_AUTOFILL_DATE_ORDER)?-1:''; $projectid = 0; } $absolute_discount=$soc->getAvailableDiscounts(); @@ -1358,7 +1358,8 @@ if ($action == 'create' && $user->rights->commande->creer) } // Date print '' . $langs->trans('Date') . ''; - $form->select_date('', 're', '', '', '', "crea_commande", 1, 1); + //$form->select_date($dateorder, 're', '', '', '', "crea_commande", 1, 1); + $form->select_date('', 're', '', '', '', "crea_commande", 1, 1); // Always autofill date with current date print ''; // Date de livraison @@ -1366,7 +1367,7 @@ if ($action == 'create' && $user->rights->commande->creer) if (empty($datedelivery)) { if (! empty($conf->global->DATE_LIVRAISON_WEEK_DELAY)) $datedelivery = time() + ((7*$conf->global->DATE_LIVRAISON_WEEK_DELAY) * 24 * 60 * 60); - else $datedelivery=empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; + else $datedelivery=empty($conf->global->MAIN_AUTOFILL_DATE_DELIVERY)?-1:''; } $form->select_date($datedelivery, 'liv_', '', '', '', "crea_commande", 1, 1); print ""; @@ -2209,7 +2210,7 @@ if ($action == 'create' && $user->rights->commande->creer) } // Reopen a closed order - if ($object->statut == Commande::STATUS_CLOSED && $user->rights->commande->creer) { + if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $user->rights->commande->creer) { print ''; } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 1a5d8bf2ceb..259a3bc5d6a 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -60,6 +60,7 @@ class Commande extends CommonOrder var $ref_int; var $contactid; var $fk_project; + /** * Status of the order. Check the following constants: * - STATUS_CANCELED @@ -68,7 +69,7 @@ class Commande extends CommonOrder * - STATUS_CLOSED * @var int */ - var $statut; + var $statut; // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Delivered=Sent/Received, billed or not) var $facturee; // deprecated var $billed; // billed or not @@ -147,8 +148,7 @@ class Commande extends CommonOrder var $nbtodo; var $nbtodolate; - - /** + /** * ERR Not engouch stock */ const STOCK_NOT_ENOUGH_FOR_ORDER = -3; @@ -338,7 +338,7 @@ class Commande extends CommonOrder // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) + // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) // in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); @@ -477,7 +477,7 @@ class Commande extends CommonOrder global $conf,$langs; $error=0; - if ($this->statut != self::STATUS_CLOSED) + if ($this->statut != self::STATUS_CANCELED && $this->statut != self::STATUS_CLOSED) { dol_syslog(get_class($this)."::set_reopen order has not status closed", LOG_WARNING); return 0; @@ -501,7 +501,7 @@ class Commande extends CommonOrder else { $error++; - $this->error=$this->db->error(); + $this->error=$this->db->lasterror(); dol_print_error($this->db); } diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index e51ded5e297..17d2863a241 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -7,6 +7,7 @@ * Copyright (C) 2013 Christophe Battarel * Copyright (C) 2013 Cédric Salvador * Copyright (C) 2015 Frederic France + * Copyright (C) 2015 Marcos García * * 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 @@ -44,7 +45,7 @@ $orderyear=GETPOST("orderyear","int"); $ordermonth=GETPOST("ordermonth","int"); $deliveryyear=GETPOST("deliveryyear","int"); $deliverymonth=GETPOST("deliverymonth","int"); -$search_ref=GETPOST('search_ref','alpha'); +$search_ref=GETPOST('search_ref','alpha')!=''?GETPOST('search_ref','alpha'):GETPOST('sref','alpha'); $search_ref_customer=GETPOST('search_ref_customer','alpha'); $search_company=GETPOST('search_company','alpha'); $sall=GETPOST('sall'); @@ -114,7 +115,7 @@ $help_url="EN:Module_Customers_Orders|FR:Module_Commandes_Clients|ES:Módulo_Ped llxHeader('',$langs->trans("Orders"),$help_url); $sql = 'SELECT s.nom as name, s.rowid as socid, s.client, s.code_client, c.rowid, c.ref, c.total_ht, c.tva as total_tva, c.total_ttc, c.ref_client,'; -$sql.= ' c.date_valid, c.date_commande, c.note_private, c.date_livraison, c.fk_statut, c.facture as facturee'; +$sql.= ' c.date_valid, c.date_commande, c.note_private, c.date_livraison as date_delivery, c.fk_statut, c.facture as facturee'; $sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql.= ', '.MAIN_DB_PREFIX.'commande as c'; // We'll need this table joined to the select in order to filter by sale @@ -430,7 +431,7 @@ if ($resql) // warning late icon print ''; - if (($objp->fk_statut > 0) && ($objp->fk_statut < 3) && max($db->jdate($objp->date_commande),$db->jdate($objp->date_livraison)) < ($now - $conf->commande->client->warning_delay)) + if (($objp->fk_statut > 0) && ($objp->fk_statut < 3) && max($db->jdate($objp->date_commande),$db->jdate($objp->date_delivery)) < ($now - $conf->commande->client->warning_delay)) print img_picto($langs->trans("Late"),"warning"); if(!empty($objp->note_private)) { @@ -482,7 +483,7 @@ if ($resql) // Delivery date print ''; - print dol_print_date($db->jdate($objp->date_livraison), 'day'); + print dol_print_date($db->jdate($objp->date_delivery), 'day'); print ''; // Amount HT diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php index cc898d02c85..10712b971bc 100644 --- a/htdocs/core/actions_sendmails.inc.php +++ b/htdocs/core/actions_sendmails.inc.php @@ -132,9 +132,9 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO $replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>'; $message = $_POST['message']; $sendtobcc= GETPOST('sendtoccc'); - if ($mode == 'emailfromproposal') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO); - if ($mode == 'emailfromorder') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO); - if ($mode == 'emailfrominvoice') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO); + if ($mode == 'emailfromproposal') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO)); + if ($mode == 'emailfromorder') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO)); + if ($mode == 'emailfrominvoice') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO)); $deliveryreceipt = $_POST['deliveryreceipt']; diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 3457e8eed74..16e6af25cc7 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -805,7 +805,7 @@ class ExtraFields $sqlwhere.= ' WHERE 1'; } if (in_array($InfoFieldList[0],array('tablewithentity'))) $sqlwhere.= ' AND entity = '.$conf->entity; // Some tables may have field, some other not. For the moment we disable it. - //$sql.=preg_replace('/^ AND /','',$sqlwhere); + $sql.=$sqlwhere; //print $sql; dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG); diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index cfab0e52b7c..3c16facdd4a 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -211,7 +211,10 @@ class FormActions { $tmpa=dol_getdate($action->datep); $tmpb=dol_getdate($action->datef); - if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) print '-'.dol_print_date($action->datef,'hour'); + if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) + { + if ($tmpa['hours'] != $tmpb['hours'] || $tmpa['minutes'] != $tmpb['minutes'] && $tmpa['seconds'] != $tmpb['seconds']) print '-'.dol_print_date($action->datef,'hour'); + } else print '-'.dol_print_date($action->datef,'dayhour'); } print ''; diff --git a/htdocs/core/class/notify.class.php b/htdocs/core/class/notify.class.php index 8d54d05a810..7bfd12a2804 100644 --- a/htdocs/core/class/notify.class.php +++ b/htdocs/core/class/notify.class.php @@ -205,6 +205,8 @@ class Notify return 0; } + $oldref=(empty($object->oldref)?$object->ref:$object->oldref); + $newref=(empty($object->newref)?$object->ref:$object->newref); // Check notification per third party $sql = "SELECT s.nom, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,"; @@ -249,19 +251,19 @@ class Notify $link='/compta/facture.php?facid='.$object->id; $dir_output = $conf->facture->dir_output; $object_type = 'facture'; - $mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref); + $mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$newref); break; case 'ORDER_VALIDATE': $link='/commande/card.php?id='.$object->id; $dir_output = $conf->commande->dir_output; $object_type = 'order'; - $mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref); + $mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$newref); break; case 'PROPAL_VALIDATE': $link='/comm/propal.php?id='.$object->id; $dir_output = $conf->propal->dir_output; $object_type = 'propal'; - $mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref); + $mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$newref); break; case 'FICHINTER_VALIDATE': $link='/fichinter/card.php?id='.$object->id; @@ -282,7 +284,7 @@ class Notify $dir_output = $conf->fournisseur->dir_output.'/commande/'; $object_type = 'order_supplier'; $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; - $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs)); + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs)); $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; break; case 'ORDER_SUPPLIER_REFUSE': @@ -290,16 +292,16 @@ class Notify $dir_output = $conf->fournisseur->dir_output.'/commande/'; $object_type = 'order_supplier'; $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; - $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs)); + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$newref,$user->getFullName($langs)); $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; break; case 'SHIPPING_VALIDATE': $dir_output = $conf->expedition->dir_output.'/sending/'; $object_type = 'order_supplier'; - $mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref); + $mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref); break; } - $ref = dol_sanitizeFileName($object->ref); + $ref = dol_sanitizeFileName($newref); $pdf_path = $dir_output."/".$ref."/".$ref.".pdf"; if (! dol_is_file($pdf_path)) { @@ -391,72 +393,80 @@ class Notify $link = ''; $num++; - switch ($notifcode) { - case 'BILL_VALIDATE': - $link='/compta/facture.php?facid='.$object->id; - $dir_output = $conf->facture->dir_output; - $object_type = 'facture'; - $mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref); - break; - case 'ORDER_VALIDATE': - $link='/commande/card.php?id='.$object->id; - $dir_output = $conf->commande->dir_output; - $object_type = 'order'; - $mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref); - break; - case 'PROPAL_VALIDATE': - $link='/comm/propal.php?id='.$object->id; - $dir_output = $conf->propal->dir_output; - $object_type = 'propal'; - $mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref); - break; - case 'FICHINTER_VALIDATE': - $link='/fichinter/card.php?id='.$object->id; - $dir_output = $conf->facture->dir_output; - $object_type = 'ficheinter'; - $mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$object->ref); - break; + switch ($notifcode) { + case 'BILL_VALIDATE': + $link='/compta/facture.php?facid='.$object->id; + $dir_output = $conf->facture->dir_output; + $object_type = 'facture'; + $mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$newref); + break; + case 'ORDER_VALIDATE': + $link='/commande/card.php?id='.$object->id; + $dir_output = $conf->commande->dir_output; + $object_type = 'order'; + $mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$newref); + break; + case 'PROPAL_VALIDATE': + $link='/comm/propal.php?id='.$object->id; + $dir_output = $conf->propal->dir_output; + $object_type = 'propal'; + $mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$newref); + break; + case 'FICHINTER_VALIDATE': + $link='/fichinter/card.php?id='.$object->id; + $dir_output = $conf->facture->dir_output; + $object_type = 'ficheinter'; + $mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$newref); + break; case 'ORDER_SUPPLIER_VALIDATE': $link='/fourn/commande/card.php?id='.$object->id; $dir_output = $conf->fournisseur->dir_output.'/commande/'; $object_type = 'order_supplier'; $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; - $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderValidatedBy",$object->ref,$user->getFullName($langs)); + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderValidatedBy",$newref,$user->getFullName($langs)); $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; break; - case 'ORDER_SUPPLIER_APPROVE': - $link='/fourn/commande/card.php?id='.$object->id; - $dir_output = $conf->fournisseur->dir_output.'/commande/'; - $object_type = 'order_supplier'; - $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; - $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs)); - $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; - break; - case 'ORDER_SUPPLIER_REFUSE': - $link='/fourn/commande/card.php?id='.$object->id; - $dir_output = $conf->fournisseur->dir_output.'/commande/'; - $object_type = 'order_supplier'; - $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; - $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs)); - $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; - break; - case 'SHIPPING_VALIDATE': - $dir_output = $conf->expedition->dir_output.'/sending/'; - $object_type = 'order_supplier'; - $mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref); - break; - } - $ref = dol_sanitizeFileName($object->ref); - $pdf_path = $dir_output."/".$ref."/".$ref.".pdf"; - if (! dol_is_file($pdf_path)) - { - // We can't add PDF as it is not generated yet. - $filepdf = ''; - } - else - { - $filepdf = $pdf_path; - } + case 'ORDER_SUPPLIER_APPROVE': + $link='/fourn/commande/card.php?id='.$object->id; + $dir_output = $conf->fournisseur->dir_output.'/commande/'; + $object_type = 'order_supplier'; + $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs)); + $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; + break; + case 'ORDER_SUPPLIER_APPROVE2': + $link='/fourn/commande/card.php?id='.$object->id; + $dir_output = $conf->fournisseur->dir_output.'/commande/'; + $object_type = 'order_supplier'; + $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs)); + $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; + break; + case 'ORDER_SUPPLIER_REFUSE': + $link='/fourn/commande/card.php?id='.$object->id; + $dir_output = $conf->fournisseur->dir_output.'/commande/'; + $object_type = 'order_supplier'; + $mesg = $langs->transnoentitiesnoconv("Hello").",\n\n"; + $mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$newref,$user->getFullName($langs)); + $mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n"; + break; + case 'SHIPPING_VALIDATE': + $dir_output = $conf->expedition->dir_output.'/sending/'; + $object_type = 'order_supplier'; + $mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref); + break; + } + $ref = dol_sanitizeFileName($newref); + $pdf_path = $dir_output."/".$ref."/".$ref.".pdf"; + if (! dol_is_file($pdf_path)) + { + // We can't add PDF as it is not generated yet. + $filepdf = ''; + } + else + { + $filepdf = $pdf_path; + } $subject = '['.$application.'] '.$langs->transnoentitiesnoconv("DolibarrNotification"); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index f5e5cc6f10f..f687d79bcd1 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4062,9 +4062,10 @@ function dol_textishtml($msg,$option=0) if (preg_match('//i',$msg)) return true; - elseif (preg_match('/<(br|div|font|img|li|span|strong|table)>/i',$msg)) return true; - elseif (preg_match('/<(br|div|font|img|li|span|strong|table)\s+[^<>\/]*>/i',$msg)) return true; - elseif (preg_match('/<(br|div|font|img|li|span|strong|table)\s+[^<>\/]*\/>/i',$msg)) return true; + elseif (preg_match('/<(br|div|font|li|span|strong|table)>/i',$msg)) return true; + elseif (preg_match('/<(br|div|font|li|span|strong|table)\s+[^<>\/]*>/i',$msg)) return true; + elseif (preg_match('/<(br|div|font|li|span|strong|table)\s+[^<>\/]*\/>/i',$msg)) return true; + elseif (preg_match('/<(img)\s+[^<>]*>/i',$msg)) return true; // must accept elseif (preg_match('//i',$msg)) return true; elseif (preg_match('/&[A-Z0-9]{1,6};/i',$msg)) return true; // Html entities names (http://www.w3schools.com/tags/ref_entities.asp) elseif (preg_match('/&#[0-9]{2,3};/i',$msg)) return true; // Html entities numbers (http://www.w3schools.com/tags/ref_entities.asp) diff --git a/htdocs/core/login/functions_dolibarr.php b/htdocs/core/login/functions_dolibarr.php index 8654c866969..74da1f97ff0 100644 --- a/htdocs/core/login/functions_dolibarr.php +++ b/htdocs/core/login/functions_dolibarr.php @@ -112,18 +112,16 @@ function check_user_password_dolibarr($usertotest,$passwordtotest,$entitytotest= } // We must check entity - if ($passok) + if ($passok && ! empty($conf->multicompany->enabled)) // We must check entity { global $mc; - if (!isset($mc)) { - //Global not available, disable $conf->multicompany->enabled for safety - $conf->multicompany->enabled = false; - } - - if (! empty($conf->multicompany->enabled)) { + if (! isset($mc)) $conf->multicompany->enabled = false; // Global not available, disable $conf->multicompany->enabled for safety + else + { $ret = $mc->checkRight($obj->rowid, $entitytotest); - if ($ret < 0) { + if ($ret < 0) + { dol_syslog("functions_dolibarr::check_user_password_dolibarr Authentification ko entity '" . $entitytotest . "' not allowed for user '" . $obj->rowid . "'"); $login = ''; // force authentication failure } diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 346932ec61e..0ab64d406c8 100644 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -182,7 +182,40 @@ class InterfaceActionsAuto extends DolibarrTriggers $object->sendtoid=0; } - elseif ($action == 'ORDER_SENTBYMAIL') + elseif ($action == 'ORDER_CLOSE') + { + $langs->load("orders"); + + $object->actiontypecode='AC_OTH_AUTO'; + if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref); + $object->actionmsg=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref); + $object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login; + + $object->sendtoid=0; + } + elseif ($action == 'ORDER_CLASSIFY_BILLED') + { + $langs->load("orders"); + + $object->actiontypecode='AC_OTH_AUTO'; + if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderBilledInDolibarr",$object->ref); + $object->actionmsg=$langs->transnoentities("OrderBilledInDolibarr",$object->ref); + $object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login; + + $object->sendtoid=0; + } + elseif ($action == 'ORDER_CANCEL') + { + $langs->load("orders"); + + $object->actiontypecode='AC_OTH_AUTO'; + if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref); + $object->actionmsg=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref); + $object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login; + + $object->sendtoid=0; + } + elseif ($action == 'ORDER_SENTBYMAIL') { $langs->load("orders"); diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index 5c3400e5375..c2a5ee9d205 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -99,7 +99,7 @@ $entitytolang = array( 'task_time' => 'TaskTimeSpent', 'action' => 'Event', 'expensereport'=> 'ExpenseReport', - 'expensereport_line'=> 'ExpenseReportLine', + 'expensereport_line'=> 'ExpenseReportLine' ); $array_selected=isset($_SESSION["export_selected_fields"])?$_SESSION["export_selected_fields"]:array(); diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql index 29adb70c46e..1dde6d5d37c 100644 --- a/htdocs/install/mysql/data/llx_c_action_trigger.sql +++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql @@ -32,25 +32,29 @@ -- List of all managed triggered events (used for trigger agenda and for notification) -- delete from llx_c_action_trigger; -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22); @@ -58,7 +62,6 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19); diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql index 73312c6c613..9423b6ab607 100755 --- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql +++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql @@ -27,6 +27,9 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5); -- VPGSQL8.2 ALTER TABLE llx_contrat ALTER COLUMN fk_commercial_signature DROP NOT NULL; -- VPGSQL8.2 ALTER TABLE llx_contrat ALTER COLUMN fk_commercial_suivi DROP NOT NULL; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index e7341e98fe7..2edde818919 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -511,8 +511,8 @@ Module1400Name=Accounting Module1400Desc=Accounting management (double parties) Module1520Name=Document Generation Module1520Desc=Mass mail document generation -Module1780Name=Categories -Module1780Desc=Category management (products, suppliers and customers) +Module1780Name=Tags/Categories +Module1780Desc=Create tags/category (products, customers, suppliers, contacts or members) Module2000Name=WYSIWYG editor Module2000Desc=Allow to edit some text area using an advanced editor Module2200Name=Dynamic Prices diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 48c284e2022..87a22582431 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -48,7 +48,10 @@ InvoiceValidatedInDolibarr=Invoice %s validated InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS InvoiceBackToDraftInDolibarr=Invoice %s go back to draft status InvoiceDeleteDolibarr=Invoice %s deleted -OrderValidatedInDolibarr= Order %s validated +OrderValidatedInDolibarr=Order %s validated +OrderDeliveredInDolibarr=Order %s classified delivered +OrderCanceledInDolibarr=Order %s canceled +OrderBilledInDolibarr=Order %s classified billed OrderApprovedInDolibarr=Order %s approved OrderRefusedInDolibarr=Order %s refused OrderBackToDraftInDolibarr=Order %s go back to draft status @@ -92,4 +95,4 @@ WorkingDaysRange=Working days range AddEvent=Create event MyAvailability=My availability ActionType=Event type -DateActionBegin=Start event date \ No newline at end of file +DateActionBegin=Start event date diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang index 7a3c7f0c288..11b1dc8eac0 100644 --- a/htdocs/langs/en_US/categories.lang +++ b/htdocs/langs/en_US/categories.lang @@ -1,64 +1,62 @@ # Dolibarr language file - Source file is en_US - categories -Category=Category -Categories=Categories -Rubrique=Category -Rubriques=Categories -categories=categories -TheCategorie=The category -NoCategoryYet=No category of this type created +Rubrique=Tag/Category +Rubriques=Tags/Categories +categories=tags/categories +TheCategorie=The tag/category +NoCategoryYet=No tag/category of this type created In=In AddIn=Add in modify=modify Classify=Classify -CategoriesArea=Categories area -ProductsCategoriesArea=Products/Services categories area -SuppliersCategoriesArea=Suppliers categories area -CustomersCategoriesArea=Customers categories area -ThirdPartyCategoriesArea=Third parties categories area -MembersCategoriesArea=Members categories area -ContactsCategoriesArea=Contacts categories area -MainCats=Main categories +CategoriesArea=Tags/Categories area +ProductsCategoriesArea=Products/Services tags/categories area +SuppliersCategoriesArea=Suppliers tags/categories area +CustomersCategoriesArea=Customers tags/categories area +ThirdPartyCategoriesArea=Third parties tags/categories area +MembersCategoriesArea=Members tags/categories area +ContactsCategoriesArea=Contacts tags/categories area +MainCats=Main tags/categories SubCats=Subcategories CatStatistics=Statistics -CatList=List of categories -AllCats=All categories -ViewCat=View category -NewCat=Add category -NewCategory=New category -ModifCat=Modify category -CatCreated=Category created -CreateCat=Create category -CreateThisCat=Create this category +CatList=List of tags/categories +AllCats=All tags/categories +ViewCat=View tag/category +NewCat=Add tag/category +NewCategory=New tag/category +ModifCat=Modify tag/category +CatCreated=Tag/category created +CreateCat=Create tag/category +CreateThisCat=Create this tag/category ValidateFields=Validate the fields NoSubCat=No subcategory. SubCatOf=Subcategory -FoundCats=Found categories -FoundCatsForName=Categories found for the name : -FoundSubCatsIn=Subcategories found in the category -ErrSameCatSelected=You selected the same category several times -ErrForgotCat=You forgot to choose the category +FoundCats=Found tags/categories +FoundCatsForName=Tags/categories found for the name : +FoundSubCatsIn=Subcategories found in the tag/category +ErrSameCatSelected=You selected the same tag/category several times +ErrForgotCat=You forgot to choose the tag/category ErrForgotField=You forgot to inform the fields ErrCatAlreadyExists=This name is already used -AddProductToCat=Add this product to a category? -ImpossibleAddCat=Impossible to add the category -ImpossibleAssociateCategory=Impossible to associate the category to +AddProductToCat=Add this product to a tag/category? +ImpossibleAddCat=Impossible to add the tag/category +ImpossibleAssociateCategory=Impossible to associate the tag/category to WasAddedSuccessfully=%s was added successfully. -ObjectAlreadyLinkedToCategory=Element is already linked to this category. -CategorySuccessfullyCreated=This category %s has been added with success. -ProductIsInCategories=Product/service owns to following categories -SupplierIsInCategories=Third party owns to following suppliers categories -CompanyIsInCustomersCategories=This third party owns to following customers/prospects categories -CompanyIsInSuppliersCategories=This third party owns to following suppliers categories -MemberIsInCategories=This member owns to following members categories -ContactIsInCategories=This contact owns to following contacts categories -ProductHasNoCategory=This product/service is not in any categories -SupplierHasNoCategory=This supplier is not in any categories -CompanyHasNoCategory=This company is not in any categories -MemberHasNoCategory=This member is not in any categories -ContactHasNoCategory=This contact is not in any categories -ClassifyInCategory=Classify in category +ObjectAlreadyLinkedToCategory=Element is already linked to this tag/category. +CategorySuccessfullyCreated=This tag/category %s has been added with success. +ProductIsInCategories=Product/service owns to following tags/categories +SupplierIsInCategories=Third party owns to following suppliers tags/categories +CompanyIsInCustomersCategories=This third party owns to following customers/prospects tags/categories +CompanyIsInSuppliersCategories=This third party owns to following suppliers tags/categories +MemberIsInCategories=This member owns to following members tags/categories +ContactIsInCategories=This contact owns to following contacts tags/categories +ProductHasNoCategory=This product/service is not in any tags/categories +SupplierHasNoCategory=This supplier is not in any tags/categories +CompanyHasNoCategory=This company is not in any tags/categories +MemberHasNoCategory=This member is not in any tags/categories +ContactHasNoCategory=This contact is not in any tags/categories +ClassifyInCategory=Classify in tag/category NoneCategory=None -NotCategorized=Without category +NotCategorized=Without tag/category CategoryExistsAtSameLevel=This category already exists with this ref ReturnInProduct=Back to product/service card ReturnInSupplier=Back to supplier card @@ -66,22 +64,22 @@ ReturnInCompany=Back to customer/prospect card ContentsVisibleByAll=The contents will be visible by all ContentsVisibleByAllShort=Contents visible by all ContentsNotVisibleByAllShort=Contents not visible by all -CategoriesTree=Categories tree -DeleteCategory=Delete category -ConfirmDeleteCategory=Are you sure you want to delete this category ? -RemoveFromCategory=Remove link with categorie -RemoveFromCategoryConfirm=Are you sure you want to remove link between the transaction and the category ? -NoCategoriesDefined=No category defined -SuppliersCategoryShort=Suppliers category -CustomersCategoryShort=Customers category -ProductsCategoryShort=Products category -MembersCategoryShort=Members category -SuppliersCategoriesShort=Suppliers categories -CustomersCategoriesShort=Customers categories +CategoriesTree=Tags/categories tree +DeleteCategory=Delete tag/category +ConfirmDeleteCategory=Are you sure you want to delete this tag/category ? +RemoveFromCategory=Remove link with tag/categorie +RemoveFromCategoryConfirm=Are you sure you want to remove link between the transaction and the tag/category ? +NoCategoriesDefined=No tag/category defined +SuppliersCategoryShort=Suppliers tags/category +CustomersCategoryShort=Customers tags/category +ProductsCategoryShort=Products tags/category +MembersCategoryShort=Members tags/category +SuppliersCategoriesShort=Suppliers tags/categories +CustomersCategoriesShort=Customers tags/categories CustomersProspectsCategoriesShort=Custo./Prosp. categories -ProductsCategoriesShort=Products categories -MembersCategoriesShort=Members categories -ContactCategoriesShort=Contacts categories +ProductsCategoriesShort=Products tags/categories +MembersCategoriesShort=Members tags/categories +ContactCategoriesShort=Contacts tags/categories ThisCategoryHasNoProduct=This category does not contain any product. ThisCategoryHasNoSupplier=This category does not contain any supplier. ThisCategoryHasNoCustomer=This category does not contain any customer. @@ -90,23 +88,23 @@ ThisCategoryHasNoContact=This category does not contain any contact. AssignedToCustomer=Assigned to a customer AssignedToTheCustomer=Assigned to the customer InternalCategory=Internal category -CategoryContents=Category contents -CategId=Category id -CatSupList=List of supplier categories -CatCusList=List of customer/prospect categories -CatProdList=List of products categories -CatMemberList=List of members categories -CatContactList=List of contact categories and contact -CatSupLinks=Links between suppliers and categories -CatCusLinks=Links between customers/prospects and categories -CatProdLinks=Links between products/services and categories -CatMemberLinks=Links between members and categories -DeleteFromCat=Remove from category +CategoryContents=Tag/category contents +CategId=Tag/category id +CatSupList=List of supplier tags/categories +CatCusList=List of customer/prospect tags/categories +CatProdList=List of products tags/categories +CatMemberList=List of members tags/categories +CatContactList=List of contact tags/categories and contact +CatSupLinks=Links between suppliers and tags/categories +CatCusLinks=Links between customers/prospects and tags/categories +CatProdLinks=Links between products/services and tags/categories +CatMemberLinks=Links between members and tags/categories +DeleteFromCat=Remove from tags/category DeletePicture=Picture delete ConfirmDeletePicture=Confirm picture deletion? ExtraFieldsCategories=Complementary attributes -CategoriesSetup=Categories setup -CategorieRecursiv=Link with parent category automatically +CategoriesSetup=Tags/categories setup +CategorieRecursiv=Link with parent tag/category automatically CategorieRecursivHelp=If activated, product will also linked to parent category when adding into a subcategory AddProductServiceIntoCategory=Add the following product/service -ShowCategory=Show category \ No newline at end of file +ShowCategory=Show tag/category \ No newline at end of file diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 36fbd6c659b..671f1363498 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -395,8 +395,8 @@ Available=Available NotYetAvailable=Not yet available NotAvailable=Not available Popularity=Popularity -Categories=Categories -Category=Category +Categories=Tags/categories +Category=Tag/category By=By From=From to=to diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 116fff88809..d4a190a482a 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -541,7 +541,8 @@ if ($id > 0 || $ref) } // Number of supplier order running - if (! empty($conf->fournisseur->enabled)) { + if (! empty($conf->fournisseur->enabled)) + { if ($found) print '
'; else $found=1; $result=$product->load_stats_commande_fournisseur(0,'3,4'); print $langs->trans("ProductQtyInSuppliersOrdersRunning").': '.$product->stats_commande_fournisseur['qty']; @@ -551,7 +552,8 @@ if ($id > 0 || $ref) } // Number of product from supplier order already received (partial receipt) - if (! empty($conf->fournisseur->enabled)) { + if (! empty($conf->fournisseur->enabled)) + { if ($found) print '
'; else $found=1; print $langs->trans("ProductQtyInSuppliersShipmentAlreadyRecevied").': '.$product->stats_reception['qty']; } diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index fe8561b9ac8..8282be3eaea 100755 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -233,6 +233,9 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase $input='

abc

'; $after=dol_textishtml($input); $this->assertTrue($after); + $input=''; + $after=dol_textishtml($input); + $this->assertTrue($after,'Failure on test of img tag'); // False $input='xxx < br>';