Merge branch 'develop' into patch-3

This commit is contained in:
Cédric 2019-11-28 13:11:52 +01:00 committed by GitHub
commit 45bf3e4df9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
81 changed files with 2068 additions and 1629 deletions

179
ChangeLog
View File

@ -6,9 +6,184 @@ English Dolibarr ChangeLog
***** ChangeLog for 11.0.0 compared to 10.0.0 ***** ***** ChangeLog for 11.0.0 compared to 10.0.0 *****
For Users: For Users:
NEW: Module BOM is now stable (Module MO - Manufacturing Order is still in development).
NEW: A nicer dashboard for opened elements on Home page.
NEW: Add task widget and add task progress bar
NEW: Accountancy - Can add specific widget in this accountancy area.
NEW: Accountancy - Add export model LDCompta V9 & higher
NEW: Accountancy - Add permission on export, delete operations in ledger
NEW: Add 2 hidden options to set the default sorting (sort and order) on document page.
NEW: add ability to edit price without tax before adding a line of a predefined product.
NEW: Add a tab to setup "Opening hours" of company (information only).
NEW: Add attendee to ical export + cleanup.
NEW: Add bank data of users into the expense report exports.
NEW: add clone customers prices in clone product or service.
NEW: Add column of module source and POS terminal in the invoice list.
NEW: Add column last modification date into the table of targets for emailing.
NEW: Add column VAT rate in product list
NEW: add constant DISPATCH_FORCE_QTY_INPUT
NEW: Add constant MAIN_DISABLE_GLOBAL_WORKBOARD to disable workboard in home page
NEW: add country code in import product model
NEW: Add 'Direct Cash Payment' button in TakePOS
NEW: Add odt support to supplier orders
NEW: Add experimental SumUp payment to TakePOS (need to set a hidden constant)
NEW: Add feature to search a string into website containers
NEW: Add GET and POST /supplierinvoices/payments REST API endpoints.
NEW: Show progress bar for declared progression of tasks.
NEW: Add hidden option to update supplier buying price during receptions.
NEW: Add hidden option PROPOSAL_SHOW_INVOICED_AMOUNT (not reliable if one invoice is done on several order or several proposal)
NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order
NEW: Add hidden option THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER to copy extrafields from third party to order.
NEW: Add hidden options to send by email even for object with draft status.
NEW: Add last change date in page "Other setup". Can sort page on name/date.
NEW: Add link to export targets of an emailings into a CSV file.
NEW: Add link to the public interface on the ticket card.
NEW: Add location into event tooltip. Use full day for fullday events
NEW: add MAIN_LANGUAGES_ALLOWED constant to limit languages displayed.
NEW: add MAIN_SHOW_COMPANY_NAME_IN_BANNER_ADDRESS constant.
NEW: add mass actions in shipment list.
NEW: add minimum stock filter in load warehoues for product form.
NEW: add name_alias in fields to search all
NEW: add new rule fetchidfromcodeandlabel for categories import
NEW: add office phone for salespresentatives
NEW: add office phone & job on user tooltips
NEW: Add option MAIN_PDF_FORCE_FONT_SIZE
NEW: Add option MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS
NEW: Add option multiselect for developers on the selector of language.
NEW: Add option WORKFLOW_CAN_CREATE_PURCHASE_ORDER_FROM_PROPOSAL
NEW: Add pagination on list of object of a category
NEW: add parent category id or label in import category module
NEW: add parent id or ref column in warehouse import
NEW: Can set the Address/Contact by default on third parties.
NEW: Add search into template
NEW: Add shipment widget
NEW: add socialnetworks dictionary
NEW: Add statistics on product into contracts
NEW: Add status of warehouse in tooltip of a warehouse.
NEW: add supplier's product list
NEW: add units fields in buying price tab of product card
NEW: Add units in select products lines
NEW: Add upload document on account statement
NEW: Add widgets for BOMs and MOs
NEW: Amount invoiced column in proposal list
NEW: Ask the new label and new dates in confirm popup when cloning tax
NEW: auto set closing date and user on invoice
NEW: Avoid wrap between picto and text on getNomUrl
NEW: Balance Stripe connect account for supplier
NEW: Bank Add an option for colorize background color of debit or credit movement
NEW: Beautify the select box of warehouses
NEW: birthday widget for member
NEW: Widgets uses fiscal year
NEW: Can change supplier when cloning a Purchase Order
NEW: can choose lines while creating order from origin
NEW: Can crop/resize image attached on a bank record
NEW: Can defined a position of numbering submodules for thirdparties
NEW: Can edit date or RUM mandate.
NEW: Can edit link to the translation page in website module
NEW: Can edit the price of predefined product during adding in documents
NEW: Can enter price tax incl on vendor proposal and purchase orders
NEW: Can filter on description on bank account transaction lists.
NEW: Can filter on label on invoice in accounting vendor binding pages
NEW: Can load multilang translation in same step than fetch_lines
NEW: Can restrict access using DAV module to some host IPs only
NEW: Can restrict API usage to some IP only
NEW: Can select website templates from available default templates with a preview.
NEW: Can set a filter on object linked in modulebuilder.
NEW: Can set a squarred icon on your company setup
NEW: can specify hour start end for selectDate and step for minutes
NEW: Categories/Tags are also available on warehouses
NEW: Check if a resource is in use in an event
NEW: Code for extrafields uses the new array $extrafields->attributes
NEW: Compute column value from others columns in import module
NEW: Copy linked categories on product clone process.
NEW: Default for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION
NEW: Digitaria model for numbering accountancy thirdparty
NEW: Display membership in takepos if member linked to the thirdparty
NEW: Display supplier in objectline if defined
NEW: Add default duration of subscriptions on members type
NEW: Email template for Takepos (to send invoice)
NEW: Expense request and holiday validator fields
NEW: Export ledger table in Charlemagne format
NEW: Export livre Charlemagne
NEW: Extend option ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC for all virtual product stats (renamed into PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)
NEW: FCKeditor setup for tickets
NEW: GeoIP v2 support is natively provided -> So IPv6 is supported
NEW: List by closing date on order list and proposal list
NEW: Look and feel v11: Some setup pages are by default direclty in edit mode.
NEW: Management of retained warranty on situation invoices
NEW: Mass email action on invoice list use billing contact if exists
NEW: more living colors for charts and option for "color bind" people
NEW: Supports multiple payments in a TakePOS sale
NEW: multiselect with checkbox in categories/tags search for product list
NEW: Option to allow to create members from third-party
NEW: Platform compliance with Stripe Connect
NEW: print / send email form in TakePOS
NEW: Public holidays are now in a dictionary table (no more hard coded per country)
NEW: Better performance by reducing the $companystatic calls on some pages.
NEW: Replace the "info" tab on contract with the more complete "agenda" tab.
NEW: Save user of last modification in donation record.
NEW: Show html combo list instead input text for extrafields typed as list.
NEW: Show POS application and the terminal used on invoice card.
NEW: Add categories/tags for stocks.
NEW: Support Net Measure in product's card.php
NEW: Extrafields separator can be collapsed or not
NEW: Extrafields support on Leave requests.
NEW: Extrafields support on Salaries.
NEW: Extrafields support in Product supplier prices.
NEW: Add extrafields for warehouses
NEW: Add extrafields in export of expense report (and holiday)
NEW: The integrity checker now show also the expected size of files.
NEW: The order method in purchase order is now mandatory when recording an order.
NEW: update / delete stripe account for supplier
NEW: Use the gender of member for picto in member lists.
NEW: Use the squarre logo as favicon of pages
NEW: VAT list - Add date start & date end in filters
NEW: widget box for supplier orders awaiting reception
NEW: Update translations
NEW: #4301
For Developers: For Developers or integrators:
NEW: Add a manifest.json.php file for web app.
NEW: Removed deprecated code that create linked object from ->origin
NEW: experimental zapier for dolibarr
NEW: Accountancy - Add hook bookkeepinglist on general ledger
NEW: Can update product type with the update method.
NEW: add API shipment mode dictionnary
NEW: Add API to get Country by code and iso
NEW: Add API to get objects by ref, ref_ext, ...
NEW: Add anonymous telemetry
NEW: Add a category to a contact in API
NEW: Add fk projet on stock movement
NEW: Add hidden option to set fields for the quick search on products.
NEW: add hook on commongeneratedocument
NEW: Add hook on fileupload.class.php to enable modules to override…
NEW: Add hooks on index pages
NEW: adding 'formObjectOptions' hooks loading at card.php of adherents module
NEW: Add method getStructuredData for website
NEW: Add payments GET and POST REST API endpoints for supplierinvoices.
NEW: Add POST /bankaccounts/transfer REST API endpoint.
NEW: add "printBucktrackInfo" hook, an external module can add info
NEW: Add trigger DIRECT_DEBIT_ORDER_CREATE on widthdraw is missing
NEW: API to post documents for "product" and Delete document
NEW: add new function "setEntity()" and better compatibility with Multicompany
NEW: Can add a button "Create" after combo of object with modulebuilder.
NEW: contacts type dictionnary in api_setup.class.php
NEW: Look and feel v11: Introduce CSS "trforbreak"
NEW: list of measuring units API
NEW: get social networks dictionary by API
NEW: Get thirdparty's salesrepresentatives by API
NEW: get user connected informations in REST API
NEW: mode for list thirdparty API (add easy filter for supplier only)
NEW: purchase_prices API
NEW: Provides more complete demo data
NEW: Module builder can generate CSS of JS file.
NEW: Use a dedicated css for the pencil to edit a field.
NEW: multilangs in fetch_lines
NEW: Add more complete info for triggers actioncom
NEW: add multicurrency rate at currency list API
NEW: Update jquery library to 3.4.1
NEW: Upgrade ACE editor to v1.4.6
WARNING: WARNING:
@ -31,6 +206,8 @@ Following changes may create regressions for some external modules, but were nec
* Renamed property of thirdparty "statut_commercial" into "status_prospect_label" * Renamed property of thirdparty "statut_commercial" into "status_prospect_label"
* The jquery plugin/dependency multiselect has been removed. It was not used by Dolibarr core. * The jquery plugin/dependency multiselect has been removed. It was not used by Dolibarr core.
***** ChangeLog for 10.0.3 compared to 10.0.2 ***** ***** ChangeLog for 10.0.3 compared to 10.0.2 *****
IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card. IMPORTANT : This version fixes a serious bug in saving the units of weight, size, surface and volume on product card.
The unit were not saved correctly in database making calculation on shipments wrong. The unit were not saved correctly in database making calculation on shipments wrong.

View File

@ -431,7 +431,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
$connection = imap_open($connectstringsource, $object->login, $object->password); $connection = imap_open($connectstringsource, $object->login, $object->password);
} }
catch(Exception $e) catch (Exception $e)
{ {
print $e->getMessage(); print $e->getMessage();
} }

View File

@ -2,7 +2,7 @@
/* Copyright (C) 2012 Mikael Carlavan <contact@mika-carl.fr> /* Copyright (C) 2012 Mikael Carlavan <contact@mika-carl.fr>
* Copyright (C) 2017 ATM Consulting <contact@atm-consulting.fr> * Copyright (C) 2017 ATM Consulting <contact@atm-consulting.fr>
* Copyright (C) 2017 Pierre-Henry Favre <phf@atm-consulting.fr> * Copyright (C) 2017 Pierre-Henry Favre <phf@atm-consulting.fr>
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr> * Copyright (C) 2018-2019 Frédéric France <frederic.france@netlogic.fr>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport_rule.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport_rule.class.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("admin","other","trips","errors","dict")); $langs->loadLangs(array("admin", "other", "trips", "errors", "dict"));
if (!$user->admin) accessforbidden(); if (!$user->admin) accessforbidden();
@ -44,8 +44,8 @@ $action = GETPOST('action', 'alpha');
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$apply_to = GETPOST('apply_to'); $apply_to = GETPOST('apply_to');
$fk_user = GETPOST('fk_user'); $fk_user = GETPOST('fk_user', 'int');
$fk_usergroup = GETPOST('fk_usergroup'); $fk_usergroup = GETPOST('fk_usergroup', 'int');
$fk_c_type_fees = GETPOST('fk_c_type_fees'); $fk_c_type_fees = GETPOST('fk_c_type_fees');
$code_expense_rules_type = GETPOST('code_expense_rules_type'); $code_expense_rules_type = GETPOST('code_expense_rules_type');
@ -96,18 +96,18 @@ if ($action == 'save')
{ {
$object->setValues($_POST); $object->setValues($_POST);
if($apply_to=='U'){ if ($apply_to == 'U') {
$object->fk_user=$fk_user; $object->fk_user = (int) $fk_user;
$object->fk_usergroup=0; $object->fk_usergroup = 0;
$object->is_for_all=0; $object->is_for_all = 0;
}elseif($apply_to=='G'){ }elseif ($apply_to == 'G') {
$object->fk_usergroup=$fk_usergroup; $object->fk_usergroup = (int) $fk_usergroup;
$object->fk_user=0; $object->fk_user = 0;
$object->is_for_all=0; $object->is_for_all = 0;
}elseif($apply_to=='A'){ }elseif ($apply_to == 'A') {
$object->is_for_all=1; $object->is_for_all = 1;
$object->fk_user=0; $object->fk_user = 0;
$object->fk_usergroup=0; $object->fk_usergroup = 0;
} }
$object->dates = $dates; $object->dates = $dates;
@ -145,12 +145,12 @@ $tab_rules_type = array('EX_DAY' => $langs->trans('Day'), 'EX_MON' => $langs->tr
llxHeader('', $langs->trans("ExpenseReportsSetup")); llxHeader('', $langs->trans("ExpenseReportsSetup"));
$form=new Form($db); $form = new Form($db);
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("ExpenseReportsRulesSetup"), $linkback, 'title_setup'); print load_fiche_titre($langs->trans("ExpenseReportsRulesSetup"), $linkback, 'title_setup');
$head=expensereport_admin_prepare_head(); $head = expensereport_admin_prepare_head();
dol_fiche_head($head, 'expenserules', $langs->trans("ExpenseReportsRules"), -1, 'trip'); dol_fiche_head($head, 'expenserules', $langs->trans("ExpenseReportsRules"), -1, 'trip');
echo $langs->trans('ExpenseReportRulesDesc'); echo $langs->trans('ExpenseReportRulesDesc');

View File

@ -39,11 +39,11 @@ $action = GETPOST('action', 'alpha');
$value = GETPOST('value', 'alpha'); $value = GETPOST('value', 'alpha');
$label = GETPOST('label', 'alpha'); $label = GETPOST('label', 'alpha');
$scandir = GETPOST('scan_dir', 'alpha'); $scandir = GETPOST('scan_dir', 'alpha');
$type='contract'; $type = 'contract';
if (empty($conf->global->HOLIDAY_ADDON)) if (empty($conf->global->HOLIDAY_ADDON))
{ {
$conf->global->HOLIDAY_ADDON='mod_holiday_madona'; $conf->global->HOLIDAY_ADDON = 'mod_holiday_madonna';
} }
@ -56,12 +56,12 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
if ($action == 'updateMask') if ($action == 'updateMask')
{ {
$maskconst = GETPOST('maskconstholiday', 'alpha'); $maskconst = GETPOST('maskconstholiday', 'alpha');
$maskvalue = GETPOST('maskholiday', 'alpha'); $maskvalue = GETPOST('maskholiday', 'alpha');
if ($maskconst) $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity); if ($maskconst) $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity);
if (! $res > 0) $error++; if (!$res > 0) $error++;
if (! $error) if (!$error)
{ {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} }
@ -73,20 +73,20 @@ if ($action == 'updateMask')
elseif ($action == 'specimen') // For contract elseif ($action == 'specimen') // For contract
{ {
$modele= GETPOST('module', 'alpha'); $modele = GETPOST('module', 'alpha');
$holiday = new Holiday($db); $holiday = new Holiday($db);
$holiday->initAsSpecimen(); $holiday->initAsSpecimen();
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $file = ''; $classname = ''; $filefound = 0;
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php", 0); $file = dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php", 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = "pdf_".$modele; $classname = "pdf_".$modele;
break; break;
} }
@ -159,15 +159,15 @@ elseif ($action == 'setmod')
elseif ($action == 'set_other') elseif ($action == 'set_other')
{ {
$freetext= GETPOST('HOLIDAY_FREE_TEXT', 'none'); // No alpha here, we want exact string $freetext = GETPOST('HOLIDAY_FREE_TEXT', 'none'); // No alpha here, we want exact string
$res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); $res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity);
$draft= GETPOST('HOLIDAY_DRAFT_WATERMARK', 'alpha'); $draft = GETPOST('HOLIDAY_DRAFT_WATERMARK', 'alpha');
$res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); $res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity);
if (! $res1 > 0 || ! $res2 > 0) $error++; if (!$res1 > 0 || !$res2 > 0) $error++;
if (! $error) if (!$error)
{ {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} }
@ -182,16 +182,16 @@ elseif ($action == 'set_other')
* View * View
*/ */
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
llxHeader(); llxHeader();
$form=new Form($db); $form = new Form($db);
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("HolidaySetup"), $linkback, 'title_setup'); print load_fiche_titre($langs->trans("HolidaySetup"), $linkback, 'title_setup');
$head=holiday_admin_prepare_head(); $head = holiday_admin_prepare_head();
dol_fiche_head($head, 'holiday', $langs->trans("Holidays"), -1, 'holiday'); dol_fiche_head($head, 'holiday', $langs->trans("Holidays"), -1, 'holiday');
@ -222,18 +222,18 @@ foreach ($dirmodels as $reldir)
$handle = opendir($dir); $handle = opendir($dir);
if (is_resource($handle)) if (is_resource($handle))
{ {
while (($file = readdir($handle))!==false) while (($file = readdir($handle)) !== false)
{ {
if (substr($file, 0, 12) == 'mod_holiday_' && substr($file, dol_strlen($file)-3, 3) == 'php') if (substr($file, 0, 12) == 'mod_holiday_' && substr($file, dol_strlen($file) - 3, 3) == 'php')
{ {
$file = substr($file, 0, dol_strlen($file)-4); $file = substr($file, 0, dol_strlen($file) - 4);
require_once $dir.$file.'.php'; require_once $dir.$file.'.php';
$module = new $file($db); $module = new $file($db);
// Show modules according to features level // Show modules according to features level
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue; if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue;
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue; if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue;
if ($module->isEnabled()) if ($module->isEnabled())
@ -244,9 +244,9 @@ foreach ($dirmodels as $reldir)
// Show example of numbering model // Show example of numbering model
print '<td class="nowrap">'; print '<td class="nowrap">';
$tmp=$module->getExample(); $tmp = $module->getExample();
if (preg_match('/^Error/', $tmp)) { $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; } if (preg_match('/^Error/', $tmp)) { $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; }
elseif ($tmp=='NotConfigured') print $langs->trans($tmp); elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
else print $tmp; else print $tmp;
print '</td>'."\n"; print '</td>'."\n";
@ -263,21 +263,21 @@ foreach ($dirmodels as $reldir)
} }
print '</td>'; print '</td>';
$holiday=new Holiday($db); $holiday = new Holiday($db);
$holiday->initAsSpecimen(); $holiday->initAsSpecimen();
// Info // Info
$htmltooltip=''; $htmltooltip = '';
$htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>'; $htmltooltip .= ''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
$nextval=$module->getNextValue($mysoc, $holiday); $nextval = $module->getNextValue($mysoc, $holiday);
if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
$htmltooltip.=''.$langs->trans("NextValue").': '; $htmltooltip .= ''.$langs->trans("NextValue").': ';
if ($nextval) { if ($nextval) {
if (preg_match('/^Error/', $nextval) || $nextval=='NotConfigured') if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured')
$nextval = $langs->trans($nextval); $nextval = $langs->trans($nextval);
$htmltooltip.=$nextval.'<br>'; $htmltooltip .= $nextval.'<br>';
} else { } else {
$htmltooltip.=$langs->trans($module->error).'<br>'; $htmltooltip .= $langs->trans($module->error).'<br>';
} }
} }
@ -317,14 +317,14 @@ print load_fiche_titre($langs->trans("TemplatePDFHolidays"), '', '');
// Defined model definition table // Defined model definition table
$def = array(); $def = array();
$sql = "SELECT nom"; $sql = "SELECT nom";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql .= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'"; $sql .= " WHERE type = '".$type."'";
$sql.= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$i = 0; $i = 0;
$num_rows=$db->num_rows($resql); $num_rows = $db->num_rows($resql);
while ($i < $num_rows) while ($i < $num_rows)
{ {
$array = $db->fetch_array($resql); $array = $db->fetch_array($resql);
@ -353,42 +353,42 @@ clearstatcache();
foreach ($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
foreach (array('','/doc') as $valdir) foreach (array('', '/doc') as $valdir)
{ {
$dir = dol_buildpath($reldir."core/modules/holiday".$valdir); $dir = dol_buildpath($reldir."core/modules/holiday".$valdir);
if (is_dir($dir)) if (is_dir($dir))
{ {
$handle=opendir($dir); $handle = opendir($dir);
if (is_resource($handle)) if (is_resource($handle))
{ {
while (($file = readdir($handle))!==false) while (($file = readdir($handle)) !== false)
{ {
$filelist[]=$file; $filelist[] = $file;
} }
closedir($handle); closedir($handle);
arsort($filelist); arsort($filelist);
foreach($filelist as $file) foreach ($filelist as $file)
{ {
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file))
{ {
if (file_exists($dir.'/'.$file)) if (file_exists($dir.'/'.$file))
{ {
$name = substr($file, 4, dol_strlen($file) -16); $name = substr($file, 4, dol_strlen($file) - 16);
$classname = substr($file, 0, dol_strlen($file) -12); $classname = substr($file, 0, dol_strlen($file) - 12);
require_once $dir.'/'.$file; require_once $dir.'/'.$file;
$module = new $classname($db); $module = new $classname($db);
$modulequalified=1; $modulequalified = 1;
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0; if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified = 0;
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0; if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified = 0;
if ($modulequalified) if ($modulequalified)
{ {
print '<tr class="oddeven"><td width="100">'; print '<tr class="oddeven"><td width="100">';
print (empty($module->name)?$name:$module->name); print (empty($module->name) ? $name : $module->name);
print "</td><td>\n"; print "</td><td>\n";
if (method_exists($module, 'info')) print $module->info($langs); if (method_exists($module, 'info')) print $module->info($langs);
else print $module->description; else print $module->description;
@ -423,18 +423,18 @@ foreach ($dirmodels as $reldir)
print '</td>'; print '</td>';
// Info // Info
$htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
if ($module->type == 'pdf') if ($module->type == 'pdf')
{ {
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
} }
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>'; $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1); $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1); $htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1); $htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); $htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1); $htmltooltip .= '<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1);
print '<td align="center">'; print '<td align="center">';
@ -485,16 +485,16 @@ print '<td>'.$langs->trans("Parameter").'</td>';
print '<td align="center" width="60">'.$langs->trans("Value").'</td>'; print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
print "</tr>\n"; print "</tr>\n";
$substitutionarray=pdf_getSubstitutionArray($langs, array('objectamount'), null, 2); $substitutionarray = pdf_getSubstitutionArray($langs, array('objectamount'), null, 2);
$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>'; $htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
foreach($substitutionarray as $key => $val) $htmltext.=$key.'<br>'; foreach ($substitutionarray as $key => $val) $htmltext .= $key.'<br>';
$htmltext.='</i>'; $htmltext .= '</i>';
print '<tr class="oddeven"><td colspan="2">'; print '<tr class="oddeven"><td colspan="2">';
print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp'); print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp');
print '<br>'; print '<br>';
$variablename='HOLIDAY_FREE_TEXT'; $variablename = 'HOLIDAY_FREE_TEXT';
if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
{ {
print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>'; print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
@ -502,7 +502,7 @@ if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
else else
{ {
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); $doleditor = new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes');
print $doleditor->Create(); print $doleditor->Create();
} }
print '</td></tr>'."\n"; print '</td></tr>'."\n";

View File

@ -67,9 +67,12 @@ if (! empty($conf->global->MAIN_MOTD_SETUPPAGE))
} }
} }
print '<span class="opacitymedium">';
print $langs->trans("SetupDescription1"); print $langs->trans("SetupDescription1");
print $langs->trans("AreaForAdminOnly").' '; print $langs->trans("AreaForAdminOnly").' ';
print $langs->trans("SetupDescription2", $langs->transnoentities("MenuCompanySetup"), $langs->transnoentities("Modules"))."<br><br>"; print $langs->trans("SetupDescription2", $langs->transnoentities("MenuCompanySetup"), $langs->transnoentities("Modules"));
print '</span>';
print "<br><br>";
print '<br>'; print '<br>';

View File

@ -30,23 +30,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("companies", "products", "admin", "mails", "other", "errors")); $langs->loadLangs(array("companies", "products", "admin", "mails", "other", "errors"));
$action=GETPOST('action', 'alpha'); $action = GETPOST('action', 'alpha');
if (! $user->admin) accessforbidden(); if (!$user->admin) accessforbidden();
$usersignature=$user->signature; $usersignature = $user->signature;
// For action = test or send, we ensure that content is not html, even for signature, because this we want a test with NO html. // For action = test or send, we ensure that content is not html, even for signature, because this we want a test with NO html.
if ($action == 'test' || $action == 'send') if ($action == 'test' || $action == 'send')
{ {
$usersignature=dol_string_nohtmltag($usersignature); $usersignature = dol_string_nohtmltag($usersignature);
} }
$substitutionarrayfortest=array( $substitutionarrayfortest = array(
'__DOL_MAIN_URL_ROOT__'=>DOL_MAIN_URL_ROOT, '__DOL_MAIN_URL_ROOT__'=>DOL_MAIN_URL_ROOT,
'__ID__' => 'RecipientIdRecord', '__ID__' => 'RecipientIdRecord',
//'__EMAIL__' => 'RecipientEMail', // Done into actions_sendmails //'__EMAIL__' => 'RecipientEMail', // Done into actions_sendmails
'__CHECK_READ__' => (is_object($object) && is_object($object->thirdparty))?'<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$object->thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>':'', '__CHECK_READ__' => (is_object($object) && is_object($object->thirdparty)) ? '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$object->thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>' : '',
'__USER_SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$usersignature:''), // Done into actions_sendmails '__USER_SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? $usersignature : ''), // Done into actions_sendmails
'__LOGIN__' => 'RecipientLogin', '__LOGIN__' => 'RecipientLogin',
'__LASTNAME__' => 'RecipientLastname', '__LASTNAME__' => 'RecipientLastname',
'__FIRSTNAME__' => 'RecipientFirstname', '__FIRSTNAME__' => 'RecipientFirstname',
@ -93,16 +93,16 @@ if ($action == 'update' && empty($_POST["cancel"]))
// Actions to send emails // Actions to send emails
$id=0; $id = 0;
$actiontypecode=''; // Not an event for agenda $actiontypecode = ''; // Not an event for agenda
$trigger_name=''; // Disable triggers $trigger_name = ''; // Disable triggers
$paramname='id'; $paramname = 'id';
$mode='emailfortest'; $mode = 'emailfortest';
$trackid=(($action == 'testhtml')?"testhtml":"test"); $trackid = (($action == 'testhtml') ? "testhtml" : "test");
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'test') $action='test'; if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'test') $action = 'test';
if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'testhtml') $action='testhtml'; if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'testhtml') $action = 'testhtml';
@ -113,18 +113,18 @@ if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'testhtml') $
$form = new Form($db); $form = new Form($db);
$linuxlike=1; $linuxlike = 1;
if (preg_match('/^win/i', PHP_OS)) $linuxlike=0; if (preg_match('/^win/i', PHP_OS)) $linuxlike = 0;
if (preg_match('/^mac/i', PHP_OS)) $linuxlike=0; if (preg_match('/^mac/i', PHP_OS)) $linuxlike = 0;
if (empty($conf->global->MAIN_MAIL_SENDMODE)) $conf->global->MAIN_MAIL_SENDMODE='mail'; if (empty($conf->global->MAIN_MAIL_SENDMODE)) $conf->global->MAIN_MAIL_SENDMODE = 'mail';
$port=! empty($conf->global->MAIN_MAIL_SMTP_PORT)?$conf->global->MAIN_MAIL_SMTP_PORT:ini_get('smtp_port'); $port = !empty($conf->global->MAIN_MAIL_SMTP_PORT) ? $conf->global->MAIN_MAIL_SMTP_PORT : ini_get('smtp_port');
if (! $port) $port=25; if (!$port) $port = 25;
$server=! empty($conf->global->MAIN_MAIL_SMTP_SERVER)?$conf->global->MAIN_MAIL_SMTP_SERVER:ini_get('SMTP'); $server = !empty($conf->global->MAIN_MAIL_SMTP_SERVER) ? $conf->global->MAIN_MAIL_SMTP_SERVER : ini_get('SMTP');
if (! $server) $server='127.0.0.1'; if (!$server) $server = '127.0.0.1';
$wikihelp='EN:Setup_EMails|FR:Paramétrage_EMails|ES:Configuración_EMails'; $wikihelp = 'EN:Setup_EMails|FR:Paramétrage_EMails|ES:Configuración_EMails';
llxHeader('', $langs->trans("Setup"), $wikihelp); llxHeader('', $langs->trans("Setup"), $wikihelp);
print load_fiche_titre($langs->trans("EMailsSetup"), '', 'title_setup'); print load_fiche_titre($langs->trans("EMailsSetup"), '', 'title_setup');
@ -132,11 +132,11 @@ print load_fiche_titre($langs->trans("EMailsSetup"), '', 'title_setup');
$head = email_admin_prepare_head(); $head = email_admin_prepare_head();
// List of sending methods // List of sending methods
$listofmethods=array(); $listofmethods = array();
$listofmethods['mail']='PHP mail function'; $listofmethods['mail'] = 'PHP mail function';
//$listofmethods['simplemail']='Simplemail class'; //$listofmethods['simplemail']='Simplemail class';
$listofmethods['smtps']='SMTP/SMTPS socket library'; $listofmethods['smtps'] = 'SMTP/SMTPS socket library';
$listofmethods['swiftmailer']='Swift Mailer socket library'; $listofmethods['swiftmailer'] = 'Swift Mailer socket library';
if ($action == 'edit') if ($action == 'edit')
@ -267,7 +267,7 @@ if ($action == 'edit')
// Force e-mail recipient // Force e-mail recipient
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>';
print '<input class="flat" name="MAIN_MAIL_FORCE_SENDTO" size="32" value="' . (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO)?$conf->global->MAIN_MAIL_FORCE_SENDTO:'') . '" />'; print '<input class="flat" name="MAIN_MAIL_FORCE_SENDTO" size="32" value="'.(!empty($conf->global->MAIN_MAIL_FORCE_SENDTO) ? $conf->global->MAIN_MAIL_FORCE_SENDTO : '').'" />';
print '</td></tr>'; print '</td></tr>';
@ -299,7 +299,7 @@ if ($action == 'edit')
// Host server // Host server
print '<tr class="oddeven"><td>'; print '<tr class="oddeven"><td>';
if (! $conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail') if (!$conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail')
{ {
print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike"); print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike");
print '</td><td>'; print '</td><td>';
@ -307,21 +307,21 @@ if ($action == 'edit')
} }
else else
{ {
$mainserver = (! empty($conf->global->MAIN_MAIL_SMTP_SERVER)?$conf->global->MAIN_MAIL_SMTP_SERVER:''); $mainserver = (!empty($conf->global->MAIN_MAIL_SMTP_SERVER) ? $conf->global->MAIN_MAIL_SMTP_SERVER : '');
$smtpserver = ini_get('SMTP')?ini_get('SMTP'):$langs->transnoentities("Undefined"); $smtpserver = ini_get('SMTP') ?ini_get('SMTP') : $langs->transnoentities("Undefined");
if ($linuxlike) print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike"); if ($linuxlike) print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike");
else print $langs->trans("MAIN_MAIL_SMTP_SERVER", $smtpserver); else print $langs->trans("MAIN_MAIL_SMTP_SERVER", $smtpserver);
print '</td><td>'; print '</td><td>';
// SuperAdministrator access only // SuperAdministrator access only
if (empty($conf->multicompany->enabled) || ($user->admin && ! $user->entity)) if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
{ {
print '<input class="flat" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" size="18" value="' . $mainserver . '" autocomplete="off">'; print '<input class="flat" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" size="18" value="'.$mainserver.'" autocomplete="off">';
print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER_sav" name="MAIN_MAIL_SMTP_SERVER_sav" value="' . $mainserver . '">'; print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER_sav" name="MAIN_MAIL_SMTP_SERVER_sav" value="'.$mainserver.'">';
print '<span id="smtp_server_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>'; print '<span id="smtp_server_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
} }
else else
{ {
$text = ! empty($mainserver) ? $mainserver : $smtpserver; $text = !empty($mainserver) ? $mainserver : $smtpserver;
$htmltext = $langs->trans("ContactSuperAdminForChange"); $htmltext = $langs->trans("ContactSuperAdminForChange");
print $form->textwithpicto($text, $htmltext, 1, 'superadmin'); print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" value="'.$mainserver.'">'; print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" value="'.$mainserver.'">';
@ -331,7 +331,7 @@ if ($action == 'edit')
// Port // Port
print '<tr class="oddeven"><td>'; print '<tr class="oddeven"><td>';
if (! $conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail') if (!$conf->use_javascript_ajax && $linuxlike && $conf->global->MAIN_MAIL_SENDMODE == 'mail')
{ {
print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike"); print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike");
print '</td><td>'; print '</td><td>';
@ -339,21 +339,21 @@ if ($action == 'edit')
} }
else else
{ {
$mainport = (! empty($conf->global->MAIN_MAIL_SMTP_PORT) ? $conf->global->MAIN_MAIL_SMTP_PORT : ''); $mainport = (!empty($conf->global->MAIN_MAIL_SMTP_PORT) ? $conf->global->MAIN_MAIL_SMTP_PORT : '');
$smtpport = ini_get('smtp_port')?ini_get('smtp_port'):$langs->transnoentities("Undefined"); $smtpport = ini_get('smtp_port') ?ini_get('smtp_port') : $langs->transnoentities("Undefined");
if ($linuxlike) print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike"); if ($linuxlike) print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike");
else print $langs->trans("MAIN_MAIL_SMTP_PORT", $smtpport); else print $langs->trans("MAIN_MAIL_SMTP_PORT", $smtpport);
print '</td><td>'; print '</td><td>';
// SuperAdministrator access only // SuperAdministrator access only
if (empty($conf->multicompany->enabled) || ($user->admin && ! $user->entity)) if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
{ {
print '<input class="flat" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" size="3" value="' . $mainport . '">'; print '<input class="flat" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" size="3" value="'.$mainport.'">';
print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT_sav" name="MAIN_MAIL_SMTP_PORT_sav" value="' . $mainport . '">'; print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT_sav" name="MAIN_MAIL_SMTP_PORT_sav" value="'.$mainport.'">';
print '<span id="smtp_port_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>'; print '<span id="smtp_port_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
} }
else else
{ {
$text = (! empty($mainport) ? $mainport : $smtpport); $text = (!empty($mainport) ? $mainport : $smtpport);
$htmltext = $langs->trans("ContactSuperAdminForChange"); $htmltext = $langs->trans("ContactSuperAdminForChange");
print $form->textwithpicto($text, $htmltext, 1, 'superadmin'); print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" value="'.$mainport.'">'; print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" value="'.$mainport.'">';
@ -362,14 +362,14 @@ if ($action == 'edit')
print '</td></tr>'; print '</td></tr>';
// ID // ID
if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))))
{ {
$mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID)?$conf->global->MAIN_MAIL_SMTPS_ID:''); $mainstmpid = (!empty($conf->global->MAIN_MAIL_SMTPS_ID) ? $conf->global->MAIN_MAIL_SMTPS_ID : '');
print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>'; print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>';
// SuperAdministrator access only // SuperAdministrator access only
if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity)) if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
{ {
print '<input class="flat" name="MAIN_MAIL_SMTPS_ID" size="32" value="' . $mainstmpid . '">'; print '<input class="flat" name="MAIN_MAIL_SMTPS_ID" size="32" value="'.$mainstmpid.'">';
} }
else else
{ {
@ -381,14 +381,16 @@ if ($action == 'edit')
} }
// PW // PW
if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))))
{ {
$mainsmtppw=(! empty($conf->global->MAIN_MAIL_SMTPS_PW)?$conf->global->MAIN_MAIL_SMTPS_PW:''); $mainsmtppw = (!empty($conf->global->MAIN_MAIL_SMTPS_PW) ? $conf->global->MAIN_MAIL_SMTPS_PW : '');
print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_PW").'</td><td>'; print '<tr class="drag drop oddeven"><td>';
print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_PW"), $langs->trans("WithGMailYouCanCreateADedicatedPassword"));
print '</td><td>';
// SuperAdministrator access only // SuperAdministrator access only
if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity)) if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
{ {
print '<input class="flat" type="password" name="MAIN_MAIL_SMTPS_PW" size="32" value="' . $mainsmtppw . '" autocomplete="off">'; print '<input class="flat" type="password" name="MAIN_MAIL_SMTPS_PW" size="32" value="'.$mainsmtppw.'" autocomplete="off">';
} }
else else
{ {
@ -401,11 +403,11 @@ if ($action == 'edit')
// TLS // TLS
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>';
if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))))
{ {
if (function_exists('openssl_open')) if (function_exists('openssl_open'))
{ {
print $form->selectyesno('MAIN_MAIL_EMAIL_TLS', (! empty($conf->global->MAIN_MAIL_EMAIL_TLS)?$conf->global->MAIN_MAIL_EMAIL_TLS:0), 1); print $form->selectyesno('MAIN_MAIL_EMAIL_TLS', (!empty($conf->global->MAIN_MAIL_EMAIL_TLS) ? $conf->global->MAIN_MAIL_EMAIL_TLS : 0), 1);
} }
else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')'; else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
} }
@ -414,11 +416,11 @@ if ($action == 'edit')
// STARTTLS // STARTTLS
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").'</td><td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").'</td><td>';
if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))))
{ {
if (function_exists('openssl_open')) if (function_exists('openssl_open'))
{ {
print $form->selectyesno('MAIN_MAIL_EMAIL_STARTTLS', (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS)?$conf->global->MAIN_MAIL_EMAIL_STARTTLS:0), 1); print $form->selectyesno('MAIN_MAIL_EMAIL_STARTTLS', (!empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) ? $conf->global->MAIN_MAIL_EMAIL_STARTTLS : 0), 1);
} }
else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')'; else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
} }
@ -427,11 +429,11 @@ if ($action == 'edit')
// DKIM // DKIM
print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").'</td><td>'; print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").'</td><td>';
if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('swiftmailer')))) if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('swiftmailer'))))
{ {
if (function_exists('openssl_open')) if (function_exists('openssl_open'))
{ {
print $form->selectyesno('MAIN_MAIL_EMAIL_DKIM_ENABLED', (! empty($conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED)?$conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED:0), 1); print $form->selectyesno('MAIN_MAIL_EMAIL_DKIM_ENABLED', (!empty($conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED) ? $conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED : 0), 1);
} }
else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')'; else print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
} }
@ -440,31 +442,31 @@ if ($action == 'edit')
// DKIM Domain // DKIM Domain
print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>'; print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>';
print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_DOMAIN" name="MAIN_MAIL_EMAIL_DKIM_DOMAIN" size="32" value="' . (! empty($conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN)?$conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN:''); print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_DOMAIN" name="MAIN_MAIL_EMAIL_DKIM_DOMAIN" size="32" value="'.(!empty($conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN) ? $conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN : '');
print '"></td></tr>'; print '"></td></tr>';
// DKIM Selector // DKIM Selector
print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>'; print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>';
print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_SELECTOR" name="MAIN_MAIL_EMAIL_DKIM_SELECTOR" size="32" value="' . (! empty($conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR)?$conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR:''); print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_SELECTOR" name="MAIN_MAIL_EMAIL_DKIM_SELECTOR" size="32" value="'.(!empty($conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR) ? $conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR : '');
print '"></td></tr>'; print '"></td></tr>';
// DKIM PRIVATE KEY // DKIM PRIVATE KEY
print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>'; print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>';
print '<td><textarea id="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" name="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" rows="15" cols="100">' . (! empty($conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY)?$conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY:'').'</textarea>'; print '<td><textarea id="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" name="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" rows="15" cols="100">'.(!empty($conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY) ? $conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY : '').'</textarea>';
print '</td></tr>'; print '</td></tr>';
// Separator // Separator
print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>'; print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>';
// From // From
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from')?ini_get('sendmail_from'):$langs->transnoentities("Undefined")).'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from') ?ini_get('sendmail_from') : $langs->transnoentities("Undefined")).'</td>';
print '<td><input class="flat" name="MAIN_MAIL_EMAIL_FROM" size="32" value="' . (! empty($conf->global->MAIN_MAIL_EMAIL_FROM)?$conf->global->MAIN_MAIL_EMAIL_FROM:''); print '<td><input class="flat" name="MAIN_MAIL_EMAIL_FROM" size="32" value="'.(!empty($conf->global->MAIN_MAIL_EMAIL_FROM) ? $conf->global->MAIN_MAIL_EMAIL_FROM : '');
print '"></td></tr>'; print '"></td></tr>';
// Default from type // Default from type
$liste = array(); $liste = array();
$liste['user'] = $langs->trans('UserEmail'); $liste['user'] = $langs->trans('UserEmail');
$liste['company'] = $langs->trans('CompanyEmail').' ('.(empty($conf->global->MAIN_INFO_SOCIETE_MAIL)?$langs->trans("NotDefined"):$conf->global->MAIN_INFO_SOCIETE_MAIL).')'; $liste['company'] = $langs->trans('CompanyEmail').' ('.(empty($conf->global->MAIN_INFO_SOCIETE_MAIL) ? $langs->trans("NotDefined") : $conf->global->MAIN_INFO_SOCIETE_MAIL).')';
/* /*
$sql='SELECT rowid, label, email FROM '.MAIN_DB_PREFIX.'c_email_senderprofile WHERE active = 1'; $sql='SELECT rowid, label, email FROM '.MAIN_DB_PREFIX.'c_email_senderprofile WHERE active = 1';
$resql = $db->query($sql); $resql = $db->query($sql);
@ -493,12 +495,12 @@ if ($action == 'edit')
// From // From
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
print '<td><input class="flat" name="MAIN_MAIL_ERRORS_TO" size="32" value="' . (! empty($conf->global->MAIN_MAIL_ERRORS_TO)?$conf->global->MAIN_MAIL_ERRORS_TO:''); print '<td><input class="flat" name="MAIN_MAIL_ERRORS_TO" size="32" value="'.(!empty($conf->global->MAIN_MAIL_ERRORS_TO) ? $conf->global->MAIN_MAIL_ERRORS_TO : '');
print '"></td></tr>'; print '"></td></tr>';
// Autocopy to // Autocopy to
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
print '<td><input class="flat" name="MAIN_MAIL_AUTOCOPY_TO" size="32" value="' . (! empty($conf->global->MAIN_MAIL_AUTOCOPY_TO)?$conf->global->MAIN_MAIL_AUTOCOPY_TO:''); print '<td><input class="flat" name="MAIN_MAIL_AUTOCOPY_TO" size="32" value="'.(!empty($conf->global->MAIN_MAIL_AUTOCOPY_TO) ? $conf->global->MAIN_MAIL_AUTOCOPY_TO : '');
print '"></td></tr>'; print '"></td></tr>';
print '</table>'; print '</table>';
@ -525,14 +527,14 @@ else
// Disable // Disable
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_MAILS").'</td><td>'.yn($conf->global->MAIN_DISABLE_ALL_MAILS); print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_MAILS").'</td><td>'.yn($conf->global->MAIN_DISABLE_ALL_MAILS);
if (! empty($conf->global->MAIN_DISABLE_ALL_MAILS)) print img_warning($langs->trans("Disabled")); if (!empty($conf->global->MAIN_DISABLE_ALL_MAILS)) print img_warning($langs->trans("Disabled"));
print '</td></tr>'; print '</td></tr>';
// Force e-mail recipient // Force e-mail recipient
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>'.$conf->global->MAIN_MAIL_FORCE_SENDTO; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>'.$conf->global->MAIN_MAIL_FORCE_SENDTO;
if (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO)) if (!empty($conf->global->MAIN_MAIL_FORCE_SENDTO))
{ {
if (! isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail")); if (!isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail"));
else print img_warning($langs->trans("RecipientEmailsWillBeReplacedWithThisValue")); else print img_warning($langs->trans("RecipientEmailsWillBeReplacedWithThisValue"));
} }
print '</td></tr>'; print '</td></tr>';
@ -545,8 +547,8 @@ else
// Method // Method
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SENDMODE").'</td><td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SENDMODE").'</td><td>';
$text=$listofmethods[$conf->global->MAIN_MAIL_SENDMODE]; $text = $listofmethods[$conf->global->MAIN_MAIL_SENDMODE];
if (empty($text)) $text=$langs->trans("Undefined").img_warning(); if (empty($text)) $text = $langs->trans("Undefined").img_warning();
print $text; print $text;
print '</td></tr>'; print '</td></tr>';
@ -557,7 +559,7 @@ else
} }
else else
{ {
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_SERVER", ini_get('SMTP')?ini_get('SMTP'):$langs->transnoentities("Undefined")).'</td><td>'.(! empty($conf->global->MAIN_MAIL_SMTP_SERVER)?$conf->global->MAIN_MAIL_SMTP_SERVER:'').'</td></tr>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_SERVER", ini_get('SMTP') ?ini_get('SMTP') : $langs->transnoentities("Undefined")).'</td><td>'.(!empty($conf->global->MAIN_MAIL_SMTP_SERVER) ? $conf->global->MAIN_MAIL_SMTP_SERVER : '').'</td></tr>';
} }
// Port // Port
@ -567,7 +569,7 @@ else
} }
else else
{ {
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_PORT", ini_get('smtp_port')?ini_get('smtp_port'):$langs->transnoentities("Undefined")).'</td><td>'.(! empty($conf->global->MAIN_MAIL_SMTP_PORT)?$conf->global->MAIN_MAIL_SMTP_PORT:'').'</td></tr>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_PORT", ini_get('smtp_port') ?ini_get('smtp_port') : $langs->transnoentities("Undefined")).'</td><td>'.(!empty($conf->global->MAIN_MAIL_SMTP_PORT) ? $conf->global->MAIN_MAIL_SMTP_PORT : '').'</td></tr>';
} }
// SMTPS ID // SMTPS ID
@ -626,17 +628,17 @@ else
// Domain // Domain
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>';
print '<td>' . $conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN; print '<td>'.$conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN;
print '</td></tr>'; print '</td></tr>';
// Selector // Selector
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>';
print '<td>' . $conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR; print '<td>'.$conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR;
print '</td></tr>'; print '</td></tr>';
// PRIVATE KEY // PRIVATE KEY
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>';
print '<td>' . $conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY; print '<td>'.$conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY;
print '</td></tr>'; print '</td></tr>';
} }
@ -644,22 +646,22 @@ else
print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>'; print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>';
// From // From
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from')?ini_get('sendmail_from'):$langs->transnoentities("Undefined")).'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from') ?ini_get('sendmail_from') : $langs->transnoentities("Undefined")).'</td>';
print '<td>'.$conf->global->MAIN_MAIL_EMAIL_FROM; print '<td>'.$conf->global->MAIN_MAIL_EMAIL_FROM;
if (! empty($conf->global->MAIN_MAIL_EMAIL_FROM) && ! isValidEmail($conf->global->MAIN_MAIL_EMAIL_FROM)) print img_warning($langs->trans("ErrorBadEMail")); if (!empty($conf->global->MAIN_MAIL_EMAIL_FROM) && !isValidEmail($conf->global->MAIN_MAIL_EMAIL_FROM)) print img_warning($langs->trans("ErrorBadEMail"));
print '</td></tr>'; print '</td></tr>';
// Default from type // Default from type
$liste = array(); $liste = array();
$liste['user'] = $langs->trans('UserEmail'); $liste['user'] = $langs->trans('UserEmail');
$liste['company'] = $langs->trans('CompanyEmail').' ('.(empty($conf->global->MAIN_INFO_SOCIETE_MAIL)?$langs->trans("NotDefined"):$conf->global->MAIN_INFO_SOCIETE_MAIL).')'; $liste['company'] = $langs->trans('CompanyEmail').' ('.(empty($conf->global->MAIN_INFO_SOCIETE_MAIL) ? $langs->trans("NotDefined") : $conf->global->MAIN_INFO_SOCIETE_MAIL).')';
$sql='SELECT rowid, label, email FROM '.MAIN_DB_PREFIX.'c_email_senderprofile WHERE active = 1'; $sql = 'SELECT rowid, label, email FROM '.MAIN_DB_PREFIX.'c_email_senderprofile WHERE active = 1';
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$num = $db->num_rows($resql); $num = $db->num_rows($resql);
$i=0; $i = 0;
while($i < $num) while ($i < $num)
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if ($obj) if ($obj)
@ -703,16 +705,16 @@ else
// Errors To // Errors To
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
print '<td>'.$conf->global->MAIN_MAIL_ERRORS_TO; print '<td>'.$conf->global->MAIN_MAIL_ERRORS_TO;
if (! empty($conf->global->MAIN_MAIL_ERRORS_TO) && ! isValidEmail($conf->global->MAIN_MAIL_ERRORS_TO)) print img_warning($langs->trans("ErrorBadEMail")); if (!empty($conf->global->MAIN_MAIL_ERRORS_TO) && !isValidEmail($conf->global->MAIN_MAIL_ERRORS_TO)) print img_warning($langs->trans("ErrorBadEMail"));
print '</td></tr>'; print '</td></tr>';
// Autocopy to // Autocopy to
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
print '<td>'; print '<td>';
if (! empty($conf->global->MAIN_MAIL_AUTOCOPY_TO)) if (!empty($conf->global->MAIN_MAIL_AUTOCOPY_TO))
{ {
print $conf->global->MAIN_MAIL_AUTOCOPY_TO; print $conf->global->MAIN_MAIL_AUTOCOPY_TO;
if (! isValidEmail($conf->global->MAIN_MAIL_AUTOCOPY_TO)) print img_warning($langs->trans("ErrorBadEMail")); if (!isValidEmail($conf->global->MAIN_MAIL_AUTOCOPY_TO)) print img_warning($langs->trans("ErrorBadEMail"));
} }
else else
{ {
@ -730,7 +732,7 @@ else
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
if ($conf->global->MAIN_MAIL_SENDMODE != 'mail' || ! $linuxlike) if ($conf->global->MAIN_MAIL_SENDMODE != 'mail' || !$linuxlike)
{ {
if (function_exists('fsockopen') && $port && $server) if (function_exists('fsockopen') && $port && $server)
{ {
@ -744,7 +746,7 @@ else
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSend").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSend").'</a>';
if (! empty($conf->fckeditor->enabled)) if (!empty($conf->fckeditor->enabled))
{ {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testhtml&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSendHTML").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testhtml&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSendHTML").'</a>';
} }
@ -768,17 +770,17 @@ else
print info_admin($langs->trans("SendmailOptionMayHurtBuggedMTA")); print info_admin($langs->trans("SendmailOptionMayHurtBuggedMTA"));
} }
if (! in_array($action, array('testconnect', 'test', 'testhtml'))) if (!in_array($action, array('testconnect', 'test', 'testhtml')))
{ {
$text = ''; $text = '';
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
{ {
$text.= $langs->trans("WarningPHPMail"); $text .= $langs->trans("WarningPHPMail");
} }
//$conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS='1.2.3.4'; //$conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS='1.2.3.4';
if (! empty($conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS)) if (!empty($conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS))
{ {
$text.= ($text?'<br>':'').$langs->trans("WarningPHPMail2", $conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS); $text .= ($text ? '<br>' : '').$langs->trans("WarningPHPMail2", $conf->global->MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS);
} }
if ($text) print info_admin($text); if ($text) print info_admin($text);
} }
@ -790,7 +792,7 @@ else
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
$mail = new CMailFile('', '', '', ''); $mail = new CMailFile('', '', '', '');
$result=$mail->check_server_port($server, $port); $result = $mail->check_server_port($server, $port);
if ($result) print '<div class="ok">'.$langs->trans("ServerAvailableOnIPOrPort", $server, $port).'</div>'; if ($result) print '<div class="ok">'.$langs->trans("ServerAvailableOnIPOrPort", $server, $port).'</div>';
else else
{ {
@ -809,45 +811,45 @@ else
if ($action == 'test' || $action == 'testhtml') if ($action == 'test' || $action == 'testhtml')
{ {
print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>'; print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
print load_fiche_titre($action == 'testhtml'?$langs->trans("DoTestSendHTML"):$langs->trans("DoTestSend")); print load_fiche_titre($action == 'testhtml' ? $langs->trans("DoTestSendHTML") : $langs->trans("DoTestSend"));
dol_fiche_head(''); dol_fiche_head('');
// Cree l'objet formulaire mail // Cree l'objet formulaire mail
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
$formmail = new FormMail($db); $formmail = new FormMail($db);
$formmail->trackid=(($action == 'testhtml')?"testhtml":"test"); $formmail->trackid = (($action == 'testhtml') ? "testhtml" : "test");
$formmail->fromname = (isset($_POST['fromname'])?$_POST['fromname']:$conf->global->MAIN_MAIL_EMAIL_FROM); $formmail->fromname = (isset($_POST['fromname']) ? $_POST['fromname'] : $conf->global->MAIN_MAIL_EMAIL_FROM);
$formmail->frommail = (isset($_POST['frommail'])?$_POST['frommail']:$conf->global->MAIN_MAIL_EMAIL_FROM); $formmail->frommail = (isset($_POST['frommail']) ? $_POST['frommail'] : $conf->global->MAIN_MAIL_EMAIL_FROM);
$formmail->fromid=$user->id; $formmail->fromid = $user->id;
$formmail->fromalsorobot=1; $formmail->fromalsorobot = 1;
$formmail->fromtype=(GETPOSTISSET('fromtype')?GETPOST('fromtype', 'aZ09'):(!empty($conf->global->MAIN_MAIL_DEFAULT_FROMTYPE)?$conf->global->MAIN_MAIL_DEFAULT_FROMTYPE:'user')); $formmail->fromtype = (GETPOSTISSET('fromtype') ?GETPOST('fromtype', 'aZ09') : (!empty($conf->global->MAIN_MAIL_DEFAULT_FROMTYPE) ? $conf->global->MAIN_MAIL_DEFAULT_FROMTYPE : 'user'));
$formmail->withfromreadonly=1; $formmail->withfromreadonly = 1;
$formmail->withsubstit=1; $formmail->withsubstit = 1;
$formmail->withfrom=1; $formmail->withfrom = 1;
$formmail->witherrorsto=1; $formmail->witherrorsto = 1;
$formmail->withto=(! empty($_POST['sendto'])?$_POST['sendto']:($user->email?$user->email:1)); $formmail->withto = (!empty($_POST['sendto']) ? $_POST['sendto'] : ($user->email ? $user->email : 1));
$formmail->withtocc=(! empty($_POST['sendtocc'])?$_POST['sendtocc']:1); // ! empty to keep field if empty $formmail->withtocc = (!empty($_POST['sendtocc']) ? $_POST['sendtocc'] : 1); // ! empty to keep field if empty
$formmail->withtoccc=(! empty($_POST['sendtoccc'])?$_POST['sendtoccc']:1); // ! empty to keep field if empty $formmail->withtoccc = (!empty($_POST['sendtoccc']) ? $_POST['sendtoccc'] : 1); // ! empty to keep field if empty
$formmail->withtopic=(isset($_POST['subject'])?$_POST['subject']:$langs->trans("Test")); $formmail->withtopic = (isset($_POST['subject']) ? $_POST['subject'] : $langs->trans("Test"));
$formmail->withtopicreadonly=0; $formmail->withtopicreadonly = 0;
$formmail->withfile=2; $formmail->withfile = 2;
$formmail->withbody=(isset($_POST['message'])?$_POST['message']:($action == 'testhtml'?$langs->transnoentities("PredefinedMailTestHtml"):$langs->transnoentities("PredefinedMailTest"))); $formmail->withbody = (isset($_POST['message']) ? $_POST['message'] : ($action == 'testhtml' ? $langs->transnoentities("PredefinedMailTestHtml") : $langs->transnoentities("PredefinedMailTest")));
$formmail->withbodyreadonly=0; $formmail->withbodyreadonly = 0;
$formmail->withcancel=1; $formmail->withcancel = 1;
$formmail->withdeliveryreceipt=1; $formmail->withdeliveryreceipt = 1;
$formmail->withfckeditor=($action == 'testhtml'?1:0); $formmail->withfckeditor = ($action == 'testhtml' ? 1 : 0);
$formmail->ckeditortoolbar='dolibarr_mailings'; $formmail->ckeditortoolbar = 'dolibarr_mailings';
// Tableau des substitutions // Tableau des substitutions
$formmail->substit=$substitutionarrayfortest; $formmail->substit = $substitutionarrayfortest;
// Tableau des parametres complementaires du post // Tableau des parametres complementaires du post
$formmail->param["action"]="send"; $formmail->param["action"] = "send";
$formmail->param["models"]="body"; $formmail->param["models"] = "body";
$formmail->param["mailid"]=0; $formmail->param["mailid"] = 0;
$formmail->param["returnurl"]=$_SERVER["PHP_SELF"]; $formmail->param["returnurl"] = $_SERVER["PHP_SELF"];
// Init list of files // Init list of files
if (GETPOST("mode", "aZ09")=='init') if (GETPOST("mode", "aZ09") == 'init')
{ {
$formmail->clear_attached_files(); $formmail->clear_attached_files();
} }

View File

@ -42,11 +42,11 @@ print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$lan
print "\n"; print "\n";
// Recupere l'OS au sens PHP // Recupere l'OS au sens PHP
print "<tr $bc[0]><td width=\"240\">".$langs->trans("PHP_OS")."</td><td>".PHP_OS."</td></tr>\n"; print '<tr class="oddeven"><td>'.$langs->trans("PHP_OS")."</td><td>".PHP_OS."</td></tr>\n";
// Recupere la version de l'OS // Recupere la version de l'OS
$osversion=version_os(); $osversion=version_os();
print "<tr $bc[1]><td width=\"240\">".$langs->trans("Version")."</td><td>".$osversion."</td></tr>\n"; print '<tr class="oddeven"><td>'.$langs->trans("Version")."</td><td>".$osversion."</td></tr>\n";
print '</table>'; print '</table>';
// End of page // End of page

View File

@ -1327,6 +1327,20 @@ class Setup extends DolibarrApi
return $list; return $list;
} }
/**
* Get properties of company
*
* @url GET /company
*
* @return array|mixed Data without useless information
*
*/
public function getCompany()
{
global $mysoc;
return $this->_cleanObjectDatas($mysoc);
}
/** /**
* Do a test of integrity for files and setup. * Do a test of integrity for files and setup.

View File

@ -32,32 +32,32 @@ require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("mrp","other")); $langs->loadLangs(array("mrp", "other"));
// Get parameters // Get parameters
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha'); $ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'alpha'); $action = GETPOST('action', 'alpha');
$cancel = GETPOST('cancel', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09');
$backtopage = GETPOST('backtopage', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha');
if (GETPOST('actioncode', 'array')) if (GETPOST('actioncode', 'array'))
{ {
$actioncode=GETPOST('actioncode', 'array', 3); $actioncode = GETPOST('actioncode', 'array', 3);
if (! count($actioncode)) $actioncode='0'; if (!count($actioncode)) $actioncode = '0';
} }
else else
{ {
$actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
} }
$search_agenda_label=GETPOST('search_agenda_label'); $search_agenda_label = GETPOST('search_agenda_label');
// Security check - Protection if external user // Security check - Protection if external user
//if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) accessforbidden();
//if ($user->socid > 0) $socid = $user->socid; //if ($user->socid > 0) $socid = $user->socid;
//$result = restrictedArea($user, 'bom', $id); //$result = restrictedArea($user, 'bom', $id);
$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
$sortfield = GETPOST("sortfield", 'alpha'); $sortfield = GETPOST("sortfield", 'alpha');
$sortorder = GETPOST("sortorder", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha');
$page = GETPOST("page", 'int'); $page = GETPOST("page", 'int');

View File

@ -625,28 +625,28 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Close / Cancel // Close / Cancel
if ($permissiontoadd && $object->status == $object::STATUS_VALIDATED) if ($permissiontoadd && $object->status == $object::STATUS_VALIDATED)
{ {
print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=close">' . $langs->trans("Disable") . '</a>'; print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=close">'.$langs->trans("Disable").'</a>';
} }
// Re-open // Re-open
if ($permissiontoadd && $object->status == $object::STATUS_CANCELED) if ($permissiontoadd && $object->status == $object::STATUS_CANCELED)
{ {
print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=reopen">' . $langs->trans("ReOpen") . '</a>'; print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=reopen">'.$langs->trans("ReOpen").'</a>';
} }
// Create MO // Create MO
if ($conf->mrp->enabled) if ($conf->mrp->enabled)
{ {
if ($object->status == $object::STATUS_VALIDATED && ! empty($user->rights->mrp->write)) if ($object->status == $object::STATUS_VALIDATED && !empty($user->rights->mrp->write))
{ {
print '<a class="butAction" href="' . DOL_URL_ROOT.'/mrp/mo_card.php?action=create&fk_bom='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id).'">' . $langs->trans("CreateMO") . '</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/mrp/mo_card.php?action=create&fk_bom='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id).'">'.$langs->trans("CreateMO").'</a>';
} }
} }
// Clone // Clone
if ($permissiontoadd) if ($permissiontoadd)
{ {
print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=clone&object=bom">' . $langs->trans("ToClone") . '</a>'; print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=clone&object=bom">'.$langs->trans("ToClone").'</a>';
} }
/* /*

View File

@ -167,7 +167,7 @@ if ($object->id)
print "</table>\n"; print "</table>\n";
print '</div>'; print '</div>';
print dol_fiche_end(); dol_fiche_end();

View File

@ -628,7 +628,7 @@ if ($resql)
if (!empty($arrayfields['ava.rowid']['checked'])) if (!empty($arrayfields['ava.rowid']['checked']))
{ {
print '<td class="liste_titre maxwidthonsmartphone" align="center">'; print '<td class="liste_titre maxwidthonsmartphone" align="center">';
print $form->selectAvailabilityDelay($search_availability, 'search_availability', '', 1); $form->selectAvailabilityDelay($search_availability, 'search_availability', '', 1);
print ajax_combobox('search_availability'); print ajax_combobox('search_availability');
print '</td>'; print '</td>';
} }

View File

@ -745,7 +745,7 @@ if ($socid > 0)
$sql .= " , ".MAIN_DB_PREFIX."facturedet as fc"; $sql .= " , ".MAIN_DB_PREFIX."facturedet as fc";
$sql .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc"; $sql .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON rc.fk_facture_source = fa.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON rc.fk_facture_source = fa.rowid";
$sql .= " WHERE rc.fk_soc =". $object->id; $sql .= " WHERE rc.fk_soc =".$object->id;
$sql .= " AND rc.fk_facture_line = fc.rowid"; $sql .= " AND rc.fk_facture_line = fc.rowid";
$sql .= " AND fc.fk_facture = f.rowid"; $sql .= " AND fc.fk_facture = f.rowid";
$sql .= " AND rc.fk_user = u.rowid"; $sql .= " AND rc.fk_user = u.rowid";
@ -763,7 +763,7 @@ if ($socid > 0)
$sql2 .= " , ".MAIN_DB_PREFIX."user as u"; $sql2 .= " , ".MAIN_DB_PREFIX."user as u";
$sql2 .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc"; $sql2 .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON rc.fk_facture_source = fa.rowid"; $sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON rc.fk_facture_source = fa.rowid";
$sql2 .= " WHERE rc.fk_soc =". $object->id; $sql2 .= " WHERE rc.fk_soc =".$object->id;
$sql2 .= " AND rc.fk_facture = f.rowid"; $sql2 .= " AND rc.fk_facture = f.rowid";
$sql2 .= " AND rc.fk_user = u.rowid"; $sql2 .= " AND rc.fk_user = u.rowid";
$sql2 .= " AND rc.discount_type = 0"; // Eliminate supplier discounts $sql2 .= " AND rc.discount_type = 0"; // Eliminate supplier discounts
@ -920,7 +920,7 @@ if ($socid > 0)
$sql .= " , ".MAIN_DB_PREFIX."facture_fourn_det as fc"; $sql .= " , ".MAIN_DB_PREFIX."facture_fourn_det as fc";
$sql .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc"; $sql .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as fa ON rc.fk_invoice_supplier_source = fa.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as fa ON rc.fk_invoice_supplier_source = fa.rowid";
$sql .= " WHERE rc.fk_soc =". $object->id; $sql .= " WHERE rc.fk_soc =".$object->id;
$sql .= " AND rc.fk_invoice_supplier_line = fc.rowid"; $sql .= " AND rc.fk_invoice_supplier_line = fc.rowid";
$sql .= " AND fc.fk_facture_fourn = f.rowid"; $sql .= " AND fc.fk_facture_fourn = f.rowid";
$sql .= " AND rc.fk_user = u.rowid"; $sql .= " AND rc.fk_user = u.rowid";
@ -938,7 +938,7 @@ if ($socid > 0)
$sql2 .= " , ".MAIN_DB_PREFIX."user as u"; $sql2 .= " , ".MAIN_DB_PREFIX."user as u";
$sql2 .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc"; $sql2 .= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as fa ON rc.fk_invoice_supplier_source = fa.rowid"; $sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as fa ON rc.fk_invoice_supplier_source = fa.rowid";
$sql2 .= " WHERE rc.fk_soc =". $object->id; $sql2 .= " WHERE rc.fk_soc =".$object->id;
$sql2 .= " AND rc.fk_invoice_supplier = f.rowid"; $sql2 .= " AND rc.fk_invoice_supplier = f.rowid";
$sql2 .= " AND rc.fk_user = u.rowid"; $sql2 .= " AND rc.fk_user = u.rowid";
$sql2 .= " AND rc.discount_type = 1"; // Eliminate customer discounts $sql2 .= " AND rc.discount_type = 1"; // Eliminate customer discounts

View File

@ -977,35 +977,22 @@ class Commande extends CommonOrder
$sql = 'UPDATE '.MAIN_DB_PREFIX."commande SET ref='".$this->db->escape($initialref)."' WHERE rowid=".$this->id; $sql = 'UPDATE '.MAIN_DB_PREFIX."commande SET ref='".$this->db->escape($initialref)."' WHERE rowid=".$this->id;
if ($this->db->query($sql)) if ($this->db->query($sql))
{ {
if ($this->id) $this->ref = $initialref;
if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects
{ {
$this->ref = $initialref; $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds
}
if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) // To use new linkedObjectsIds instead of old linked_objects // Add object linked
if (!$error && $this->id && is_array($this->linked_objects) && !empty($this->linked_objects))
{
foreach ($this->linked_objects as $origin => $tmp_origin_id)
{ {
$this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...))
}
// Add object linked
if (!$error && $this->id && is_array($this->linked_objects) && !empty($this->linked_objects))
{
foreach ($this->linked_objects as $origin => $tmp_origin_id)
{ {
if (is_array($tmp_origin_id)) // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) foreach ($tmp_origin_id as $origin_id)
{ {
foreach ($tmp_origin_id as $origin_id)
{
$ret = $this->add_object_linked($origin, $origin_id);
if (!$ret)
{
$this->error = $this->db->lasterror();
$error++;
}
}
}
else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1))
{
$origin_id = $tmp_origin_id;
$ret = $this->add_object_linked($origin, $origin_id); $ret = $this->add_object_linked($origin, $origin_id);
if (!$ret) if (!$ret)
{ {
@ -1014,44 +1001,54 @@ class Commande extends CommonOrder
} }
} }
} }
else // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1))
{
$origin_id = $tmp_origin_id;
$ret = $this->add_object_linked($origin, $origin_id);
if (!$ret)
{
$this->error = $this->db->lasterror();
$error++;
}
}
} }
}
if (!$error && $this->id && !empty($conf->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN) && !empty($this->origin) && !empty($this->origin_id)) // Get contact from origin object if (!$error && $this->id && !empty($conf->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN) && !empty($this->origin) && !empty($this->origin_id)) // Get contact from origin object
{
$originforcontact = $this->origin;
$originidforcontact = $this->origin_id;
if ($originforcontact == 'shipping') // shipment and order share the same contacts. If creating from shipment we take data of order
{ {
$originforcontact = $this->origin; require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
$originidforcontact = $this->origin_id; $exp = new Expedition($this->db);
if ($originforcontact == 'shipping') // shipment and order share the same contacts. If creating from shipment we take data of order $exp->fetch($this->origin_id);
$exp->fetchObjectLinked();
if (count($exp->linkedObjectsIds['commande']) > 0)
{ {
require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; foreach ($exp->linkedObjectsIds['commande'] as $key => $value)
$exp = new Expedition($this->db);
$exp->fetch($this->origin_id);
$exp->fetchObjectLinked();
if (count($exp->linkedObjectsIds['commande']) > 0)
{ {
foreach ($exp->linkedObjectsIds['commande'] as $key => $value) $originforcontact = 'commande';
{ if (is_object($value)) $originidforcontact = $value->id;
$originforcontact = 'commande'; else $originidforcontact = $value;
if (is_object($value)) $originidforcontact = $value->id; break; // We take first one
else $originidforcontact = $value;
break; // We take first one
}
} }
} }
$sqlcontact = "SELECT ctc.code, ctc.source, ec.fk_socpeople FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as ctc";
$sqlcontact .= " WHERE element_id = ".$originidforcontact." AND ec.fk_c_type_contact = ctc.rowid AND ctc.element = '".$originforcontact."'";
$resqlcontact = $this->db->query($sqlcontact);
if ($resqlcontact)
{
while ($objcontact = $this->db->fetch_object($resqlcontact))
{
//print $objcontact->code.'-'.$objcontact->source.'-'.$objcontact->fk_socpeople."\n";
$this->add_contact($objcontact->fk_socpeople, $objcontact->code, $objcontact->source); // May failed because of duplicate key or because code of contact type does not exists for new object
}
}
else dol_print_error($resqlcontact);
} }
$sqlcontact = "SELECT ctc.code, ctc.source, ec.fk_socpeople FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as ctc";
$sqlcontact .= " WHERE element_id = ".$originidforcontact." AND ec.fk_c_type_contact = ctc.rowid AND ctc.element = '".$originforcontact."'";
$resqlcontact = $this->db->query($sqlcontact);
if ($resqlcontact)
{
while ($objcontact = $this->db->fetch_object($resqlcontact))
{
//print $objcontact->code.'-'.$objcontact->source.'-'.$objcontact->fk_socpeople."\n";
$this->add_contact($objcontact->fk_socpeople, $objcontact->code, $objcontact->source); // May failed because of duplicate key or because code of contact type does not exists for new object
}
}
else dol_print_error($resqlcontact);
} }
if (!$error) if (!$error)

View File

@ -174,7 +174,7 @@ if ($id > 0 || !empty($ref))
print "</div>\n"; print "</div>\n";
print dol_fiche_end(); dol_fiche_end();
$modulepart = 'commande'; $modulepart = 'commande';
$permission = $user->rights->commande->creer; $permission = $user->rights->commande->creer;

View File

@ -31,22 +31,22 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array('banks', 'categories')); $langs->loadLangs(array('banks', 'categories'));
$WIDTH=DolGraph::getDefaultGraphSizeForStats('width', 768); $WIDTH = DolGraph::getDefaultGraphSizeForStats('width', 768);
$HEIGHT=DolGraph::getDefaultGraphSizeForStats('height', 200); $HEIGHT = DolGraph::getDefaultGraphSizeForStats('height', 200);
// Security check // Security check
if (isset($_GET["account"]) || isset($_GET["ref"])) if (isset($_GET["account"]) || isset($_GET["ref"]))
{ {
$id = isset($_GET["account"])?$_GET["account"]:(isset($_GET["ref"])?$_GET["ref"]:''); $id = isset($_GET["account"]) ? $_GET["account"] : (isset($_GET["ref"]) ? $_GET["ref"] : '');
} }
$fieldid = isset($_GET["ref"])?'ref':'rowid'; $fieldid = isset($_GET["ref"]) ? 'ref' : 'rowid';
if ($user->socid) $socid=$user->socid; if ($user->socid) $socid = $user->socid;
$result=restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid); $result = restrictedArea($user, 'banque', $id, 'bank_account&bank_account', '', '', $fieldid);
$account=GETPOST("account"); $account = GETPOST("account");
$mode='standard'; $mode = 'standard';
if (GETPOST("mode") == 'showalltime') $mode='showalltime'; if (GETPOST("mode") == 'showalltime') $mode = 'showalltime';
$error=0; $error = 0;
/* /*
@ -63,22 +63,22 @@ $datetime = dol_now();
$year = dol_print_date($datetime, "%Y"); $year = dol_print_date($datetime, "%Y");
$month = dol_print_date($datetime, "%m"); $month = dol_print_date($datetime, "%m");
$day = dol_print_date($datetime, "%d"); $day = dol_print_date($datetime, "%d");
if (GETPOST("year")) $year=sprintf("%04d", GETPOST("year")); if (GETPOST("year")) $year = sprintf("%04d", GETPOST("year"));
if (GETPOST("month")) $month=sprintf("%02d", GETPOST("month")); if (GETPOST("month")) $month = sprintf("%02d", GETPOST("month"));
$object = new Account($db); $object = new Account($db);
if ($_GET["account"] && ! preg_match('/,/', $_GET["account"])) // if for a particular account and not a list if ($_GET["account"] && !preg_match('/,/', $_GET["account"])) // if for a particular account and not a list
{ {
$result=$object->fetch(GETPOST("account", "int")); $result = $object->fetch(GETPOST("account", "int"));
} }
if ($_GET["ref"]) if ($_GET["ref"])
{ {
$result=$object->fetch(0, GETPOST("ref")); $result = $object->fetch(0, GETPOST("ref"));
$account=$object->id; $account = $object->id;
} }
$result=dol_mkdir($conf->bank->dir_temp); $result = dol_mkdir($conf->bank->dir_temp);
if ($result < 0) if ($result < 0)
{ {
$langs->load("errors"); $langs->load("errors");
@ -89,11 +89,11 @@ else
{ {
// Calcul $min and $max // Calcul $min and $max
$sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max"; $sql = "SELECT MIN(b.datev) as min, MAX(b.datev) as max";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -107,9 +107,9 @@ else
{ {
dol_print_error($db); dol_print_error($db);
} }
if (empty($min)) $min = dol_now - 3600 * 24; if (empty($min)) $min = dol_now() - 3600 * 24;
$log="graph.php: min=".$min." max=".$max; $log = "graph.php: min=".$min." max=".$max;
dol_syslog($log); dol_syslog($log);
@ -120,24 +120,24 @@ else
// Loading table $amounts // Loading table $amounts
$amounts = array(); $amounts = array();
$monthnext = $month+1; $monthnext = $month + 1;
$yearnext = $year; $yearnext = $year;
if ($monthnext > 12) if ($monthnext > 12)
{ {
$monthnext=1; $monthnext = 1;
$yearnext++; $yearnext++;
} }
$sql = "SELECT date_format(b.datev,'%Y%m%d')"; $sql = "SELECT date_format(b.datev,'%Y%m%d')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-".$month."-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-".$month."-01 00:00:00'";
$sql.= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; $sql .= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql.= " GROUP BY date_format(b.datev,'%Y%m%d')"; $sql .= " GROUP BY date_format(b.datev,'%Y%m%d')";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -161,12 +161,12 @@ else
$solde = 0; $solde = 0;
$sql = "SELECT SUM(b.amount)"; $sql = "SELECT SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev < '".$year."-".sprintf("%02s", $month)."-01'"; $sql .= " AND b.datev < '".$year."-".sprintf("%02s", $month)."-01'";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -225,36 +225,36 @@ else
//exit; //exit;
// Fabrication tableau 1 // Fabrication tableau 1
$file= $conf->bank->dir_temp."/balance".$account."-".$year.$month.".png"; $file = $conf->bank->dir_temp."/balance".$account."-".$year.$month.".png";
$fileurl=DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account."-".$year.$month.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account."-".$year.$month.".png";
$title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year; $title = $langs->transnoentities("Balance").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year;
$graph_datas=array(); $graph_datas = array();
foreach($datas as $i => $val) foreach ($datas as $i => $val)
{ {
$graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); $graph_datas[$i] = array(isset($labels[$i]) ? $labels[$i] : '', $datas[$i]);
if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]); if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]);
if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]); if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]);
} }
$px1 = new DolGraph(); $px1 = new DolGraph();
$px1->SetData($graph_datas); $px1->SetData($graph_datas);
$arraylegends=array($langs->transnoentities("Balance")); $arraylegends = array($langs->transnoentities("Balance"));
if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired")); if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired"));
if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed")); if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed"));
$px1->SetLegend($arraylegends); $px1->SetLegend($arraylegends);
$px1->SetLegendWidthMin(180); $px1->SetLegendWidthMin(180);
$px1->SetMaxValue($px1->GetCeilMaxValue()<0?0:$px1->GetCeilMaxValue()); $px1->SetMaxValue($px1->GetCeilMaxValue() < 0 ? 0 : $px1->GetCeilMaxValue());
$px1->SetMinValue($px1->GetFloorMinValue()>0?0:$px1->GetFloorMinValue()); $px1->SetMinValue($px1->GetFloorMinValue() > 0 ? 0 : $px1->GetFloorMinValue());
$px1->SetTitle($title); $px1->SetTitle($title);
$px1->SetWidth($WIDTH); $px1->SetWidth($WIDTH);
$px1->SetHeight($HEIGHT); $px1->SetHeight($HEIGHT);
$px1->SetType(array('lines','lines','lines')); $px1->SetType(array('lines', 'lines', 'lines'));
$px1->setBgColor('onglet'); $px1->setBgColor('onglet');
$px1->setBgColorGrid(array(255,255,255)); $px1->setBgColorGrid(array(255, 255, 255));
$px1->SetHorizTickIncrement(1); $px1->SetHorizTickIncrement(1);
$px1->draw($file, $fileurl); $px1->draw($file, $fileurl);
$show1=$px1->show(); $show1 = $px1->show();
unset($graph_datas); unset($graph_datas);
unset($px1); unset($px1);
unset($datas); unset($datas);
@ -271,14 +271,14 @@ else
// Loading table $amounts // Loading table $amounts
$amounts = array(); $amounts = array();
$sql = "SELECT date_format(b.datev,'%Y%m%d')"; $sql = "SELECT date_format(b.datev,'%Y%m%d')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-01-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-01-01 00:00:00'";
$sql.= " AND b.datev <= '".$year."-12-31 23:59:59'"; $sql .= " AND b.datev <= '".$year."-12-31 23:59:59'";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql .= " GROUP BY date_format(b.datev,'%Y%m%d')"; $sql .= " GROUP BY date_format(b.datev,'%Y%m%d')";
$resql = $db->query($sql); $resql = $db->query($sql);
@ -303,12 +303,12 @@ else
$solde = 0; $solde = 0;
$sql = "SELECT SUM(b.amount)"; $sql = "SELECT SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev < '".$year."-01-01'"; $sql .= " AND b.datev < '".$year."-01-01'";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -361,36 +361,36 @@ else
} }
// Fabrication tableau 2 // Fabrication tableau 2
$file= $conf->bank->dir_temp."/balance".$account."-".$year.".png"; $file = $conf->bank->dir_temp."/balance".$account."-".$year.".png";
$fileurl=DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account."-".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account."-".$year.".png";
$title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Year").': '.$year; $title = $langs->transnoentities("Balance").' - '.$langs->transnoentities("Year").': '.$year;
$graph_datas=array(); $graph_datas = array();
foreach($datas as $i => $val) foreach ($datas as $i => $val)
{ {
$graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); $graph_datas[$i] = array(isset($labels[$i]) ? $labels[$i] : '', $datas[$i]);
if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]); if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]);
if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]); if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]);
} }
$px2 = new DolGraph(); $px2 = new DolGraph();
$px2->SetData($graph_datas); $px2->SetData($graph_datas);
$arraylegends=array($langs->transnoentities("Balance")); $arraylegends = array($langs->transnoentities("Balance"));
if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired")); if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired"));
if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed")); if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed"));
$px2->SetLegend($arraylegends); $px2->SetLegend($arraylegends);
$px2->SetLegendWidthMin(180); $px2->SetLegendWidthMin(180);
$px2->SetMaxValue($px2->GetCeilMaxValue()<0?0:$px2->GetCeilMaxValue()); $px2->SetMaxValue($px2->GetCeilMaxValue() < 0 ? 0 : $px2->GetCeilMaxValue());
$px2->SetMinValue($px2->GetFloorMinValue()>0?0:$px2->GetFloorMinValue()); $px2->SetMinValue($px2->GetFloorMinValue() > 0 ? 0 : $px2->GetFloorMinValue());
$px2->SetTitle($title); $px2->SetTitle($title);
$px2->SetWidth($WIDTH); $px2->SetWidth($WIDTH);
$px2->SetHeight($HEIGHT); $px2->SetHeight($HEIGHT);
$px2->SetType(array('linesnopoint','linesnopoint','linesnopoint')); $px2->SetType(array('linesnopoint', 'linesnopoint', 'linesnopoint'));
$px2->setBgColor('onglet'); $px2->setBgColor('onglet');
$px2->setBgColorGrid(array(255,255,255)); $px2->setBgColorGrid(array(255, 255, 255));
$px2->SetHideXGrid(true); $px2->SetHideXGrid(true);
//$px2->SetHorizTickIncrement(30.41); // 30.41 jours/mois en moyenne //$px2->SetHorizTickIncrement(30.41); // 30.41 jours/mois en moyenne
$px2->draw($file, $fileurl); $px2->draw($file, $fileurl);
$show2=$px2->show(); $show2 = $px2->show();
unset($px2); unset($px2);
unset($graph_datas); unset($graph_datas);
@ -409,13 +409,13 @@ else
$amounts = array(); $amounts = array();
$sql = "SELECT date_format(b.datev,'%Y%m%d')"; $sql = "SELECT date_format(b.datev,'%Y%m%d')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql.= " GROUP BY date_format(b.datev,'%Y%m%d')"; $sql .= " GROUP BY date_format(b.datev,'%Y%m%d')";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -447,20 +447,20 @@ else
$subtotal = 0; $subtotal = 0;
$day = $min; $day = $min;
$textdate=strftime("%Y%m%d", $day); $textdate = strftime("%Y%m%d", $day);
//print "x".$textdate; //print "x".$textdate;
$i = 0; $i = 0;
while ($day <= ($max+86400)) // On va au dela du dernier jour while ($day <= ($max + 86400)) // On va au dela du dernier jour
{ {
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
//print strftime ("%e %d %m %y",$day)." ".$subtotal."\n<br>"; //print strftime ("%e %d %m %y",$day)." ".$subtotal."\n<br>";
if ($day > ($max+86400)) if ($day > ($max + 86400))
{ {
$datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph
} }
else else
{ {
$datas[$i] = '' + $solde + $subtotal; $datas[$i] = '' +$solde + $subtotal;
} }
$datamin[$i] = $object->min_desired; $datamin[$i] = $object->min_desired;
$dataall[$i] = $object->min_allowed; $dataall[$i] = $object->min_allowed;
@ -470,40 +470,40 @@ else
} }
$day += 86400; $day += 86400;
$textdate=strftime("%Y%m%d", $day); $textdate = strftime("%Y%m%d", $day);
$i++; $i++;
} }
// Fabrication tableau 3 // Fabrication tableau 3
$file= $conf->bank->dir_temp."/balance".$account.".png"; $file = $conf->bank->dir_temp."/balance".$account.".png";
$fileurl=DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/balance".$account.".png";
$title=$langs->transnoentities("Balance")." - ".$langs->transnoentities("AllTime"); $title = $langs->transnoentities("Balance")." - ".$langs->transnoentities("AllTime");
$graph_datas=array(); $graph_datas = array();
foreach($datas as $i => $val) foreach ($datas as $i => $val)
{ {
$graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); $graph_datas[$i] = array(isset($labels[$i]) ? $labels[$i] : '', $datas[$i]);
if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]); if ($object->min_desired) array_push($graph_datas[$i], $datamin[$i]);
if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]); if ($object->min_allowed) array_push($graph_datas[$i], $dataall[$i]);
} }
$px3 = new DolGraph(); $px3 = new DolGraph();
$px3->SetData($graph_datas); $px3->SetData($graph_datas);
$arraylegends=array($langs->transnoentities("Balance")); $arraylegends = array($langs->transnoentities("Balance"));
if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired")); if ($object->min_desired) array_push($arraylegends, $langs->transnoentities("BalanceMinimalDesired"));
if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed")); if ($object->min_allowed) array_push($arraylegends, $langs->transnoentities("BalanceMinimalAllowed"));
$px3->SetLegend($arraylegends); $px3->SetLegend($arraylegends);
$px3->SetLegendWidthMin(180); $px3->SetLegendWidthMin(180);
$px3->SetMaxValue($px3->GetCeilMaxValue()<0?0:$px3->GetCeilMaxValue()); $px3->SetMaxValue($px3->GetCeilMaxValue() < 0 ? 0 : $px3->GetCeilMaxValue());
$px3->SetMinValue($px3->GetFloorMinValue()>0?0:$px3->GetFloorMinValue()); $px3->SetMinValue($px3->GetFloorMinValue() > 0 ? 0 : $px3->GetFloorMinValue());
$px3->SetTitle($title); $px3->SetTitle($title);
$px3->SetWidth($WIDTH); $px3->SetWidth($WIDTH);
$px3->SetHeight($HEIGHT); $px3->SetHeight($HEIGHT);
$px3->SetType(array('linesnopoint','linesnopoint','linesnopoint')); $px3->SetType(array('linesnopoint', 'linesnopoint', 'linesnopoint'));
$px3->setBgColor('onglet'); $px3->setBgColor('onglet');
$px3->setBgColorGrid(array(255,255,255)); $px3->setBgColorGrid(array(255, 255, 255));
$px3->draw($file, $fileurl); $px3->draw($file, $fileurl);
$show3=$px3->show(); $show3 = $px3->show();
unset($px3); unset($px3);
unset($graph_datas); unset($graph_datas);
@ -522,25 +522,25 @@ else
$credits = array(); $credits = array();
$debits = array(); $debits = array();
$monthnext = $month+1; $monthnext = $month + 1;
$yearnext = $year; $yearnext = $year;
if ($monthnext > 12) if ($monthnext > 12)
{ {
$monthnext=1; $monthnext = 1;
$yearnext++; $yearnext++;
} }
$sql = "SELECT date_format(b.datev,'%d')"; $sql = "SELECT date_format(b.datev,'%d')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-".$month."-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-".$month."-01 00:00:00'";
$sql.= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; $sql .= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'";
$sql.= " AND b.amount > 0"; $sql .= " AND b.amount > 0";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql.= " GROUP BY date_format(b.datev,'%d')"; $sql .= " GROUP BY date_format(b.datev,'%d')";
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -560,24 +560,24 @@ else
dol_print_error($db); dol_print_error($db);
} }
$monthnext = $month+1; $monthnext = $month + 1;
$yearnext = $year; $yearnext = $year;
if ($monthnext > 12) if ($monthnext > 12)
{ {
$monthnext=1; $monthnext = 1;
$yearnext++; $yearnext++;
} }
$sql = "SELECT date_format(b.datev,'%d')"; $sql = "SELECT date_format(b.datev,'%d')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-".$month."-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-".$month."-01 00:00:00'";
$sql.= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; $sql .= " AND b.datev < '".$yearnext."-".$monthnext."-01 00:00:00'";
$sql.= " AND b.amount < 0"; $sql .= " AND b.amount < 0";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql .= " GROUP BY date_format(b.datev,'%d')"; $sql .= " GROUP BY date_format(b.datev,'%d')";
$resql = $db->query($sql); $resql = $db->query($sql);
@ -599,40 +599,40 @@ else
$labels = array(); $labels = array();
$data_credit = array(); $data_credit = array();
$data_debit = array(); $data_debit = array();
for ($i = 0 ; $i < 31 ; $i++) for ($i = 0; $i < 31; $i++)
{ {
$data_credit[$i] = isset($credits[substr("0".($i+1), -2)]) ? $credits[substr("0".($i+1), -2)] : 0; $data_credit[$i] = isset($credits[substr("0".($i + 1), -2)]) ? $credits[substr("0".($i + 1), -2)] : 0;
$data_debit[$i] = isset($debits[substr("0".($i+1), -2)]) ? $debits[substr("0".($i+1), -2)] : 0; $data_debit[$i] = isset($debits[substr("0".($i + 1), -2)]) ? $debits[substr("0".($i + 1), -2)] : 0;
$labels[$i] = sprintf("%02d", $i+1); $labels[$i] = sprintf("%02d", $i + 1);
$datamin[$i] = $object->min_desired; $datamin[$i] = $object->min_desired;
} }
// Fabrication tableau 4a // Fabrication tableau 4a
$file= $conf->bank->dir_temp."/movement".$account."-".$year.$month.".png"; $file = $conf->bank->dir_temp."/movement".$account."-".$year.$month.".png";
$fileurl=DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/movement".$account."-".$year.$month.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/movement".$account."-".$year.$month.".png";
$title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year; $title = $langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year;
$graph_datas=array(); $graph_datas = array();
foreach($data_credit as $i => $val) foreach ($data_credit as $i => $val)
{ {
$graph_datas[$i]=array($labels[$i],$data_credit[$i],$data_debit[$i]); $graph_datas[$i] = array($labels[$i], $data_credit[$i], $data_debit[$i]);
} }
$px4 = new DolGraph(); $px4 = new DolGraph();
$px4->SetData($graph_datas); $px4->SetData($graph_datas);
$px4->SetLegend(array($langs->transnoentities("Credit"),$langs->transnoentities("Debit"))); $px4->SetLegend(array($langs->transnoentities("Credit"), $langs->transnoentities("Debit")));
$px4->SetLegendWidthMin(180); $px4->SetLegendWidthMin(180);
$px4->SetMaxValue($px4->GetCeilMaxValue()<0?0:$px4->GetCeilMaxValue()); $px4->SetMaxValue($px4->GetCeilMaxValue() < 0 ? 0 : $px4->GetCeilMaxValue());
$px4->SetMinValue($px4->GetFloorMinValue()>0?0:$px4->GetFloorMinValue()); $px4->SetMinValue($px4->GetFloorMinValue() > 0 ? 0 : $px4->GetFloorMinValue());
$px4->SetTitle($title); $px4->SetTitle($title);
$px4->SetWidth($WIDTH); $px4->SetWidth($WIDTH);
$px4->SetHeight($HEIGHT); $px4->SetHeight($HEIGHT);
$px4->SetType(array('bars','bars')); $px4->SetType(array('bars', 'bars'));
$px4->SetShading(3); $px4->SetShading(3);
$px4->setBgColor('onglet'); $px4->setBgColor('onglet');
$px4->setBgColorGrid(array(255,255,255)); $px4->setBgColorGrid(array(255, 255, 255));
$px4->SetHorizTickIncrement(1); $px4->SetHorizTickIncrement(1);
$px4->draw($file, $fileurl); $px4->draw($file, $fileurl);
$show4=$px4->show(); $show4 = $px4->show();
unset($graph_datas); unset($graph_datas);
unset($px4); unset($px4);
@ -648,15 +648,15 @@ else
$credits = array(); $credits = array();
$debits = array(); $debits = array();
$sql = "SELECT date_format(b.datev,'%m')"; $sql = "SELECT date_format(b.datev,'%m')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-01-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-01-01 00:00:00'";
$sql.= " AND b.datev <= '".$year."-12-31 23:59:59'"; $sql .= " AND b.datev <= '".$year."-12-31 23:59:59'";
$sql.= " AND b.amount > 0"; $sql .= " AND b.amount > 0";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql .= " GROUP BY date_format(b.datev,'%m');"; $sql .= " GROUP BY date_format(b.datev,'%m');";
$resql = $db->query($sql); $resql = $db->query($sql);
@ -677,15 +677,15 @@ else
dol_print_error($db); dol_print_error($db);
} }
$sql = "SELECT date_format(b.datev,'%m')"; $sql = "SELECT date_format(b.datev,'%m')";
$sql.= ", SUM(b.amount)"; $sql .= ", SUM(b.amount)";
$sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba"; $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
$sql.= " WHERE b.fk_account = ba.rowid"; $sql .= " WHERE b.fk_account = ba.rowid";
$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
$sql.= " AND b.datev >= '".$year."-01-01 00:00:00'"; $sql .= " AND b.datev >= '".$year."-01-01 00:00:00'";
$sql.= " AND b.datev <= '".$year."-12-31 23:59:59'"; $sql .= " AND b.datev <= '".$year."-12-31 23:59:59'";
$sql.= " AND b.amount < 0"; $sql .= " AND b.amount < 0";
if ($account && $_GET["option"]!='all') $sql.= " AND b.fk_account IN (".$account.")"; if ($account && $_GET["option"] != 'all') $sql .= " AND b.fk_account IN (".$account.")";
$sql .= " GROUP BY date_format(b.datev,'%m')"; $sql .= " GROUP BY date_format(b.datev,'%m')";
$resql = $db->query($sql); $resql = $db->query($sql);
@ -707,40 +707,40 @@ else
$labels = array(); $labels = array();
$data_credit = array(); $data_credit = array();
$data_debit = array(); $data_debit = array();
for ($i = 0 ; $i < 12 ; $i++) for ($i = 0; $i < 12; $i++)
{ {
$data_credit[$i] = isset($credits[substr("0".($i+1), -2)]) ? $credits[substr("0".($i+1), -2)] : 0; $data_credit[$i] = isset($credits[substr("0".($i + 1), -2)]) ? $credits[substr("0".($i + 1), -2)] : 0;
$data_debit[$i] = isset($debits[substr("0".($i+1), -2)]) ? $debits[substr("0".($i+1), -2)] : 0; $data_debit[$i] = isset($debits[substr("0".($i + 1), -2)]) ? $debits[substr("0".($i + 1), -2)] : 0;
$labels[$i] = dol_print_date(dol_mktime(12, 0, 0, $i+1, 1, 2000), "%b"); $labels[$i] = dol_print_date(dol_mktime(12, 0, 0, $i + 1, 1, 2000), "%b");
$datamin[$i] = $object->min_desired; $datamin[$i] = $object->min_desired;
} }
// Fabrication tableau 4b // Fabrication tableau 4b
$file= $conf->bank->dir_temp."/movement".$account."-".$year.".png"; $file = $conf->bank->dir_temp."/movement".$account."-".$year.".png";
$fileurl=DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/movement".$account."-".$year.".png"; $fileurl = DOL_URL_ROOT.'/viewimage.php?modulepart=banque_temp&file='."/movement".$account."-".$year.".png";
$title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Year").': '.$year; $title = $langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Year").': '.$year;
$graph_datas=array(); $graph_datas = array();
foreach($data_credit as $i => $val) foreach ($data_credit as $i => $val)
{ {
$graph_datas[$i]=array($labels[$i],$data_credit[$i],$data_debit[$i]); $graph_datas[$i] = array($labels[$i], $data_credit[$i], $data_debit[$i]);
} }
$px5 = new DolGraph(); $px5 = new DolGraph();
$px5->SetData($graph_datas); $px5->SetData($graph_datas);
$px5->SetLegend(array($langs->transnoentities("Credit"),$langs->transnoentities("Debit"))); $px5->SetLegend(array($langs->transnoentities("Credit"), $langs->transnoentities("Debit")));
$px5->SetLegendWidthMin(180); $px5->SetLegendWidthMin(180);
$px5->SetMaxValue($px5->GetCeilMaxValue()<0?0:$px5->GetCeilMaxValue()); $px5->SetMaxValue($px5->GetCeilMaxValue() < 0 ? 0 : $px5->GetCeilMaxValue());
$px5->SetMinValue($px5->GetFloorMinValue()>0?0:$px5->GetFloorMinValue()); $px5->SetMinValue($px5->GetFloorMinValue() > 0 ? 0 : $px5->GetFloorMinValue());
$px5->SetTitle($title); $px5->SetTitle($title);
$px5->SetWidth($WIDTH); $px5->SetWidth($WIDTH);
$px5->SetHeight($HEIGHT); $px5->SetHeight($HEIGHT);
$px5->SetType(array('bars','bars')); $px5->SetType(array('bars', 'bars'));
$px5->SetShading(3); $px5->SetShading(3);
$px5->setBgColor('onglet'); $px5->setBgColor('onglet');
$px5->setBgColorGrid(array(255,255,255)); $px5->setBgColorGrid(array(255, 255, 255));
$px5->SetHorizTickIncrement(1); $px5->SetHorizTickIncrement(1);
$px5->draw($file, $fileurl); $px5->draw($file, $fileurl);
$show5=$px5->show(); $show5 = $px5->show();
unset($graph_datas); unset($graph_datas);
unset($px5); unset($px5);
@ -751,7 +751,7 @@ else
// Onglets // Onglets
$head=bank_prepare_head($object); $head = bank_prepare_head($object);
dol_fiche_head($head, 'graph', $langs->trans("FinancialAccount"), 0, 'account'); dol_fiche_head($head, 'graph', $langs->trans("FinancialAccount"), 0, 'account');
@ -759,32 +759,32 @@ $linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/list.php?restore_lastsearch_v
if ($account) if ($account)
{ {
if (! preg_match('/,/', $account)) if (!preg_match('/,/', $account))
{ {
$moreparam='&month='.$month.'&year='.$year.($mode=='showalltime'?'&mode=showalltime':''); $moreparam = '&month='.$month.'&year='.$year.($mode == 'showalltime' ? '&mode=showalltime' : '');
if ($_GET["option"]!='all') if ($_GET["option"] != 'all')
{ {
$morehtml='<a href="'.$_SERVER["PHP_SELF"].'?account='.$account.'&option=all'.$moreparam.'">'.$langs->trans("ShowAllAccounts").'</a>'; $morehtml = '<a href="'.$_SERVER["PHP_SELF"].'?account='.$account.'&option=all'.$moreparam.'">'.$langs->trans("ShowAllAccounts").'</a>';
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', '', $moreparam, 0, '', '', 1); dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', '', $moreparam, 0, '', '', 1);
} }
else else
{ {
$morehtml='<a href="'.$_SERVER["PHP_SELF"].'?account='.$account.$moreparam.'">'.$langs->trans("BackToAccount").'</a>'; $morehtml = '<a href="'.$_SERVER["PHP_SELF"].'?account='.$account.$moreparam.'">'.$langs->trans("BackToAccount").'</a>';
print $langs->trans("AllAccounts"); print $langs->trans("AllAccounts");
//print $morehtml; //print $morehtml;
} }
} }
else else
{ {
$bankaccount=new Account($db); $bankaccount = new Account($db);
$listid=explode(',', $account); $listid = explode(',', $account);
foreach($listid as $key => $id) foreach ($listid as $key => $id)
{ {
$bankaccount->fetch($id); $bankaccount->fetch($id);
$bankaccount->label=$bankaccount->ref; $bankaccount->label = $bankaccount->ref;
print $bankaccount->getNomUrl(1); print $bankaccount->getNomUrl(1);
if ($key < (count($listid)-1)) print ', '; if ($key < (count($listid) - 1)) print ', ';
} }
} }
} }
@ -818,13 +818,13 @@ print '<br><br></td></tr>';
// Graphs // Graphs
if ($mode == 'standard') if ($mode == 'standard')
{ {
$prevyear=$year; $nextyear=$year; $prevyear = $year; $nextyear = $year;
$prevmonth=$month-1;$nextmonth=$month+1; $prevmonth = $month - 1; $nextmonth = $month + 1;
if ($prevmonth < 1) { $prevmonth=12; $prevyear--; } if ($prevmonth < 1) { $prevmonth = 12; $prevyear--; }
if ($nextmonth > 12) { $nextmonth=1; $nextyear++; } if ($nextmonth > 12) { $nextmonth = 1; $nextyear++; }
// For month // For month
$link="<a href='".$_SERVER["PHP_SELF"]."?account=".$account.($_GET["option"]!='all'?'':'&option=all')."&year=".$prevyear."&month=".$prevmonth."'>".img_previous('', 'class="valignbottom"')."</a> ".$langs->trans("Month")." <a href='".$_SERVER["PHP_SELF"]."?account=".$account."&year=".$nextyear."&month=".$nextmonth."'>".img_next('', 'class="valignbottom"')."</a>"; $link = "<a href='".$_SERVER["PHP_SELF"]."?account=".$account.($_GET["option"] != 'all' ? '' : '&option=all')."&year=".$prevyear."&month=".$prevmonth."'>".img_previous('', 'class="valignbottom"')."</a> ".$langs->trans("Month")." <a href='".$_SERVER["PHP_SELF"]."?account=".$account."&year=".$nextyear."&month=".$nextmonth."'>".img_next('', 'class="valignbottom"')."</a>";
print '<tr><td class="right">'.$link.'</td></tr>'; print '<tr><td class="right">'.$link.'</td></tr>';
print '<tr><td class="center">'; print '<tr><td class="center">';
@ -837,8 +837,8 @@ if ($mode == 'standard')
print '</td></tr>'; print '</td></tr>';
// For year // For year
$prevyear=$year-1;$nextyear=$year+1; $prevyear = $year - 1; $nextyear = $year + 1;
$link="<a href='".$_SERVER["PHP_SELF"]."?account=".$account.($_GET["option"]!='all'?'':'&option=all')."&year=".($prevyear)."'>".img_previous('', 'class="valignbottom"')."</a> ".$langs->trans("Year")." <a href='".$_SERVER["PHP_SELF"]."?account=".$account."&year=".($nextyear)."'>".img_next('', 'class="valignbottom"')."</a>"; $link = "<a href='".$_SERVER["PHP_SELF"]."?account=".$account.($_GET["option"] != 'all' ? '' : '&option=all')."&year=".($prevyear)."'>".img_previous('', 'class="valignbottom"')."</a> ".$langs->trans("Year")." <a href='".$_SERVER["PHP_SELF"]."?account=".$account."&year=".($nextyear)."'>".img_next('', 'class="valignbottom"')."</a>";
print '<tr><td class="right">'.$link.'</td></tr>'; print '<tr><td class="right">'.$link.'</td></tr>';
print '<tr><td class="center">'; print '<tr><td class="center">';

View File

@ -154,12 +154,10 @@ if ($result)
if ($optioncss != '') $param.='&amp;optioncss='.urlencode($optioncss); if ($optioncss != '') $param.='&amp;optioncss='.urlencode($optioncss);
$newcardbutton=''; $newcardbutton = '';
if ($user->rights->banque->modifier) if ($user->rights->banque->modifier)
{ {
$newcardbutton='<a class="butActionNew" href="'.DOL_URL_ROOT.'/compta/bank/various_payment/card.php?action=create"><span class="valignmiddle text-plus-circle">'.$langs->trans('MenuNewVariousPayment').'</span>'; $newcardbutton .= dolGetButtonTitle($langs->trans('MenuNewVariousPayment'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/bank/various_payment/card.php?action=create');
$newcardbutton.= '<span class="fa fa-plus-circle valignmiddle"></span>';
$newcardbutton.= '</a>';
} }
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'; print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
@ -306,7 +304,7 @@ if ($result)
} }
// Debit // Debit
print "<td class=\"right\">"; print '<td class="nowrap right">';
if ($obj->sens == 0) if ($obj->sens == 0)
{ {
print price($obj->amount); print price($obj->amount);
@ -317,7 +315,7 @@ if ($result)
print "</td>"; print "</td>";
// Credit // Credit
print "<td class=\"right\">"; print '<td class="nowrap right">';
if ($obj->sens == 1) if ($obj->sens == 1)
{ {
print price($obj->amount); print price($obj->amount);
@ -325,17 +323,16 @@ if ($result)
} }
if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['nbfield']++;
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='total_cred'; if (! $i) $totalarray['pos'][$totalarray['nbfield']]='total_cred';
print "</td>"; print '</td>' ;
print '<td></td>';
print "<td></td>"; if (! $i) $totalarray['nbfield']++;
print "</tr>\n";
$i++; $i++;
} }
$colspan = 4;
if (!empty($conf->banque->enabled)) $colspan++;
if (!empty($conf->accounting->enabled)) $colspan++;
// Show total line // Show total line
include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';

View File

@ -171,9 +171,7 @@ if ($resql)
$newcardbutton = ''; $newcardbutton = '';
if ($user->rights->tax->charges->creer) if ($user->rights->tax->charges->creer)
{ {
$newcardbutton = '<a class="butActionNew" href="'.DOL_URL_ROOT.'/compta/sociales/card.php?action=create"><span class="valignmiddle text-plus-circle">'.$langs->trans('MenuNewSocialContribution').'</span>'; $newcardbutton .= dolGetButtonTitle($langs->trans('MenuNewSocialContribution'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/sociales/card.php?action=create');
$newcardbutton .= '<span class="fa fa-plus-circle valignmiddle"></span>';
$newcardbutton .= '</a>';
} }
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'; print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
@ -267,15 +265,16 @@ if ($resql)
print '<tr class="oddeven">'; print '<tr class="oddeven">';
// Ref // Ref
print '<td width="60">'; print "<td>".$chargesociale_static->getNomUrl(1, '20')."</td>\n";
print $chargesociale_static->getNomUrl(1, '20'); if (! $i) $totalarray['nbfield']++;
print '</td>';
// Label // Label
print '<td>'.dol_trunc($obj->label, 42).'</td>'; print "<td>".dol_trunc($obj->label, 42)."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Type // Type
print '<td>'.$obj->type_label.'</td>'; print "<td>".$obj->type_label."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Date end period // Date end period
print '<td align="center">'; print '<td align="center">';
@ -287,21 +286,26 @@ if ($resql)
{ {
print '&nbsp;'; print '&nbsp;';
} }
print '</td>'; print "</td>\n";
if (! $i) $totalarray['nbfield']++;
// Amount // Amount
print '<td class="right" width="100">'.price($obj->amount).'</td>'; print '<td class="nowrap right">'.price($obj->amount).'</td>';
if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['nbfield']++;
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalttcfield'; if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalttcfield';
$totalarray['val']['totalttcfield'] += $obj->amount; $totalarray['val']['totalttcfield'] += $obj->amount;
// Due date // Due date
print '<td width="110" align="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>'; print '<td width="110" align="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>';
if (! $i) $totalarray['nbfield']++;
print '<td class="nowrap right">'.$chargesociale_static->LibStatut($obj->paye, 5, $obj->alreadypayed).'</td>'; print '<td class="nowrap right">'.$chargesociale_static->LibStatut($obj->paye, 5, $obj->alreadypayed).'</td>';
if (! $i) $totalarray['nbfield']++;
print '<td></td>'; print '<td></td>';
if (! $i) $totalarray['nbfield']++;
print '</tr>'; print '</tr>';
$i++; $i++;
} }

View File

@ -231,7 +231,7 @@ else
print '</div>'; print '</div>';
print dol_fiche_end(); dol_fiche_end();
// Actions buttons // Actions buttons

View File

@ -32,9 +32,9 @@ include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php';
*/ */
class box_shipments extends ModeleBoxes class box_shipments extends ModeleBoxes
{ {
public $boxcode="lastcustomershipments"; public $boxcode = "lastcustomershipments";
public $boximg="sending"; public $boximg = "sending";
public $boxlabel="BoxLastCustomerShipments"; public $boxlabel = "BoxLastCustomerShipments";
public $depends = array("expedition"); public $depends = array("expedition");
/** /**
@ -58,9 +58,9 @@ class box_shipments extends ModeleBoxes
{ {
global $user; global $user;
$this->db=$db; $this->db = $db;
$this->hidden=! ($user->rights->expedition->lire); $this->hidden = !($user->rights->expedition->lire);
} }
/** /**
@ -88,26 +88,26 @@ class box_shipments extends ModeleBoxes
if ($user->rights->expedition->lire) if ($user->rights->expedition->lire)
{ {
$sql = "SELECT s.nom as name"; $sql = "SELECT s.nom as name";
$sql.= ", s.rowid as socid"; $sql .= ", s.rowid as socid";
$sql.= ", s.code_client"; $sql .= ", s.code_client";
$sql.= ", s.logo, s.email"; $sql .= ", s.logo, s.email";
$sql.= ", e.ref, e.tms"; $sql .= ", e.ref, e.tms";
$sql.= ", e.rowid"; $sql .= ", e.rowid";
$sql.= ", e.ref_customer"; $sql .= ", e.ref_customer";
$sql.= ", e.fk_statut"; $sql .= ", e.fk_statut";
$sql.= ", e.fk_user_valid"; $sql .= ", e.fk_user_valid";
$sql.= ", c.ref as commande_ref"; $sql .= ", c.ref as commande_ref";
$sql.= ", c.rowid as commande_id"; $sql .= ", c.rowid as commande_id";
$sql.= " FROM ".MAIN_DB_PREFIX."expedition as e"; $sql .= " FROM ".MAIN_DB_PREFIX."expedition as e";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON e.rowid = el.fk_target AND el.targettype = 'shipping' AND el.sourcetype IN ('commande')"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON e.rowid = el.fk_target AND el.targettype = 'shipping' AND el.sourcetype IN ('commande')";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."commande as c ON el.fk_source = c.rowid AND el.sourcetype IN ('commande') AND el.targettype = 'shipping'"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."commande as c ON el.fk_source = c.rowid AND el.sourcetype IN ('commande') AND el.targettype = 'shipping'";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = e.fk_soc"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = e.fk_soc";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON e.fk_soc = sc.fk_soc"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON e.fk_soc = sc.fk_soc";
$sql.= " WHERE e.entity = ".$conf->entity; $sql .= " WHERE e.entity = ".$conf->entity;
if (! empty($conf->global->ORDER_BOX_LAST_SHIPMENTS_VALIDATED_ONLY)) $sql.=" AND e.fk_statut = 1"; if (!empty($conf->global->ORDER_BOX_LAST_SHIPMENTS_VALIDATED_ONLY)) $sql .= " AND e.fk_statut = 1";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND sc.fk_user = " .$user->id; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= " AND sc.fk_user = ".$user->id;
else $sql.= " ORDER BY e.date_delivery, e.ref DESC "; else $sql .= " ORDER BY e.date_delivery, e.ref DESC ";
$sql.= $this->db->plimit($max, 0); $sql .= $this->db->plimit($max, 0);
$result = $this->db->query($sql); $result = $this->db->query($sql);
if ($result) { if ($result) {
@ -122,8 +122,8 @@ class box_shipments extends ModeleBoxes
$shipmentstatic->ref = $objp->ref; $shipmentstatic->ref = $objp->ref;
$shipmentstatic->ref_customer = $objp->ref_customer; $shipmentstatic->ref_customer = $objp->ref_customer;
$orderstatic->id= $objp->commande_id; $orderstatic->id = $objp->commande_id;
$orderstatic->ref=$objp->commande_ref; $orderstatic->ref = $objp->commande_ref;
$societestatic->id = $objp->socid; $societestatic->id = $objp->socid;
$societestatic->name = $objp->name; $societestatic->name = $objp->name;
@ -157,7 +157,7 @@ class box_shipments extends ModeleBoxes
$line++; $line++;
} }
if ($num==0) $this->info_box_contents[$line][0] = array('td' => 'class="center"','text'=>$langs->trans("NoRecordedShipments")); if ($num == 0) $this->info_box_contents[$line][0] = array('td' => 'class="center"', 'text'=>$langs->trans("NoRecordedShipments"));
$this->db->free($result); $this->db->free($result);
} else { } else {

View File

@ -56,7 +56,7 @@ class box_task extends ModeleBoxes
*/ */
public function __construct($db, $param = '') public function __construct($db, $param = '')
{ {
global $user, $langs; global $conf, $user, $langs;
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array('boxes', 'projects')); $langs->loadLangs(array('boxes', 'projects'));
@ -64,7 +64,7 @@ class box_task extends ModeleBoxes
$this->boxlabel = "Tasks"; $this->boxlabel = "Tasks";
$this->db = $db; $this->db = $db;
$this->hidden = !($user->rights->projet->lire); $this->hidden = (!empty($conf->global->PROJECT_HIDE_TASKS) || !($user->rights->projet->lire));
} }
/** /**

View File

@ -7029,7 +7029,7 @@ abstract class CommonObject
if ($nbbyrow > 0) if ($nbbyrow > 0)
{ {
if ($nbphoto == 1) $return .= '<table class="valigntop center centpercent" style="border: 0; padding: 2; border-spacing: 2px; border-collapse: separate;">'; if ($nbphoto == 1) $return .= '<table class="valigntop center centpercent" style="border: 0; padding: 2px; border-spacing: 2px; border-collapse: separate;">';
if ($nbphoto % $nbbyrow == 1) $return .= '<tr class="center valignmiddle" style="border: 1px">'; if ($nbphoto % $nbbyrow == 1) $return .= '<tr class="center valignmiddle" style="border: 1px">';
$return .= '<td style="width: '.ceil(100 / $nbbyrow).'%" class="photo">'; $return .= '<td style="width: '.ceil(100 / $nbbyrow).'%" class="photo">';

View File

@ -26,7 +26,7 @@
*/ */
// Put here all includes required by your class file // Put here all includes required by your class file
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; //require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; //require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
@ -84,7 +84,7 @@ class EmailSenderProfile extends CommonObject
/** /**
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
*/ */
public $fields=array( public $fields = array(
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',), 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',),
'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>-1, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>-1, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,),
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>1), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>1),
@ -167,8 +167,8 @@ class EmailSenderProfile extends CommonObject
$this->db = $db; $this->db = $db;
if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) $this->fields['rowid']['visible']=0; if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) $this->fields['rowid']['visible'] = 0;
if (empty($conf->multicompany->enabled)) $this->fields['entity']['enabled']=0; if (empty($conf->multicompany->enabled)) $this->fields['entity']['enabled'] = 0;
} }
/** /**
@ -244,7 +244,7 @@ class EmailSenderProfile extends CommonObject
public function fetch($id, $ref = null) public function fetch($id, $ref = null)
{ {
$result = $this->fetchCommon($id, $ref); $result = $this->fetchCommon($id, $ref);
if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); if ($result > 0 && !empty($this->table_element_line)) $this->fetchLines();
return $result; return $result;
} }
@ -255,11 +255,11 @@ class EmailSenderProfile extends CommonObject
*/ */
public function fetchLines() public function fetchLines()
{ {
$this->lines=array(); $this->lines = array();
// Load lines with object EmailSenderProfileLine // Load lines with object EmailSenderProfileLine
return count($this->lines)?1:0; return count($this->lines) ? 1 : 0;
} }
/** /**
@ -301,19 +301,19 @@ class EmailSenderProfile extends CommonObject
$result = ''; $result = '';
$companylink = ''; $companylink = '';
$label=$this->label; $label = $this->label;
$url=''; $url = '';
//$url = dol_buildpath('/monmodule/emailsenderprofile_card.php',1).'?id='.$this->id; //$url = dol_buildpath('/monmodule/emailsenderprofile_card.php',1).'?id='.$this->id;
$linkstart = ''; $linkstart = '';
$linkend=''; $linkend = '';
if ($withpicto) { if ($withpicto) {
$result.=($linkstart.img_object($label, 'label', 'class="classfortooltip"').$linkend); $result .= ($linkstart.img_object($label, 'label', 'class="classfortooltip"').$linkend);
if ($withpicto != 2) $result.=' '; if ($withpicto != 2) $result .= ' ';
} }
$result.= $linkstart . $this->label . $linkend; $result .= $linkstart.$this->label.$linkend;
return $result; return $result;
} }
@ -381,10 +381,10 @@ class EmailSenderProfile extends CommonObject
public function info($id) public function info($id)
{ {
$sql = 'SELECT rowid, date_creation as datec, tms as datem,'; $sql = 'SELECT rowid, date_creation as datec, tms as datem,';
$sql.= ' fk_user_creat, fk_user_modif'; $sql .= ' fk_user_creat, fk_user_modif';
$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
$sql.= ' WHERE t.rowid = '.$id; $sql .= ' WHERE t.rowid = '.$id;
$result=$this->db->query($sql); $result = $this->db->query($sql);
if ($result) if ($result)
{ {
if ($this->db->num_rows($result)) if ($this->db->num_rows($result))
@ -395,7 +395,7 @@ class EmailSenderProfile extends CommonObject
{ {
$cuser = new User($this->db); $cuser = new User($this->db);
$cuser->fetch($obj->fk_user_author); $cuser->fetch($obj->fk_user_author);
$this->user_creation = $cuser; $this->user_creation = $cuser;
} }
if ($obj->fk_user_valid) if ($obj->fk_user_valid)
@ -409,7 +409,7 @@ class EmailSenderProfile extends CommonObject
{ {
$cluser = new User($this->db); $cluser = new User($this->db);
$cluser->fetch($obj->fk_user_cloture); $cluser->fetch($obj->fk_user_cloture);
$this->user_cloture = $cluser; $this->user_cloture = $cluser;
} }
$this->date_creation = $this->db->jdate($obj->datec); $this->date_creation = $this->db->jdate($obj->datec);

View File

@ -31,12 +31,12 @@ class Events // extends CommonObject
/** /**
* @var string ID to identify managed object * @var string ID to identify managed object
*/ */
public $element='events'; public $element = 'events';
/** /**
* @var string Name of table without prefix where object is stored * @var string Name of table without prefix where object is stored
*/ */
public $table_element='events'; public $table_element = 'events';
/** /**
* @var int ID * @var int ID
@ -51,9 +51,16 @@ class Events // extends CommonObject
/** /**
* @var string Error code (or message) * @var string Error code (or message)
*/ */
public $error=''; public $error = '';
/**
* @var int timestamp
*/
public $tms; public $tms;
/**
* @var string Type
*/
public $type; public $type;
/** /**
@ -63,8 +70,14 @@ class Events // extends CommonObject
public $dateevent; public $dateevent;
/**
* @var string IP
*/
public $ip; public $ip;
/**
* @var string User agent
*/
public $user_agent; public $user_agent;
/** /**
@ -78,18 +91,18 @@ class Events // extends CommonObject
public $prefix_session; public $prefix_session;
// List of all Audit/Security events supported by triggers // List of all Audit/Security events supported by triggers
public $eventstolog=array( public $eventstolog = array(
array('id'=>'USER_LOGIN', 'test'=>1), array('id'=>'USER_LOGIN', 'test'=>1),
array('id'=>'USER_LOGIN_FAILED', 'test'=>1), array('id'=>'USER_LOGIN_FAILED', 'test'=>1),
array('id'=>'USER_LOGOUT', 'test'=>1), array('id'=>'USER_LOGOUT', 'test'=>1),
array('id'=>'USER_CREATE', 'test'=>1), array('id'=>'USER_CREATE', 'test'=>1),
array('id'=>'USER_MODIFY', 'test'=>1), array('id'=>'USER_MODIFY', 'test'=>1),
array('id'=>'USER_NEW_PASSWORD', 'test'=>1), array('id'=>'USER_NEW_PASSWORD', 'test'=>1),
array('id'=>'USER_ENABLEDISABLE', 'test'=>1), array('id'=>'USER_ENABLEDISABLE', 'test'=>1),
array('id'=>'USER_DELETE', 'test'=>1), array('id'=>'USER_DELETE', 'test'=>1),
array('id'=>'GROUP_CREATE', 'test'=>1), array('id'=>'GROUP_CREATE', 'test'=>1),
array('id'=>'GROUP_MODIFY', 'test'=>1), array('id'=>'GROUP_MODIFY', 'test'=>1),
array('id'=>'GROUP_DELETE', 'test'=>1), array('id'=>'GROUP_DELETE', 'test'=>1),
); );
@ -97,11 +110,11 @@ class Events // extends CommonObject
/** /**
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
*/ */
public $fields=array( public $fields = array(
'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id'),
'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>20), 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>20),
'prefix_session'=>array('type'=>'varchar(255)', 'label'=>'PrefixSession', 'enabled'=>1, 'visible'=>-1, 'notnull'=>-1, 'index'=>0, 'position'=>1000), 'prefix_session'=>array('type'=>'varchar(255)', 'label'=>'PrefixSession', 'enabled'=>1, 'visible'=>-1, 'notnull'=>-1, 'index'=>0, 'position'=>1000),
'user_agent' =>array('type'=>'varchar(255)', 'label'=>'UserAgent', 'enabled'=>1, 'visible'=>-1, 'notnull'=> 1, 'default'=>0, 'index'=>1, 'position'=>1000), 'user_agent' =>array('type'=>'varchar(255)', 'label'=>'UserAgent', 'enabled'=>1, 'visible'=>-1, 'notnull'=> 1, 'default'=>0, 'index'=>1, 'position'=>1000),
); );
@ -127,35 +140,35 @@ class Events // extends CommonObject
global $conf; global $conf;
// Clean parameters // Clean parameters
$this->description=trim($this->description); $this->description = trim($this->description);
if (empty($this->user_agent) && !empty($_SERVER['HTTP_USER_AGENT'])) $this->user_agent=$_SERVER['HTTP_USER_AGENT']; if (empty($this->user_agent) && !empty($_SERVER['HTTP_USER_AGENT'])) $this->user_agent = $_SERVER['HTTP_USER_AGENT'];
// Check parameters // Check parameters
if (empty($this->description)) { $this->error='ErrorBadValueForParameterCreateEventDesc'; return -1; } if (empty($this->description)) { $this->error = 'ErrorBadValueForParameterCreateEventDesc'; return -1; }
// Insert request // Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."events("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."events(";
$sql.= "type,"; $sql .= "type,";
$sql.= "entity,"; $sql .= "entity,";
$sql.= "ip,"; $sql .= "ip,";
$sql.= "user_agent,"; $sql .= "user_agent,";
$sql.= "dateevent,"; $sql .= "dateevent,";
$sql.= "fk_user,"; $sql .= "fk_user,";
$sql.= "description,"; $sql .= "description,";
$sql.= "prefix_session"; $sql .= "prefix_session";
$sql.= ") VALUES ("; $sql .= ") VALUES (";
$sql.= " '".$this->db->escape($this->type)."',"; $sql .= " '".$this->db->escape($this->type)."',";
$sql.= " ".$conf->entity.","; $sql .= " ".$conf->entity.",";
$sql.= " '".$this->db->escape(getUserRemoteIP())."',"; $sql .= " '".$this->db->escape(getUserRemoteIP())."',";
$sql.= " ".($this->user_agent ? "'".$this->db->escape(dol_trunc($this->user_agent, 250))."'" : 'NULL').","; $sql .= " ".($this->user_agent ? "'".$this->db->escape(dol_trunc($this->user_agent, 250))."'" : 'NULL').",";
$sql.= " '".$this->db->idate($this->dateevent)."',"; $sql .= " '".$this->db->idate($this->dateevent)."',";
$sql.= " ".($user->id?"'".$this->db->escape($user->id)."'":'NULL').","; $sql .= " ".($user->id ? "'".$this->db->escape($user->id)."'" : 'NULL').",";
$sql.= " '".$this->db->escape(dol_trunc($this->description, 250))."',"; $sql .= " '".$this->db->escape(dol_trunc($this->description, 250))."',";
$sql.= " '".$this->db->escape(dol_getprefix())."'"; $sql .= " '".$this->db->escape(dol_getprefix())."'";
$sql.= ")"; $sql .= ")";
dol_syslog(get_class($this)."::create", LOG_DEBUG); dol_syslog(get_class($this)."::create", LOG_DEBUG);
$resql=$this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."events"); $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."events");
@ -163,7 +176,7 @@ class Events // extends CommonObject
} }
else else
{ {
$this->error="Error ".$this->db->lasterror(); $this->error = "Error ".$this->db->lasterror();
return -1; return -1;
} }
} }
@ -179,25 +192,25 @@ class Events // extends CommonObject
public function update($user = null, $notrigger = 0) public function update($user = null, $notrigger = 0)
{ {
// Clean parameters // Clean parameters
$this->id=trim($this->id); $this->id = (int) $this->id;
$this->type=trim($this->type); $this->type = trim($this->type);
$this->description=trim($this->description); $this->description = trim($this->description);
// Check parameters // Check parameters
// Put here code to add control on parameters values // Put here code to add control on parameters values
// Update request // Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."events SET"; $sql = "UPDATE ".MAIN_DB_PREFIX."events SET";
$sql.= " type='".$this->db->escape($this->type)."',"; $sql .= " type='".$this->db->escape($this->type)."',";
$sql.= " dateevent='".$this->db->idate($this->dateevent)."',"; $sql .= " dateevent='".$this->db->idate($this->dateevent)."',";
$sql.= " description='".$this->db->escape($this->description)."'"; $sql .= " description='".$this->db->escape($this->description)."'";
$sql.= " WHERE rowid=".$this->id; $sql .= " WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::update", LOG_DEBUG); dol_syslog(get_class($this)."::update", LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if (! $resql) if (!$resql)
{ {
$this->error="Error ".$this->db->lasterror(); $this->error = "Error ".$this->db->lasterror();
return -1; return -1;
} }
return 1; return 1;
@ -214,27 +227,27 @@ class Events // extends CommonObject
public function fetch($id, $user = null) public function fetch($id, $user = null)
{ {
$sql = "SELECT"; $sql = "SELECT";
$sql.= " t.rowid,"; $sql .= " t.rowid,";
$sql.= " t.tms,"; $sql .= " t.tms,";
$sql.= " t.type,"; $sql .= " t.type,";
$sql.= " t.entity,"; $sql .= " t.entity,";
$sql.= " t.dateevent,"; $sql .= " t.dateevent,";
$sql.= " t.description,"; $sql .= " t.description,";
$sql.= " t.ip,"; $sql .= " t.ip,";
$sql.= " t.user_agent,"; $sql .= " t.user_agent,";
$sql.= " t.prefix_session"; $sql .= " t.prefix_session";
$sql.= " FROM ".MAIN_DB_PREFIX."events as t"; $sql .= " FROM ".MAIN_DB_PREFIX."events as t";
$sql.= " WHERE t.rowid = ".$id; $sql .= " WHERE t.rowid = ".$id;
dol_syslog(get_class($this)."::fetch", LOG_DEBUG); dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
$resql=$this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
if ($this->db->num_rows($resql)) if ($this->db->num_rows($resql))
{ {
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
$this->id = $obj->rowid; $this->id = $obj->rowid;
$this->tms = $this->db->jdate($obj->tms); $this->tms = $this->db->jdate($obj->tms);
$this->type = $obj->type; $this->type = $obj->type;
$this->entity = $obj->entity; $this->entity = $obj->entity;
@ -250,7 +263,7 @@ class Events // extends CommonObject
} }
else else
{ {
$this->error="Error ".$this->db->lasterror(); $this->error = "Error ".$this->db->lasterror();
return -1; return -1;
} }
} }
@ -265,13 +278,13 @@ class Events // extends CommonObject
public function delete($user) public function delete($user)
{ {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."events"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."events";
$sql.= " WHERE rowid=".$this->id; $sql .= " WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::delete", LOG_DEBUG); dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if (! $resql) if (!$resql)
{ {
$this->error="Error ".$this->db->lasterror(); $this->error = "Error ".$this->db->lasterror();
return -1; return -1;
} }
@ -288,12 +301,12 @@ class Events // extends CommonObject
*/ */
public function initAsSpecimen() public function initAsSpecimen()
{ {
$this->id=0; $this->id = 0;
$this->tms=time(); $this->tms = time();
$this->type=''; $this->type = '';
$this->dateevent=time(); $this->dateevent = time();
$this->description='This is a specimen event'; $this->description = 'This is a specimen event';
$this->ip = '1.2.3.4'; $this->ip = '1.2.3.4';
$this->user_agent = 'Mozilla specimen User Agent X.Y'; $this->user_agent = 'Mozilla specimen User Agent X.Y';
$this->prefix_session = dol_getprefix(); $this->prefix_session = dol_getprefix();

View File

@ -557,7 +557,7 @@ class ExtraFields
} }
else else
{ {
print dol_print_error($this->db); dol_print_error($this->db);
return -1; return -1;
} }
} }
@ -813,7 +813,7 @@ class ExtraFields
else else
{ {
$this->db->rollback(); $this->db->rollback();
print dol_print_error($this->db); dol_print_error($this->db);
return -1; return -1;
} }
} }

View File

@ -36,7 +36,7 @@ class FormCron extends Form
/** /**
* @var string Error code (or message) * @var string Error code (or message)
*/ */
public $error=''; public $error = '';
/** /**
* Constructor * Constructor
@ -64,36 +64,37 @@ class FormCron extends Form
global $langs; global $langs;
$langs->load('cron@cron'); $langs->load('cron@cron');
$out = '';
if (!empty($readonly)) { if (!empty($readonly)) {
if ($selected=='command') { if ($selected == 'command') {
$out= $langs->trans('CronType_command'); $out = $langs->trans('CronType_command');
$out.='<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>'; $out .= '<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>';
$out.= '<OPTION value="command" selected>'.$langs->trans('CronType_command').'</OPTION>'; $out .= '<OPTION value="command" selected>'.$langs->trans('CronType_command').'</OPTION>';
$out.='</SELECT>'; $out .= '</SELECT>';
} elseif ($selected=='method') { } elseif ($selected == 'method') {
$out= $langs->trans('CronType_method'); $out = $langs->trans('CronType_method');
$out.='<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>'; $out .= '<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>';
$out.= '<OPTION value="method" selected>'.$langs->trans('CronType_method').'</OPTION>'; $out .= '<OPTION value="method" selected>'.$langs->trans('CronType_method').'</OPTION>';
$out.='</SELECT>'; $out .= '</SELECT>';
} }
} else { } else {
$out='<SELECT class="flat" name="'.$htmlname.'" id="'.$htmlname.'" />'; $out = '<SELECT class="flat" name="'.$htmlname.'" id="'.$htmlname.'" />';
if ($selected=='command') { if ($selected == 'command') {
$selected_attr=' selected '; $selected_attr = ' selected ';
} else { } else {
$selected_attr=''; $selected_attr = '';
} }
$out.= '<OPTION value="command" '.$selected_attr.'>'.$langs->trans('CronType_command').'</OPTION>'; $out .= '<OPTION value="command" '.$selected_attr.'>'.$langs->trans('CronType_command').'</OPTION>';
if ($selected=='method') { if ($selected == 'method') {
$selected_attr=' selected '; $selected_attr = ' selected ';
} else { } else {
$selected_attr=''; $selected_attr = '';
} }
$out.= '<OPTION value="method" '.$selected_attr.'>'.$langs->trans('CronType_method').'</OPTION>'; $out .= '<OPTION value="method" '.$selected_attr.'>'.$langs->trans('CronType_method').'</OPTION>';
$out.='</SELECT>'; $out .= '</SELECT>';
} }
return $out; return $out;

View File

@ -421,14 +421,13 @@ class FormTicket
if ($withdolfichehead) dol_fiche_end(); if ($withdolfichehead) dol_fiche_end();
print '<br><center>'; print '<div class="center">';
print '<input class="button" type="submit" name="add" value="'.$langs->trans(($this->withthreadid > 0 ? "SendResponse" : "NewTicket")).'" />'; print '<input class="button" type="submit" name="add" value="'.$langs->trans(($this->withthreadid > 0 ? "SendResponse" : "NewTicket")).'" />';
if ($this->withcancel) { if ($this->withcancel) {
print " &nbsp; &nbsp; "; print " &nbsp; &nbsp; &nbsp;";
print "<input class=\"button\" type=\"submit\" name=\"cancel\" value=\"".$langs->trans("Cancel")."\">"; print "<input class=\"button\" type=\"submit\" name=\"cancel\" value=\"".$langs->trans("Cancel")."\">";
} }
print "</center>\n"; print '</div>';
print "</form>\n"; print "</form>\n";
print "<!-- End form TICKET -->\n"; print "<!-- End form TICKET -->\n";

View File

@ -702,9 +702,9 @@ function modulehelp_prepare_head($object)
$h++; $h++;
} }
complete_head_from_modules($conf, $langs, null, $head, $h, 'modulehelp_admin'); complete_head_from_modules($conf, $langs, $object, $head, $h, 'modulehelp_admin');
complete_head_from_modules($conf, $langs, null, $head, $h, 'modulehelp_admin', 'remove'); complete_head_from_modules($conf, $langs, $object, $head, $h, 'modulehelp_admin', 'remove');
return $head; return $head;

View File

@ -326,7 +326,7 @@ function ajax_multiautocompleter($htmlname, $fields, $url, $option = '', $minLen
* @param string $message Message of dialog box * @param string $message Message of dialog box
* @param int $w Width of dialog box * @param int $w Width of dialog box
* @param int $h height of dialog box * @param int $h height of dialog box
* @return void * @return string
*/ */
function ajax_dialog($title, $message, $w = 350, $h = 150) function ajax_dialog($title, $message, $w = 350, $h = 150)
{ {

View File

@ -5956,16 +5956,18 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
$substitutionarray['__THIRDPARTY_EMAIL__'] = '__THIRDPARTY_EMAIL__'; $substitutionarray['__THIRDPARTY_EMAIL__'] = '__THIRDPARTY_EMAIL__';
$substitutionarray['__THIRDPARTY_PHONE__'] = '__THIRDPARTY_PHONE__'; $substitutionarray['__THIRDPARTY_PHONE__'] = '__THIRDPARTY_PHONE__';
$substitutionarray['__THIRDPARTY_FAX__'] = '__THIRDPARTY_FAX__'; $substitutionarray['__THIRDPARTY_FAX__'] = '__THIRDPARTY_FAX__';
$substitutionarray['__THIRDPARTY_ADRESS__'] = '__THIRDPARTY_ADRESS__'; $substitutionarray['__THIRDPARTY_ADDRESS__'] = '__THIRDPARTY_ADDRESS__';
$substitutionarray['__THIRDPARTY_ZIP__'] = '__THIRDPARTY_ZIP__'; $substitutionarray['__THIRDPARTY_ZIP__'] = '__THIRDPARTY_ZIP__';
$substitutionarray['__THIRDPARTY_TOWN__'] = '__THIRDPARTY_TOWN__'; $substitutionarray['__THIRDPARTY_TOWN__'] = '__THIRDPARTY_TOWN__';
$substitutionarray['__THIRDPARTY_SIREN__'] = '__THIRDPARTY_SIREN__'; $substitutionarray['__THIRDPARTY_IDPROF1__'] = '__THIRDPARTY_IDPROF1__';
$substitutionarray['__THIRDPARTY_SIRET__'] = '__THIRDPARTY_SIRET__'; $substitutionarray['__THIRDPARTY_IDPROF2__'] = '__THIRDPARTY_IDPROF2__';
$substitutionarray['__THIRDPARTY_APE__'] = '__THIRDPARTY_APE__'; $substitutionarray['__THIRDPARTY_IDPROF3__'] = '__THIRDPARTY_IDPROF3__';
$substitutionarray['__THIRDPARTY_RCSRM__'] = '__THIRDPARTY_RCSRM__'; $substitutionarray['__THIRDPARTY_IDPROF4__'] = '__THIRDPARTY_IDPROF4__';
$substitutionarray['__THIRDPARTY_IDPROF5__'] = '__THIRDPARTY_IDPROF5__';
$substitutionarray['__THIRDPARTY_IDPROF6__'] = '__THIRDPARTY_IDPROF6__';
$substitutionarray['__THIRDPARTY_TVAINTRA__'] = '__THIRDPARTY_TVAINTRA__'; $substitutionarray['__THIRDPARTY_TVAINTRA__'] = '__THIRDPARTY_TVAINTRA__';
/*$substitutionarray['__THIRDPARTY_NOTE_PUBLIC__'] = '__THIRDPARTY_NOTE_PUBLIC__'; $substitutionarray['__THIRDPARTY_NOTE_PUBLIC__'] = '__THIRDPARTY_NOTE_PUBLIC__';
$substitutionarray['__THIRDPARTY_NOTE_PRIVATE__'] = '__THIRDPARTY_NOTE_PRIVATE__';*/ $substitutionarray['__THIRDPARTY_NOTE_PRIVATE__'] = '__THIRDPARTY_NOTE_PRIVATE__';
} }
if (!empty($conf->adherent->enabled)) if (!empty($conf->adherent->enabled))
{ {
@ -6066,15 +6068,19 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object) ? $object->code_fournisseur : ''); $substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object) ? $object->code_fournisseur : '');
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object) ? $object->email : ''); $substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object) ? $object->email : '');
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object) ? $object->phone : ''); $substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object) ? $object->phone : '');
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object) ? $object->name_fax : ''); $substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object) ? $object->fax : '');
$substitutionarray['__THIRDPARTY_ADRESS__'] = (is_object($object) ? $object->address : ''); $substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object) ? $object->address : '');
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object) ? $object->zip : ''); $substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object) ? $object->zip : '');
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object) ? $object->town : ''); $substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object) ? $object->town : '');
$substitutionarray['__THIRDPARTY_SIREN__'] = (is_object($object) ? $object->idprof1 : ''); $substitutionarray['__THIRDPARTY_IDPROF1__'] = (is_object($object) ? $object->idprof1 : '');
$substitutionarray['__THIRDPARTY_SIRET__'] = (is_object($object) ? $object->idprof2 : ''); $substitutionarray['__THIRDPARTY_IDPROF2__'] = (is_object($object) ? $object->idprof2 : '');
$substitutionarray['__THIRDPARTY_APE__'] = (is_object($object) ? $object->idprof3 : ''); $substitutionarray['__THIRDPARTY_IDPROF3__'] = (is_object($object) ? $object->idprof3 : '');
$substitutionarray['__THIRDPARTY_RCSRM__'] = (is_object($object) ? $object->idprof4 : ''); $substitutionarray['__THIRDPARTY_IDPROF4__'] = (is_object($object) ? $object->idprof4 : '');
$substitutionarray['__THIRDPARTY_IDPROF5__'] = (is_object($object) ? $object->idprof5 : '');
$substitutionarray['__THIRDPARTY_IDPROF6__'] = (is_object($object) ? $object->idprof6 : '');
$substitutionarray['__THIRDPARTY_TVAINTRA__'] = (is_object($object) ? $object->tva_intra : ''); $substitutionarray['__THIRDPARTY_TVAINTRA__'] = (is_object($object) ? $object->tva_intra : '');
$substitutionarray['__THIRDPARTY_NOTE_PUBLIC__'] = (is_object($object) ?dol_htmlentitiesbr($object->note_public) : '');
$substitutionarray['__THIRDPARTY_NOTE_PRIVATE__'] = (is_object($object) ?dol_htmlentitiesbr($object->note_private) : '');
} }
elseif (is_object($object->thirdparty) && $object->thirdparty->id > 0) elseif (is_object($object->thirdparty) && $object->thirdparty->id > 0)
{ {
@ -6084,16 +6090,20 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
$substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_client : ''); $substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_client : '');
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_fournisseur : ''); $substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_fournisseur : '');
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object->thirdparty) ? $object->thirdparty->email : ''); $substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object->thirdparty) ? $object->thirdparty->email : '');
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object->thirdparty) ? $object->phone : ''); $substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object->thirdparty) ? $object->thirdparty->phone : '');
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object->thirdparty) ? $object->name_fax : ''); $substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object->thirdparty) ? $object->thirdparty->fax : '');
$substitutionarray['__THIRDPARTY_ADRESS__'] = (is_object($object->thirdparty) ? $object->address : ''); $substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object->thirdparty) ? $object->thirdparty->address : '');
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object->thirdparty) ? $object->zip : ''); $substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object->thirdparty) ? $object->thirdparty->zip : '');
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object->thirdparty) ? $object->town : ''); $substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object->thirdparty) ? $object->thirdparty->town : '');
$substitutionarray['__THIRDPARTY_SIREN__'] = (is_object($object->thirdparty) ? $object->idprof1 : ''); $substitutionarray['__THIRDPARTY_IDPROF1__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof1 : '');
$substitutionarray['__THIRDPARTY_SIRET__'] = (is_object($object->thirdparty) ? $object->idprof2 : ''); $substitutionarray['__THIRDPARTY_IDPROF2__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof2 : '');
$substitutionarray['__THIRDPARTY_APE__'] = (is_object($object->thirdparty) ? $object->idprof3 : ''); $substitutionarray['__THIRDPARTY_IDPROF3__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof3 : '');
$substitutionarray['__THIRDPARTY_RCSRM__'] = (is_object($object->thirdparty) ? $object->idprof4 : ''); $substitutionarray['__THIRDPARTY_IDPROF4__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof4 : '');
$substitutionarray['__THIRDPARTY_TVAINTRA__'] = (is_object($object->thirdparty) ? $object->tva_intra : ''); $substitutionarray['__THIRDPARTY_IDPROF5__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof5 : '');
$substitutionarray['__THIRDPARTY_IDPROF6__'] = (is_object($object->thirdparty) ? $object->thirdparty->idprof6 : '');
$substitutionarray['__THIRDPARTY_TVAINTRA__'] = (is_object($object->thirdparty) ? $object->thirdparty->tva_intra : '');
$substitutionarray['__THIRDPARTY_NOTE_PUBLIC__'] = (is_object($object->thirdparty) ?dol_htmlentitiesbr($object->thirdparty->note_public) : '');
$substitutionarray['__THIRDPARTY_NOTE_PRIVATE__'] = (is_object($object->thirdparty) ?dol_htmlentitiesbr($object->thirdparty->note_private) : '');
} }
if (is_object($object->project) && $object->project->id > 0) if (is_object($object->project) && $object->project->id > 0)

View File

@ -1564,11 +1564,13 @@ function dol_print_reduction($reduction, $langs)
* Return OS version. * Return OS version.
* Note that PHP_OS returns only OS (not version) and OS PHP was built on, not necessarly OS PHP runs on. * Note that PHP_OS returns only OS (not version) and OS PHP was built on, not necessarly OS PHP runs on.
* *
* @return string OS version * @param string $option Option string
* @return string OS version
*/ */
function version_os() function version_os($option = '')
{ {
$osversion = php_uname(); if ($option == 'smr') $osversion = php_uname('s').' '.php_uname('m').' '.php_uname('r');
else $osversion = php_uname();
return $osversion; return $osversion;
} }

View File

@ -281,7 +281,7 @@ function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0,
imagepng($imgThumb, $imgThumbName, $newquality); imagepng($imgThumb, $imgThumbName, $newquality);
break; break;
case 4: // Bmp case 4: // Bmp
image2wbmp($imgThumb, $imgThumbName); imagewbmp($imgThumb, $imgThumbName);
break; break;
} }
@ -584,7 +584,7 @@ function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName = '_small',
// Not supported by PHP GD // Not supported by PHP GD
break; break;
case IMAGETYPE_WBMP: // 15 case IMAGETYPE_WBMP: // 15
image2wbmp($imgThumb, $imgThumbName); imagewbmp($imgThumb, $imgThumbName);
break; break;
} }

View File

@ -1990,11 +1990,11 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks
} }
/** /**
* @param task $task Task the task object * @param Task $task the task object
* @param label $label bool|string true = auto, false = dont display, string = replace output * @param bool|string $label true = auto, false = dont display, string = replace output
* @param progressNumber $progressNumber bool|string true = auto, false = dont display, string = replace output * @param bool|string $progressNumber true = auto, false = dont display, string = replace output
* @param hideOnProgressNull $hideOnProgressNull bool hide if progress is null * @param bool $hideOnProgressNull hide if progress is null
* @param spaced $spaced bool used to add space at bottom (made by css) * @param bool $spaced used to add space at bottom (made by css)
* @return string * @return string
* @see getTaskProgressBadge() * @see getTaskProgressBadge()
*/ */
@ -2113,10 +2113,10 @@ function getTaskProgressView($task, $label = true, $progressNumber = true, $hide
return $out; return $out;
} }
/** /**
* @param task $task Task the task object * @param Task $task the task object
* @param label $label string empty = auto (progress), string = replace output * @param string $label empty = auto (progress), string = replace output
* @param tooltip $tooltip string empty = auto , string = replace output * @param string $tooltip empty = auto , string = replace output
* @return string * @return string
* @see getTaskProgressView() * @see getTaskProgressView()
*/ */
function getTaskProgressBadge($task, $label = '', $tooltip = '') function getTaskProgressBadge($task, $label = '', $tooltip = '')

View File

@ -38,24 +38,24 @@ function dol_encode($chain, $key = '1')
{ {
if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char
{ {
$output_tab=array(); $output_tab = array();
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$output_tab[$i] = chr(ord(substr($chain, $i, 1))+17); $output_tab[$i] = chr(ord(substr($chain, $i, 1)) + 17);
} }
$chain = implode("", $output_tab); $chain = implode("", $output_tab);
} }
elseif ($key) elseif ($key)
{ {
$result=''; $result = '';
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$keychar = substr($key, ($i % strlen($key))-1, 1); $keychar = substr($key, ($i % strlen($key)) - 1, 1);
$result.= chr(ord(substr($chain, $i, 1))+(ord($keychar)-65)); $result .= chr(ord(substr($chain, $i, 1)) + (ord($keychar) - 65));
} }
$chain=$result; $chain = $result;
} }
return base64_encode($chain); return base64_encode($chain);
@ -76,25 +76,25 @@ function dol_decode($chain, $key = '1')
if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char
{ {
$output_tab=array(); $output_tab = array();
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength;$i++) for ($i = 0; $i < $strlength; $i++)
{ {
$output_tab[$i] = chr(ord(substr($chain, $i, 1))-17); $output_tab[$i] = chr(ord(substr($chain, $i, 1)) - 17);
} }
$chain = implode("", $output_tab); $chain = implode("", $output_tab);
} }
elseif ($key) elseif ($key)
{ {
$result=''; $result = '';
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$keychar = substr($key, ($i % strlen($key))-1, 1); $keychar = substr($key, ($i % strlen($key)) - 1, 1);
$result.= chr(ord(substr($chain, $i, 1))-(ord($keychar)-65)); $result .= chr(ord(substr($chain, $i, 1)) - (ord($keychar) - 65));
} }
$chain=$result; $chain = $result;
} }
return $chain; return $chain;
@ -116,21 +116,21 @@ function dol_hash($chain, $type = '0')
global $conf; global $conf;
// No need to add salt for password_hash // No need to add salt for password_hash
if (($type == '0' || $type == 'auto') && ! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_hash')) if (($type == '0' || $type == 'auto') && !empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_hash'))
{ {
return password_hash($chain, PASSWORD_DEFAULT); return password_hash($chain, PASSWORD_DEFAULT);
} }
// Salt value // Salt value
if (! empty($conf->global->MAIN_SECURITY_SALT)) $chain=$conf->global->MAIN_SECURITY_SALT.$chain; if (!empty($conf->global->MAIN_SECURITY_SALT)) $chain = $conf->global->MAIN_SECURITY_SALT.$chain;
if ($type == '1' || $type == 'sha1') return sha1($chain); if ($type == '1' || $type == 'sha1') return sha1($chain);
elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain)); elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain));
elseif ($type == '3' || $type == 'md5') return md5($chain); elseif ($type == '3' || $type == 'md5') return md5($chain);
elseif ($type == '4' || $type == 'md5openldap') return '{md5}'.base64_encode(mhash(MHASH_MD5, $chain)); // For OpenLdap with md5 (based on an unencrypted password in base) elseif ($type == '4' || $type == 'md5openldap') return '{md5}'.base64_encode(mhash(MHASH_MD5, $chain)); // For OpenLdap with md5 (based on an unencrypted password in base)
elseif ($type == '5') return hash('sha256', $chain); elseif ($type == '5') return hash('sha256', $chain);
elseif (! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1') return sha1($chain); elseif (!empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1') return sha1($chain);
elseif (! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1md5') return sha1(md5($chain)); elseif (!empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1md5') return sha1(md5($chain));
// No particular encoding defined, use default // No particular encoding defined, use default
return md5($chain); return md5($chain);
@ -151,10 +151,10 @@ function dol_verifyHash($chain, $hash, $type = '0')
{ {
global $conf; global $conf;
if ($type == '0' && ! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_verify')) { if ($type == '0' && !empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_verify')) {
if ($hash[0] == '$') return password_verify($chain, $hash); if ($hash[0] == '$') return password_verify($chain, $hash);
elseif(strlen($hash) == 32) return dol_verifyHash($chain, $hash, '3'); // md5 elseif (strlen($hash) == 32) return dol_verifyHash($chain, $hash, '3'); // md5
elseif(strlen($hash) == 40) return dol_verifyHash($chain, $hash, '2'); // sha1md5 elseif (strlen($hash) == 40) return dol_verifyHash($chain, $hash, '2'); // sha1md5
return false; return false;
} }
@ -189,9 +189,9 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f
//print ", perm: ".$features."->".$feature2."=".($user->rights->$features->$feature2->lire)."<br>"; //print ", perm: ".$features."->".$feature2."=".($user->rights->$features->$feature2->lire)."<br>";
// Get more permissions checks from hooks // Get more permissions checks from hooks
$parameters=array('features'=>$features, 'objectid'=>$objectid, 'idtype'=>$dbt_select); $parameters = array('features'=>$features, 'objectid'=>$objectid, 'idtype'=>$dbt_select);
$reshook=$hookmanager->executeHooks('restrictedArea', $parameters); $reshook = $hookmanager->executeHooks('restrictedArea', $parameters);
if (! empty($hookmanager->resArray['result'])) return true; if (!empty($hookmanager->resArray['result'])) return true;
if ($reshook > 0) return false; if ($reshook > 0) return false;
if ($dbt_select != 'rowid' && $dbt_select != 'id') $objectid = "'".$objectid."'"; if ($dbt_select != 'rowid' && $dbt_select != 'id') $objectid = "'".$objectid."'";
@ -202,227 +202,228 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f
elseif (preg_match('/\|/', $features)) $featuresarray = explode("|", $features); elseif (preg_match('/\|/', $features)) $featuresarray = explode("|", $features);
// More subfeatures to check // More subfeatures to check
if (! empty($feature2)) $feature2 = explode("|", $feature2); if (!empty($feature2)) $feature2 = explode("|", $feature2);
// More parameters // More parameters
$params = explode('&', $tableandshare); $params = explode('&', $tableandshare);
$dbtablename=(! empty($params[0]) ? $params[0] : ''); $dbtablename = (!empty($params[0]) ? $params[0] : '');
$sharedelement=(! empty($params[1]) ? $params[1] : $dbtablename); $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
$listofmodules=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); $listofmodules = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
// Check read permission from module // Check read permission from module
$readok=1; $nbko=0; $readok = 1; $nbko = 0;
foreach ($featuresarray as $feature) // first we check nb of test ko foreach ($featuresarray as $feature) // first we check nb of test ko
{ {
$featureforlistofmodule=$feature; $featureforlistofmodule = $feature;
if ($featureforlistofmodule == 'produit') $featureforlistofmodule='product'; if ($featureforlistofmodule == 'produit') $featureforlistofmodule = 'product';
if (! empty($user->socid) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users if (!empty($user->socid) && !empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && !in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users
{ {
$readok=0; $nbko++; $readok = 0; $nbko++;
continue; continue;
} }
if ($feature == 'societe') if ($feature == 'societe')
{ {
if (! $user->rights->societe->lire && ! $user->rights->fournisseur->lire) { $readok=0; $nbko++; } if (!$user->rights->societe->lire && !$user->rights->fournisseur->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'contact') elseif ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->lire) { $readok=0; $nbko++; } if (!$user->rights->societe->contact->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->lire && ! $user->rights->service->lire) { $readok=0; $nbko++; } if (!$user->rights->produit->lire && !$user->rights->service->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'prelevement') elseif ($feature == 'prelevement')
{ {
if (! $user->rights->prelevement->bons->lire) { $readok=0; $nbko++; } if (!$user->rights->prelevement->bons->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) { $readok=0; $nbko++; } if (!$user->rights->banque->cheque) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'projet') elseif ($feature == 'projet')
{ {
if (! $user->rights->projet->lire && ! $user->rights->projet->all->lire) { $readok=0; $nbko++; } if (!$user->rights->projet->lire && !$user->rights->projet->all->lire) { $readok = 0; $nbko++; }
} }
elseif (! empty($feature2)) // This is for permissions on 2 levels elseif (!empty($feature2)) // This is for permissions on 2 levels
{ {
$tmpreadok=1; $tmpreadok = 1;
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card
if (! empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok=0; } if (!empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok = 0; }
elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok=0; } elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok = 0; }
else { $tmpreadok=1; break; } // Break is to bypass second test if the first is ok else { $tmpreadok = 1; break; } // Break is to bypass second test if the first is ok
} }
if (! $tmpreadok) // We found a test on feature that is ko if (!$tmpreadok) // We found a test on feature that is ko
{ {
$readok=0; // All tests are ko (we manage here the and, the or will be managed later using $nbko). $readok = 0; // All tests are ko (we manage here the and, the or will be managed later using $nbko).
$nbko++; $nbko++;
} }
} }
elseif (! empty($feature) && ($feature!='user' && $feature!='usergroup')) // This is permissions on 1 level elseif (!empty($feature) && ($feature != 'user' && $feature != 'usergroup')) // This is permissions on 1 level
{ {
if (empty($user->rights->$feature->lire) if (empty($user->rights->$feature->lire)
&& empty($user->rights->$feature->read) && empty($user->rights->$feature->read)
&& empty($user->rights->$feature->run)) { $readok=0; $nbko++; } && empty($user->rights->$feature->run)) { $readok = 0; $nbko++; }
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $readok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $readok = 1;
if (! $readok) accessforbidden(); if (!$readok) accessforbidden();
//print "Read access is ok"; //print "Read access is ok";
// Check write permission from module (we need to know write permission to create but also to delete drafts record) // Check write permission from module (we need to know write permission to create but also to delete drafts record)
$createok=1; $nbko=0; $createok = 1; $nbko = 0;
if (GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update' || ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete')) if (GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update' || ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete'))
{ {
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
if ($feature == 'contact') if ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->creer) { $createok=0; $nbko++; } if (!$user->rights->societe->contact->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->creer && ! $user->rights->service->creer) { $createok=0; $nbko++; } if (!$user->rights->produit->creer && !$user->rights->service->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'prelevement') elseif ($feature == 'prelevement')
{ {
if (! $user->rights->prelevement->bons->creer) { $createok=0; $nbko++; } if (!$user->rights->prelevement->bons->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'commande_fournisseur') elseif ($feature == 'commande_fournisseur')
{ {
if (! $user->rights->fournisseur->commande->creer) { $createok=0; $nbko++; } if (!$user->rights->fournisseur->commande->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'banque') elseif ($feature == 'banque')
{ {
if (! $user->rights->banque->modifier) { $createok=0; $nbko++; } if (!$user->rights->banque->modifier) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) { $createok=0; $nbko++; } if (!$user->rights->banque->cheque) { $createok = 0; $nbko++; }
} }
elseif (! empty($feature2)) // This is for permissions on one level elseif (!empty($feature2)) // This is for permissions on one level
{ {
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if (empty($user->rights->$feature->$subfeature->creer) if (empty($user->rights->$feature->$subfeature->creer)
&& empty($user->rights->$feature->$subfeature->write) && empty($user->rights->$feature->$subfeature->write)
&& empty($user->rights->$feature->$subfeature->create)) { && empty($user->rights->$feature->$subfeature->create)) {
$createok=0; $createok = 0;
$nbko++; $nbko++;
} else { } else {
$createok=1; $createok = 1;
// Break to bypass second test if the first is ok // Break to bypass second test if the first is ok
break; break;
} }
} }
} }
elseif (! empty($feature)) // This is for permissions on 2 levels ('creer' or 'write') elseif (!empty($feature)) // This is for permissions on 2 levels ('creer' or 'write')
{ {
//print '<br>feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write; //print '<br>feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write;
if (empty($user->rights->$feature->creer) if (empty($user->rights->$feature->creer)
&& empty($user->rights->$feature->write) && empty($user->rights->$feature->write)
&& empty($user->rights->$feature->create)) { && empty($user->rights->$feature->create)) {
$createok=0; $createok = 0;
$nbko++; $nbko++;
} }
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $createok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $createok = 1;
if ((GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update') && ! $createok) accessforbidden(); if ((GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update') && !$createok) accessforbidden();
//print "Write access is ok"; //print "Write access is ok";
} }
// Check create user permission // Check create user permission
$createuserok=1; $createuserok = 1;
if (GETPOST('action', 'aZ09') == 'confirm_create_user' && GETPOST("confirm", 'aZ09') == 'yes') if (GETPOST('action', 'aZ09') == 'confirm_create_user' && GETPOST("confirm", 'aZ09') == 'yes')
{ {
if (! $user->rights->user->user->creer) $createuserok=0; if (!$user->rights->user->user->creer) $createuserok = 0;
if (! $createuserok) accessforbidden(); if (!$createuserok) accessforbidden();
//print "Create user access is ok"; //print "Create user access is ok";
} }
// Check delete permission from module // Check delete permission from module
$deleteok=1; $nbko=0; $deleteok = 1; $nbko = 0;
if ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete') if ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete')
{ {
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
if ($feature == 'contact') if ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->supprimer) $deleteok=0; if (!$user->rights->societe->contact->supprimer) $deleteok = 0;
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->supprimer && ! $user->rights->service->supprimer) $deleteok=0; if (!$user->rights->produit->supprimer && !$user->rights->service->supprimer) $deleteok = 0;
} }
elseif ($feature == 'commande_fournisseur') elseif ($feature == 'commande_fournisseur')
{ {
if (! $user->rights->fournisseur->commande->supprimer) $deleteok=0; if (!$user->rights->fournisseur->commande->supprimer) $deleteok = 0;
} }
elseif ($feature == 'banque') elseif ($feature == 'banque')
{ {
if (! $user->rights->banque->modifier) $deleteok=0; if (!$user->rights->banque->modifier) $deleteok = 0;
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) $deleteok=0; if (!$user->rights->banque->cheque) $deleteok = 0;
} }
elseif ($feature == 'ecm') elseif ($feature == 'ecm')
{ {
if (! $user->rights->ecm->upload) $deleteok=0; if (!$user->rights->ecm->upload) $deleteok = 0;
} }
elseif ($feature == 'ftp') elseif ($feature == 'ftp')
{ {
if (! $user->rights->ftp->write) $deleteok=0; if (!$user->rights->ftp->write) $deleteok = 0;
}elseif ($feature == 'salaries') }elseif ($feature == 'salaries')
{ {
if (! $user->rights->salaries->delete) $deleteok=0; if (!$user->rights->salaries->delete) $deleteok = 0;
} }
elseif ($feature == 'salaries') elseif ($feature == 'salaries')
{ {
if (! $user->rights->salaries->delete) $deleteok=0; if (!$user->rights->salaries->delete) $deleteok = 0;
} }
elseif (! empty($feature2)) // This is for permissions on 2 levels elseif (!empty($feature2)) // This is for permissions on 2 levels
{ {
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if (empty($user->rights->$feature->$subfeature->supprimer) && empty($user->rights->$feature->$subfeature->delete)) $deleteok=0; if (empty($user->rights->$feature->$subfeature->supprimer) && empty($user->rights->$feature->$subfeature->delete)) $deleteok = 0;
else { $deleteok=1; break; } // For bypass the second test if the first is ok else { $deleteok = 1; break; } // For bypass the second test if the first is ok
} }
} }
elseif (! empty($feature)) // This is used for permissions on 1 level elseif (!empty($feature)) // This is used for permissions on 1 level
{ {
//print '<br>feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete; //print '<br>feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete;
if (empty($user->rights->$feature->supprimer) if (empty($user->rights->$feature->supprimer)
&& empty($user->rights->$feature->delete) && empty($user->rights->$feature->delete)
&& empty($user->rights->$feature->run)) $deleteok=0; && empty($user->rights->$feature->run)) $deleteok = 0;
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $deleteok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $deleteok = 1;
if (! $deleteok && ! ($isdraft && $createok)) accessforbidden(); if (!$deleteok && !($isdraft && $createok)) accessforbidden();
//print "Delete access is ok"; //print "Delete access is ok";
} }
// If we have a particular object to check permissions on, we check this object // If we have a particular object to check permissions on, we check this object
// is linked to a company allowed to $user. // is linked to a company allowed to $user.
if (! empty($objectid) && $objectid > 0) if (!empty($objectid) && $objectid > 0)
{ {
$ok = checkUserAccessToObject($user, $featuresarray, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select); $ok = checkUserAccessToObject($user, $featuresarray, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select);
return $ok ? 1 : accessforbidden(); $params = array('objectid' => $objectid, 'features' => join(',', $featuresarray), 'features2' => $feature2);
return $ok ? 1 : accessforbidden('', 1, 1, 0, $params);
} }
return 1; return 1;
@ -448,65 +449,65 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
// More parameters // More parameters
$params = explode('&', $tableandshare); $params = explode('&', $tableandshare);
$dbtablename=(! empty($params[0]) ? $params[0] : ''); $dbtablename = (!empty($params[0]) ? $params[0] : '');
$sharedelement=(! empty($params[1]) ? $params[1] : $dbtablename); $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
$sql=''; $sql = '';
// For backward compatibility // For backward compatibility
if ($feature == 'member') $feature='adherent'; if ($feature == 'member') $feature = 'adherent';
if ($feature == 'project') $feature='projet'; if ($feature == 'project') $feature = 'projet';
if ($feature == 'task') $feature='projet_task'; if ($feature == 'task') $feature = 'projet_task';
$check = array('adherent','banque','bom','don','user','usergroup','product','produit','service','produit|service','categorie','resource','expensereport','holiday'); // Test on entity only (Objects with no link to company) $check = array('adherent', 'banque', 'bom', 'don', 'user', 'usergroup', 'product', 'produit', 'service', 'produit|service', 'categorie', 'resource', 'expensereport', 'holiday'); // Test on entity only (Objects with no link to company)
$checksoc = array('societe'); // Test for societe object $checksoc = array('societe'); // Test for societe object
$checkother = array('contact','agenda'); // Test on entity and link to third party. Allowed if link is empty (Ex: contacts...). $checkother = array('contact', 'agenda'); // Test on entity and link to third party. Allowed if link is empty (Ex: contacts...).
$checkproject = array('projet','project'); // Test for project object $checkproject = array('projet', 'project'); // Test for project object
$checktask = array('projet_task'); $checktask = array('projet_task');
$nocheck = array('barcode','stock'); // No test $nocheck = array('barcode', 'stock'); // No test
//$checkdefault = 'all other not already defined'; // Test on entity and link to third party. Not allowed if link is empty (Ex: invoice, orders...). //$checkdefault = 'all other not already defined'; // Test on entity and link to third party. Not allowed if link is empty (Ex: invoice, orders...).
// If dbtablename not defined, we use same name for table than module name // If dbtablename not defined, we use same name for table than module name
if (empty($dbtablename)) if (empty($dbtablename))
{ {
$dbtablename = $feature; $dbtablename = $feature;
$sharedelement = (! empty($params[1]) ? $params[1] : $dbtablename); // We change dbtablename, so we set sharedelement too. $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename); // We change dbtablename, so we set sharedelement too.
} }
// Check permission for object with entity // Check permission for object with entity
if (in_array($feature, $check)) if (in_array($feature, $check))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
if (($feature == 'user' || $feature == 'usergroup') && ! empty($conf->multicompany->enabled)) if (($feature == 'user' || $feature == 'usergroup') && !empty($conf->multicompany->enabled))
{ {
if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) if (!empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE))
{ {
if ($conf->entity == 1 && $user->admin && ! $user->entity) if ($conf->entity == 1 && $user->admin && !$user->entity)
{ {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IS NOT NULL"; $sql .= " AND dbt.entity IS NOT NULL";
} }
else else
{ {
$sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug"; $sql .= ",".MAIN_DB_PREFIX."usergroup_user as ug";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND ((ug.fk_user = dbt.rowid"; $sql .= " AND ((ug.fk_user = dbt.rowid";
$sql.= " AND ug.entity IN (".getEntity('usergroup')."))"; $sql .= " AND ug.entity IN (".getEntity('usergroup')."))";
$sql.= " OR dbt.entity = 0)"; // Show always superadmin $sql .= " OR dbt.entity = 0)"; // Show always superadmin
} }
} }
else { else {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
else else
{ {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checksoc)) // We check feature = checksoc elseif (in_array($feature, $checksoc)) // We check feature = checksoc
@ -517,23 +518,23 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
if ($user->socid <> $objectid) return false; if ($user->socid <> $objectid) return false;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
$sql = "SELECT COUNT(sc.fk_soc) as nb"; $sql = "SELECT COUNT(sc.fk_soc) as nb";
$sql.= " FROM (".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql .= " FROM (".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ", ".MAIN_DB_PREFIX."societe as s)"; $sql .= ", ".MAIN_DB_PREFIX."societe as s)";
$sql.= " WHERE sc.fk_soc IN (".$objectid.")"; $sql .= " WHERE sc.fk_soc IN (".$objectid.")";
$sql.= " AND sc.fk_user = ".$user->id; $sql .= " AND sc.fk_user = ".$user->id;
$sql.= " AND sc.fk_soc = s.rowid"; $sql .= " AND sc.fk_soc = s.rowid";
$sql.= " AND s.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND s.entity IN (".getEntity($sharedelement, 1).")";
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(s.rowid) as nb"; $sql = "SELECT COUNT(s.rowid) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
$sql.= " WHERE s.rowid IN (".$objectid.")"; $sql .= " WHERE s.rowid IN (".$objectid.")";
$sql.= " AND s.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND s.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checkother)) // Test on entity and link to societe. Allowed if link is empty (Ex: contacts...). elseif (in_array($feature, $checkother)) // Test on entity and link to societe. Allowed if link is empty (Ex: contacts...).
@ -542,110 +543,110 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
if ($user->socid > 0) if ($user->socid > 0)
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.fk_soc = ".$user->socid; $sql .= " AND dbt.fk_soc = ".$user->socid;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = '".$user->id."'"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = '".$user->id."'";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)"; // Contact not linked to a company or to a company of user $sql .= " AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)"; // Contact not linked to a company or to a company of user
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checkproject)) elseif (in_array($feature, $checkproject))
{ {
if (! empty($conf->projet->enabled) && empty($user->rights->projet->all->lire)) if (!empty($conf->projet->enabled) && empty($user->rights->projet->all->lire))
{ {
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$projectstatic=new Project($db); $projectstatic = new Project($db);
$tmps=$projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0); $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
$tmparray=explode(',', $tmps); $tmparray = explode(',', $tmps);
if (! in_array($objectid, $tmparray)) return false; if (!in_array($objectid, $tmparray)) return false;
} }
else else
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checktask)) elseif (in_array($feature, $checktask))
{ {
if (! empty($conf->projet->enabled) && empty($user->rights->projet->all->lire)) if (!empty($conf->projet->enabled) && empty($user->rights->projet->all->lire))
{ {
$task = new Task($db); $task = new Task($db);
$task->fetch($objectid); $task->fetch($objectid);
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$projectstatic=new Project($db); $projectstatic = new Project($db);
$tmps=$projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0); $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
$tmparray=explode(',', $tmps); $tmparray = explode(',', $tmps);
if (! in_array($task->fk_project, $tmparray)) return false; if (!in_array($task->fk_project, $tmparray)) return false;
} }
else else
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (! in_array($feature, $nocheck)) // By default (case of $checkdefault), we check on object entity + link to third party on field $dbt_keyfield elseif (!in_array($feature, $nocheck)) // By default (case of $checkdefault), we check on object entity + link to third party on field $dbt_keyfield
{ {
// If external user: Check permission for external users // If external user: Check permission for external users
if ($user->socid > 0) if ($user->socid > 0)
{ {
if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined'); if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined');
$sql = "SELECT COUNT(dbt.".$dbt_keyfield.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_keyfield.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.rowid IN (".$objectid.")"; $sql .= " WHERE dbt.rowid IN (".$objectid.")";
$sql.= " AND dbt.".$dbt_keyfield." = ".$user->socid; $sql .= " AND dbt.".$dbt_keyfield." = ".$user->socid;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined'); if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined');
$sql = "SELECT COUNT(sc.fk_soc) as nb"; $sql = "SELECT COUNT(sc.fk_soc) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= ", ".MAIN_DB_PREFIX."societe as s";
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND sc.fk_soc = dbt.".$dbt_keyfield; $sql .= " AND sc.fk_soc = dbt.".$dbt_keyfield;
$sql.= " AND dbt.".$dbt_keyfield." = s.rowid"; $sql .= " AND dbt.".$dbt_keyfield." = s.rowid";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
$sql.= " AND sc.fk_user = ".$user->id; $sql .= " AND sc.fk_user = ".$user->id;
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
if ($sql) if ($sql)
{ {
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if (! $obj || $obj->nb < count(explode(',', $objectid))) return false; if (!$obj || $obj->nb < count(explode(',', $objectid))) return false;
} }
else else
{ {
@ -660,19 +661,20 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
* Show a message to say access is forbidden and stop program * Show a message to say access is forbidden and stop program
* Calling this function terminate execution of PHP. * Calling this function terminate execution of PHP.
* *
* @param string $message Force error message * @param string $message Force error message
* @param int $printheader Show header before * @param int $printheader Show header before
* @param int $printfooter Show footer after * @param int $printfooter Show footer after
* @param int $showonlymessage Show only message parameter. Otherwise add more information. * @param int $showonlymessage Show only message parameter. Otherwise add more information.
* @param array|null $params Send params
* @return void * @return void
*/ */
function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $showonlymessage = 0) function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $showonlymessage = 0, $params = null)
{ {
global $conf, $db, $user, $langs, $hookmanager; global $conf, $db, $user, $langs, $hookmanager;
if (! is_object($langs)) if (!is_object($langs))
{ {
include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php';
$langs=new Translate('', $conf); $langs = new Translate('', $conf);
$langs->setDefaultLang(); $langs->setDefaultLang();
} }
@ -684,7 +686,7 @@ function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $sho
elseif (function_exists("llxHeaderVierge")) llxHeaderVierge(''); elseif (function_exists("llxHeaderVierge")) llxHeaderVierge('');
} }
print '<div class="error">'; print '<div class="error">';
if (! $message) print $langs->trans("ErrorForbidden"); if (!$message) print $langs->trans("ErrorForbidden");
else print $message; else print $message;
print '</div>'; print '</div>';
print '<br>'; print '<br>';
@ -697,8 +699,8 @@ function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $sho
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
$hookmanager->initHooks(array('main')); $hookmanager->initHooks(array('main'));
} }
$parameters = array('message'=>$message); $parameters = array('message'=>$message, 'params'=>$params);
$reshook=$hookmanager->executeHooks('getAccessForbiddenMessage', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('getAccessForbiddenMessage', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
print $hookmanager->resPrint; print $hookmanager->resPrint;
if (empty($reshook)) if (empty($reshook))
{ {

View File

@ -38,6 +38,14 @@ function takepos_prepare_head()
$head[$h][2] = 'setup'; $head[$h][2] = 'setup';
$h++; $h++;
if ($conf->global->TAKEPOS_CUSTOM_RECEIPT)
{
$head[$h][0] = DOL_URL_ROOT.'/takepos/admin/receipt.php';
$head[$h][1] = $langs->trans("Receipt");
$head[$h][2] = 'receipt';
$h++;
}
$numterminals = max(1, $conf->global->TAKEPOS_NUM_TERMINALS); $numterminals = max(1, $conf->global->TAKEPOS_NUM_TERMINALS);
for ($i = 1; $i <= $numterminals; $i++) for ($i = 1; $i <= $numterminals; $i++)
{ {

View File

@ -261,7 +261,7 @@ class pdf_standard extends CommonStickerGenerator
// List of values to scan for a replacement // List of values to scan for a replacement
$substitutionarray = array ( $substitutionarray = array (
'__ID__'=>$object->rowid, '__ID__' => $object->id,
'__LOGIN__'=>$object->login, '__LOGIN__'=>$object->login,
'__FIRSTNAME__'=>$object->firstname, '__FIRSTNAME__'=>$object->firstname,
'__LASTNAME__'=>$object->lastname, '__LASTNAME__'=>$object->lastname,

View File

@ -27,7 +27,7 @@
* \brief Fichier de description et activation du module Expedition * \brief Fichier de description et activation du module Expedition
*/ */
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
/** /**
@ -35,7 +35,6 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
*/ */
class modExpedition extends DolibarrModules class modExpedition extends DolibarrModules
{ {
/** /**
* Constructor. Define names, constants, directories, boxes, permissions * Constructor. Define names, constants, directories, boxes, permissions
* *
@ -77,11 +76,11 @@ class modExpedition extends DolibarrModules
$this->depends = array("modCommande"); $this->depends = array("modCommande");
$this->requiredby = array(); $this->requiredby = array();
$this->conflictwith = array(); $this->conflictwith = array();
$this->langfiles = array('deliveries','sendings'); $this->langfiles = array('deliveries', 'sendings');
// Constants // Constants
$this->const = array(); $this->const = array();
$r=0; $r = 0;
$this->const[$r][0] = "EXPEDITION_ADDON_PDF"; $this->const[$r][0] = "EXPEDITION_ADDON_PDF";
$this->const[$r][1] = "chaine"; $this->const[$r][1] = "chaine";
@ -134,13 +133,13 @@ class modExpedition extends DolibarrModules
// Boxes // Boxes
$this->boxes = array( $this->boxes = array(
0=>array('file'=>'box_shipments.php','enabledbydefaulton'=>'Home'), 0=>array('file'=>'box_shipments.php', 'enabledbydefaulton'=>'Home'),
); );
// Permissions // Permissions
$this->rights = array(); $this->rights = array();
$this->rights_class = 'expedition'; $this->rights_class = 'expedition';
$r=0; $r = 0;
$r++; $r++;
$this->rights[$r][0] = 101; $this->rights[$r][0] = 101;
@ -189,7 +188,7 @@ class modExpedition extends DolibarrModules
$r++; $r++;
$this->rights[$r][0] = 1101; $this->rights[$r][0] = 1101;
$this->rights[$r][1] = 'Lire les bons de livraison'; $this->rights[$r][1] = 'Read delivery receipts';
$this->rights[$r][2] = 'r'; $this->rights[$r][2] = 'r';
$this->rights[$r][3] = 0; $this->rights[$r][3] = 0;
$this->rights[$r][4] = 'livraison'; $this->rights[$r][4] = 'livraison';
@ -197,7 +196,7 @@ class modExpedition extends DolibarrModules
$r++; $r++;
$this->rights[$r][0] = 1102; $this->rights[$r][0] = 1102;
$this->rights[$r][1] = 'Creer modifier les bons de livraison'; $this->rights[$r][1] = 'Create/modify delivery receipts';
$this->rights[$r][2] = 'w'; $this->rights[$r][2] = 'w';
$this->rights[$r][3] = 0; $this->rights[$r][3] = 0;
$this->rights[$r][4] = 'livraison'; $this->rights[$r][4] = 'livraison';
@ -205,7 +204,7 @@ class modExpedition extends DolibarrModules
$r++; $r++;
$this->rights[$r][0] = 1104; $this->rights[$r][0] = 1104;
$this->rights[$r][1] = 'Valider les bons de livraison'; $this->rights[$r][1] = 'Validate delivery receipts';
$this->rights[$r][2] = 'd'; $this->rights[$r][2] = 'd';
$this->rights[$r][3] = 0; $this->rights[$r][3] = 0;
$this->rights[$r][4] = 'livraison_advance'; $this->rights[$r][4] = 'livraison_advance';
@ -213,7 +212,7 @@ class modExpedition extends DolibarrModules
$r++; $r++;
$this->rights[$r][0] = 1109; $this->rights[$r][0] = 1109;
$this->rights[$r][1] = 'Supprimer les bons de livraison'; $this->rights[$r][1] = 'Delete delivery receipts';
$this->rights[$r][2] = 'd'; $this->rights[$r][2] = 'd';
$this->rights[$r][3] = 0; $this->rights[$r][3] = 0;
$this->rights[$r][4] = 'livraison'; $this->rights[$r][4] = 'livraison';
@ -222,92 +221,92 @@ class modExpedition extends DolibarrModules
// Menus // Menus
//------- //-------
$this->menu = 1; // This module add menu entries. They are coded into menu manager. $this->menu = 1; // This module add menu entries. They are coded into menu manager.
// Exports // Exports
//-------- //--------
$r=0; $r = 0;
include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
$shipment=new Commande($this->db); $shipment = new Commande($this->db);
$contact_arrays=$shipment->liste_type_contact('external', '', 0, 0, ''); $contact_arrays = $shipment->liste_type_contact('external', '', 0, 0, '');
if (is_array($contact_arrays) && count($contact_arrays)>0){ if (is_array($contact_arrays) && count($contact_arrays) > 0) {
$idcontacts=join(',', array_keys($shipment->liste_type_contact('external', '', 0, 0, ''))); $idcontacts = join(',', array_keys($shipment->liste_type_contact('external', '', 0, 0, '')));
} else { } else {
$idcontacts=0; $idcontacts = 0;
} }
$r++; $r++;
$this->export_code[$r]=$this->rights_class.'_'.$r; $this->export_code[$r] = $this->rights_class.'_'.$r;
$this->export_label[$r]='Shipments'; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_label[$r] = 'Shipments'; // Translation key (used only if key ExportDataset_xxx_z not found)
$this->export_permission[$r]=array(array("expedition","shipment","export")); $this->export_permission[$r] = array(array("expedition", "shipment", "export"));
$this->export_fields_array[$r]=array( $this->export_fields_array[$r] = array(
's.rowid'=>"IdCompany",'s.nom'=>'ThirdParty','s.address'=>'Address','s.zip'=>'Zip','s.town'=>'Town','d.nom'=>'State','co.label'=>'Country', 's.rowid'=>"IdCompany", 's.nom'=>'ThirdParty', 's.address'=>'Address', 's.zip'=>'Zip', 's.town'=>'Town', 'd.nom'=>'State', 'co.label'=>'Country',
'co.code'=>'CountryCode','s.phone'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.idprof5'=>'ProfId5', 'co.code'=>'CountryCode', 's.phone'=>'Phone', 's.siren'=>'ProfId1', 's.siret'=>'ProfId2', 's.ape'=>'ProfId3', 's.idprof4'=>'ProfId4', 's.idprof5'=>'ProfId5',
's.idprof6'=>'ProfId6','c.rowid'=>"Id",'c.ref'=>"Ref",'c.ref_customer'=>"RefCustomer",'c.fk_soc'=>"IdCompany",'c.date_creation'=>"DateCreation", 's.idprof6'=>'ProfId6', 'c.rowid'=>"Id", 'c.ref'=>"Ref", 'c.ref_customer'=>"RefCustomer", 'c.fk_soc'=>"IdCompany", 'c.date_creation'=>"DateCreation",
'c.date_delivery'=>"DateDeliveryPlanned",'c.tracking_number'=>"TrackingNumber",'c.height'=>"Height",'c.width'=>"Width",'c.size'=>"Depth", 'c.date_delivery'=>"DateDeliveryPlanned", 'c.tracking_number'=>"TrackingNumber", 'c.height'=>"Height", 'c.width'=>"Width", 'c.size'=>"Depth",
'c.size_units'=>'SizeUnits','c.weight'=>"Weight",'c.weight_units'=>"WeightUnits",'c.fk_statut'=>'Status','c.note_public'=>"NotePublic", 'c.size_units'=>'SizeUnits', 'c.weight'=>"Weight", 'c.weight_units'=>"WeightUnits", 'c.fk_statut'=>'Status', 'c.note_public'=>"NotePublic",
'ed.rowid'=>'LineId','cd.description'=>'Description','ed.qty'=>"Qty",'p.rowid'=>'ProductId','p.ref'=>'ProductRef','p.label'=>'ProductLabel', 'ed.rowid'=>'LineId', 'cd.description'=>'Description', 'ed.qty'=>"Qty", 'p.rowid'=>'ProductId', 'p.ref'=>'ProductRef', 'p.label'=>'ProductLabel',
'p.weight'=>'ProductWeight','p.weight_units'=>'WeightUnits','p.volume'=>'ProductVolume','p.volume_units'=>'VolumeUnits' 'p.weight'=>'ProductWeight', 'p.weight_units'=>'WeightUnits', 'p.volume'=>'ProductVolume', 'p.volume_units'=>'VolumeUnits'
); );
if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) $this->export_fields_array[$r]+=array('sp.rowid'=>'IdContact','sp.lastname'=>'Lastname','sp.firstname'=>'Firstname','sp.note_public'=>'NotePublic'); if ($idcontacts && !empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) $this->export_fields_array[$r] += array('sp.rowid'=>'IdContact', 'sp.lastname'=>'Lastname', 'sp.firstname'=>'Firstname', 'sp.note_public'=>'NotePublic');
//$this->export_TypeFields_array[$r]=array( //$this->export_TypeFields_array[$r]=array(
// 's.rowid'=>"List:societe:nom",'s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.label'=>'List:c_country:label:label', // 's.rowid'=>"List:societe:nom",'s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.label'=>'List:c_country:label:label',
// 'co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text", // 'co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text",
// 'c.date_creation'=>"Date",'c.date_commande'=>"Date",'c.amount_ht'=>"Numeric",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric", // 'c.date_creation'=>"Date",'c.date_commande'=>"Date",'c.amount_ht'=>"Numeric",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric",
// 'c.total_ttc'=>"Numeric",'c.facture'=>"Boolean",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','ed.qty'=>"Text" // 'c.total_ttc'=>"Numeric",'c.facture'=>"Boolean",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','ed.qty'=>"Text"
//); //);
$this->export_TypeFields_array[$r]=array( $this->export_TypeFields_array[$r] = array(
's.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.label'=>'List:c_country:label:label','co.code'=>'Text','s.phone'=>'Text', 's.nom'=>'Text', 's.address'=>'Text', 's.zip'=>'Text', 's.town'=>'Text', 'co.label'=>'List:c_country:label:label', 'co.code'=>'Text', 's.phone'=>'Text',
's.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_customer'=>"Text",'c.date_creation'=>"Date", 's.siren'=>'Text', 's.siret'=>'Text', 's.ape'=>'Text', 's.idprof4'=>'Text', 'c.ref'=>"Text", 'c.ref_customer'=>"Text", 'c.date_creation'=>"Date",
'c.date_delivery'=>"Date",'c.tracking_number'=>"Numeric",'c.height'=>"Numeric",'c.width'=>"Numeric",'c.weight'=>"Numeric",'c.fk_statut'=>'Status', 'c.date_delivery'=>"Date", 'c.tracking_number'=>"Numeric", 'c.height'=>"Numeric", 'c.width'=>"Numeric", 'c.weight'=>"Numeric", 'c.fk_statut'=>'Status',
'c.note_public'=>"Text",'ed.qty'=>"Numeric",'d.nom'=>'Text' 'c.note_public'=>"Text", 'ed.qty'=>"Numeric", 'd.nom'=>'Text'
); );
$this->export_entities_array[$r]=array( $this->export_entities_array[$r] = array(
's.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','d.nom'=>'company','co.label'=>'company', 's.rowid'=>"company", 's.nom'=>'company', 's.address'=>'company', 's.zip'=>'company', 's.town'=>'company', 'd.nom'=>'company', 'co.label'=>'company',
'co.code'=>'company','s.fk_pays'=>'company','s.phone'=>'company','s.siren'=>'company','s.ape'=>'company','s.siret'=>'company','s.idprof4'=>'company', 'co.code'=>'company', 's.fk_pays'=>'company', 's.phone'=>'company', 's.siren'=>'company', 's.ape'=>'company', 's.siret'=>'company', 's.idprof4'=>'company',
's.idprof5'=>'company','s.idprof6'=>'company','c.rowid'=>"shipment",'c.ref'=>"shipment",'c.ref_customer'=>"shipment",'c.fk_soc'=>"shipment", 's.idprof5'=>'company', 's.idprof6'=>'company', 'c.rowid'=>"shipment", 'c.ref'=>"shipment", 'c.ref_customer'=>"shipment", 'c.fk_soc'=>"shipment",
'c.date_creation'=>"shipment",'c.date_delivery'=>"shipment",'c.tracking_number'=>'shipment','c.height'=>"shipment",'c.width'=>"shipment", 'c.date_creation'=>"shipment", 'c.date_delivery'=>"shipment", 'c.tracking_number'=>'shipment', 'c.height'=>"shipment", 'c.width'=>"shipment",
'c.size'=>'shipment','c.size_units'=>'shipment','c.weight'=>"shipment",'c.weight_units'=>'shipment','c.fk_statut'=>"shipment",'c.note_public'=>"shipment", 'c.size'=>'shipment', 'c.size_units'=>'shipment', 'c.weight'=>"shipment", 'c.weight_units'=>'shipment', 'c.fk_statut'=>"shipment", 'c.note_public'=>"shipment",
'ed.rowid'=>'shipment_line','cd.description'=>'shipment_line','ed.qty'=>"shipment_line",'p.rowid'=>'product','p.ref'=>'product','p.label'=>'product', 'ed.rowid'=>'shipment_line', 'cd.description'=>'shipment_line', 'ed.qty'=>"shipment_line", 'p.rowid'=>'product', 'p.ref'=>'product', 'p.label'=>'product',
'p.weight'=>'product','p.weight_units'=>'product','p.volume'=>'product','p.volume_units'=>'product' 'p.weight'=>'product', 'p.weight_units'=>'product', 'p.volume'=>'product', 'p.volume_units'=>'product'
); );
if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) $this->export_entities_array[$r]+=array('sp.rowid'=>'contact','sp.lastname'=>'contact','sp.firstname'=>'contact','sp.note_public'=>'contact'); if ($idcontacts && !empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) $this->export_entities_array[$r] += array('sp.rowid'=>'contact', 'sp.lastname'=>'contact', 'sp.firstname'=>'contact', 'sp.note_public'=>'contact');
$this->export_dependencies_array[$r]=array('shipment_line'=>'ed.rowid','product'=>'ed.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $this->export_dependencies_array[$r] = array('shipment_line'=>'ed.rowid', 'product'=>'ed.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) if ($idcontacts && !empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT))
{ {
$keyforselect='socpeople'; $keyforelement='contact'; $keyforaliasextra='extra3'; $keyforselect = 'socpeople'; $keyforelement = 'contact'; $keyforaliasextra = 'extra3';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
} }
$keyforselect='expedition'; $keyforelement='shipment'; $keyforaliasextra='extra'; $keyforselect = 'expedition'; $keyforelement = 'shipment'; $keyforaliasextra = 'extra';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$keyforselect='expeditiondet'; $keyforelement='shipment_line'; $keyforaliasextra='extra2'; $keyforselect = 'expeditiondet'; $keyforelement = 'shipment_line'; $keyforaliasextra = 'extra2';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$keyforselect='product'; $keyforelement='product'; $keyforaliasextra='extraprod'; $keyforselect = 'product'; $keyforelement = 'product'; $keyforaliasextra = 'extraprod';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_start[$r] = 'SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'expedition as c'; $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'expedition as c';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'expedition_extrafields as extra ON c.rowid = extra.fk_object,'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'expedition_extrafields as extra ON c.rowid = extra.fk_object,';
$this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'societe as s'; $this->export_sql_end[$r] .= ' '.MAIN_DB_PREFIX.'societe as s';
if(!$user->rights->societe->client->voir) $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'societe_commerciaux as sc ON sc.fk_soc = s.rowid'; if (!$user->rights->societe->client->voir) $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe_commerciaux as sc ON sc.fk_soc = s.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_departements as d ON s.fk_departement = d.rowid'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_departements as d ON s.fk_departement = d.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,';
$this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'expeditiondet as ed'; $this->export_sql_end[$r] .= ' '.MAIN_DB_PREFIX.'expeditiondet as ed';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'expeditiondet_extrafields as extra2 ON ed.rowid = extra2.fk_object'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'expeditiondet_extrafields as extra2 ON ed.rowid = extra2.fk_object';
$this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'commandedet as cd'; $this->export_sql_end[$r] .= ' , '.MAIN_DB_PREFIX.'commandedet as cd';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extraprod ON p.rowid = extraprod.fk_object'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extraprod ON p.rowid = extraprod.fk_object';
if ($idcontacts && ! empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) { if ($idcontacts && !empty($conf->global->SHIPMENT_ADD_CONTACTS_IN_EXPORT)) {
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'element_contact as ee ON ee.element_id = cd.fk_commande AND ee.fk_c_type_contact IN ('.$idcontacts.')';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople as sp ON sp.rowid = ee.fk_socpeople';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra3 ON sp.rowid = extra3.fk_object';
} }
$this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = ed.fk_expedition AND ed.fk_origin_line = cd.rowid'; $this->export_sql_end[$r] .= ' WHERE c.fk_soc = s.rowid AND c.rowid = ed.fk_expedition AND ed.fk_origin_line = cd.rowid';
$this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('expedition').')'; $this->export_sql_end[$r] .= ' AND c.entity IN ('.getEntity('expedition').')';
if(!$user->rights->societe->client->voir) $this->export_sql_end[$r] .=' AND sc.fk_user = '.$user->id; if (!$user->rights->societe->client->voir) $this->export_sql_end[$r] .= ' AND sc.fk_user = '.$user->id;
} }
@ -321,25 +320,25 @@ class modExpedition extends DolibarrModules
*/ */
public function init($options = '') public function init($options = '')
{ {
global $conf,$langs; global $conf, $langs;
// Permissions // Permissions
$this->remove($options); $this->remove($options);
//ODT template //ODT template
$src=DOL_DOCUMENT_ROOT.'/install/doctemplates/shipment/template_shipment.odt'; $src = DOL_DOCUMENT_ROOT.'/install/doctemplates/shipment/template_shipment.odt';
$dirodt=DOL_DATA_ROOT.'/doctemplates/shipment'; $dirodt = DOL_DATA_ROOT.'/doctemplates/shipment';
$dest=$dirodt.'/template_shipment.odt'; $dest = $dirodt.'/template_shipment.odt';
if (file_exists($src) && ! file_exists($dest)) if (file_exists($src) && !file_exists($dest))
{ {
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
dol_mkdir($dirodt); dol_mkdir($dirodt);
$result=dol_copy($src, $dest, 0, 0); $result = dol_copy($src, $dest, 0, 0);
if ($result < 0) if ($result < 0)
{ {
$langs->load("errors"); $langs->load("errors");
$this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); $this->error = $langs->trans('ErrorFailToCopyFile', $src, $dest);
return 0; return 0;
} }
} }

View File

@ -269,4 +269,46 @@ class modHoliday extends DolibarrModules
// $this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture'; // $this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture';
// $r++; // $r++;
} }
/**
* Function called when module is enabled.
* The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
* It also creates data directories
*
* @param string $options Options when enabling module ('', 'newboxdefonly', 'noboxes')
* @return int 1 if OK, 0 if KO
*/
public function init($options = '')
{
global $conf;
// Permissions
$this->remove($options);
//ODT template
/*$src=DOL_DOCUMENT_ROOT.'/install/doctemplates/holiday/template_holiday.odt';
$dirodt=DOL_DATA_ROOT.'/doctemplates/holiday';
$dest=$dirodt.'/template_order.odt';
if (file_exists($src) && ! file_exists($dest))
{
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
dol_mkdir($dirodt);
$result=dol_copy($src, $dest, 0, 0);
if ($result < 0)
{
$langs->load("errors");
$this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest);
return 0;
}
}
*/
$sql = array(
// "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape($this->const[0][2])."' AND type = 'holiday' AND entity = ".$conf->entity,
// "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape($this->const[0][2])."','holiday',".$conf->entity.")"
);
return $this->_init($sql, $options);
}
} }

View File

@ -64,11 +64,11 @@ class EmailCollector extends CommonObject
/** /**
* @var array List of child tables. To test if we can delete object. * @var array List of child tables. To test if we can delete object.
*/ */
protected $childtables=array(); protected $childtables = array();
/** /**
* @var array List of child tables. To know object to delete on cascade. * @var array List of child tables. To know object to delete on cascade.
*/ */
protected $childtablesoncascade=array('emailcollector_emailcollectorfilter','emailcollector_emailcollectoraction'); protected $childtablesoncascade = array('emailcollector_emailcollectorfilter', 'emailcollector_emailcollectoraction');
/** /**
@ -94,10 +94,10 @@ class EmailCollector extends CommonObject
/** /**
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
*/ */
public $fields=array( public $fields = array(
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID','visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1), 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1),
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20),
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1'), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1'),
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector'), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector'),
'description' => array('type'=>'text', 'label'=>'Description', 'visible'=>-1, 'enabled'=>1, 'position'=>60, 'notnull'=>-1), 'description' => array('type'=>'text', 'label'=>'Description', 'visible'=>-1, 'enabled'=>1, 'position'=>60, 'notnull'=>-1),
'host' => array('type'=>'varchar(255)', 'label'=>'EMailHost', 'visible'=>1, 'enabled'=>1, 'position'=>100, 'notnull'=>1, 'searchall'=>1, 'comment'=>"IMAP server", 'help'=>'Example: imap.gmail.com'), 'host' => array('type'=>'varchar(255)', 'label'=>'EMailHost', 'visible'=>1, 'enabled'=>1, 'position'=>100, 'notnull'=>1, 'searchall'=>1, 'comment'=>"IMAP server", 'help'=>'Example: imap.gmail.com'),
@ -107,7 +107,7 @@ class EmailCollector extends CommonObject
//'filter' => array('type'=>'text', 'label'=>'Filter', 'visible'=>1, 'enabled'=>1, 'position'=>105), //'filter' => array('type'=>'text', 'label'=>'Filter', 'visible'=>1, 'enabled'=>1, 'position'=>105),
//'actiontodo' => array('type'=>'varchar(255)', 'label'=>'ActionToDo', 'visible'=>1, 'enabled'=>1, 'position'=>106), //'actiontodo' => array('type'=>'varchar(255)', 'label'=>'ActionToDo', 'visible'=>1, 'enabled'=>1, 'position'=>106),
'target_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxTargetDirectory', 'visible'=>1, 'enabled'=>1, 'position'=>110, 'notnull'=>0, 'comment'=>"Where to store messages once processed"), 'target_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxTargetDirectory', 'visible'=>1, 'enabled'=>1, 'position'=>110, 'notnull'=>0, 'comment'=>"Where to store messages once processed"),
'maxemailpercollect' => array('type'=>'integer', 'label'=>'MaxEmailCollectPerCollect','visible'=>-1, 'enabled'=>1, 'position'=>111, 'default'=>100), 'maxemailpercollect' => array('type'=>'integer', 'label'=>'MaxEmailCollectPerCollect', 'visible'=>-1, 'enabled'=>1, 'position'=>111, 'default'=>100),
'datelastresult' => array('type'=>'datetime', 'label'=>'DateLastCollectResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>121, 'notnull'=>-1,), 'datelastresult' => array('type'=>'datetime', 'label'=>'DateLastCollectResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>121, 'notnull'=>-1,),
'codelastresult' => array('type'=>'varchar(16)', 'label'=>'CodeLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>122, 'notnull'=>-1,), 'codelastresult' => array('type'=>'varchar(16)', 'label'=>'CodeLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>122, 'notnull'=>-1,),
'lastresult' => array('type'=>'varchar(255)', 'label'=>'LastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>123, 'notnull'=>-1,), 'lastresult' => array('type'=>'varchar(255)', 'label'=>'LastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>123, 'notnull'=>-1,),
@ -222,13 +222,13 @@ class EmailCollector extends CommonObject
} }
// Translate some data of arrayofkeyval // Translate some data of arrayofkeyval
foreach($this->fields as $key => $val) foreach ($this->fields as $key => $val)
{ {
if (is_array($val['arrayofkeyval'])) if (is_array($val['arrayofkeyval']))
{ {
foreach($val['arrayofkeyval'] as $key2 => $val2) foreach ($val['arrayofkeyval'] as $key2 => $val2)
{ {
$this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); $this->fields[$key]['arrayofkeyval'][$key2] = $langs->trans($val2);
} }
} }
} }
@ -279,10 +279,10 @@ class EmailCollector extends CommonObject
if (is_array($object->array_options) && count($object->array_options) > 0) if (is_array($object->array_options) && count($object->array_options) > 0)
{ {
$extrafields->fetch_name_optionals_label($this->table_element); $extrafields->fetch_name_optionals_label($this->table_element);
foreach($object->array_options as $key => $option) foreach ($object->array_options as $key => $option)
{ {
$shortkey = preg_replace('/options_/', '', $key); $shortkey = preg_replace('/options_/', '', $key);
if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey])) if (!empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
{ {
//var_dump($key); var_dump($clonedObj->array_options[$key]); exit; //var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
unset($object->array_options[$key]); unset($object->array_options[$key]);
@ -437,38 +437,38 @@ class EmailCollector extends CommonObject
{ {
global $conf, $langs, $hookmanager; global $conf, $langs, $hookmanager;
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 = '<u>' . $langs->trans("EmailCollector") . '</u>'; $label = '<u>'.$langs->trans("EmailCollector").'</u>';
$label.= '<br>'; $label .= '<br>';
$label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref; $label .= '<b>'.$langs->trans('Ref').':</b> '.$this->ref;
$url = dol_buildpath('/admin/emailcollector_card.php', 1).'?id='.$this->id; $url = dol_buildpath('/admin/emailcollector_card.php', 1).'?id='.$this->id;
if ($option != 'nolink') if ($option != 'nolink')
{ {
// Add param to save lastsearch_values or not // Add param to save lastsearch_values or not
$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) { if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) {
$add_save_lastsearch_values=1; $add_save_lastsearch_values = 1;
} }
if ($add_save_lastsearch_values) { if ($add_save_lastsearch_values) {
$url.='&save_lastsearch_values=1'; $url .= '&save_lastsearch_values=1';
} }
} }
$linkclose=''; $linkclose = '';
if (empty($notooltip)) if (empty($notooltip))
{ {
if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
{ {
$label=$langs->trans("ShowEmailCollector"); $label = $langs->trans("ShowEmailCollector");
$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' alt="'.dol_escape_htmltag($label, 1).'"';
} }
$linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"';
$linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; $linkclose .= ' class="classfortooltip'.($morecss ? ' '.$morecss : '').'"';
/* /*
$hookmanager->initHooks(array('myobjectdao')); $hookmanager->initHooks(array('myobjectdao'));
@ -681,7 +681,7 @@ class EmailCollector extends CommonObject
$flags .= '/novalidate-cert'; $flags .= '/novalidate-cert';
//$flags.='/readonly'; //$flags.='/readonly';
//$flags.='/debug'; //$flags.='/debug';
if ($norsh || ! empty($conf->global->IMPA_FORCE_NORSH)) $flags .= '/norsh'; if ($norsh || !empty($conf->global->IMPA_FORCE_NORSH)) $flags .= '/norsh';
$connectstringserver = '{'.$this->host.':993'.$flags.'}'; $connectstringserver = '{'.$this->host.':993'.$flags.'}';
@ -698,13 +698,13 @@ class EmailCollector extends CommonObject
{ {
if (function_exists('mb_convert_encoding')) { if (function_exists('mb_convert_encoding')) {
// change spaces by entropy because mb_convert fail with spaces // change spaces by entropy because mb_convert fail with spaces
$str=preg_replace("/ /", "xyxy", $str); $str = preg_replace("/ /", "xyxy", $str);
// if mb_convert work // if mb_convert work
if ($str = mb_convert_encoding($str, "UTF-7")) { if ($str = mb_convert_encoding($str, "UTF-7")) {
// change characters // change characters
$str=preg_replace("/\+A/", "&A", $str); $str = preg_replace("/\+A/", "&A", $str);
// change to spaces again // change to spaces again
$str=preg_replace("/xyxy/", " ", $str); $str = preg_replace("/xyxy/", " ", $str);
return $str; return $str;
} else { } else {
// print error and return false // print error and return false
@ -762,59 +762,59 @@ class EmailCollector extends CommonObject
// Overwrite values with values extracted from source email // Overwrite values with values extracted from source email
// $this->actionparam = 'opportunity_status=123;abc=EXTRACT:BODY:....' // $this->actionparam = 'opportunity_status=123;abc=EXTRACT:BODY:....'
$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '='); $arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty) foreach ($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
{ {
$tmpclass=''; $tmpproperty=''; $tmpclass = ''; $tmpproperty = '';
$tmparray=explode('.', $propertytooverwrite); $tmparray = explode('.', $propertytooverwrite);
if (count($tmparray) == 2) if (count($tmparray) == 2)
{ {
$tmpclass=$tmparray[0]; $tmpclass = $tmparray[0];
$tmpproperty=$tmparray[1]; $tmpproperty = $tmparray[1];
} }
else else
{ {
$tmpproperty=$tmparray[0]; $tmpproperty = $tmparray[0];
} }
if ($tmpclass && ($tmpclass != $object->element)) continue; // Property is for another type of object if ($tmpclass && ($tmpclass != $object->element)) continue; // Property is for another type of object
//if (property_exists($object, $tmpproperty) || preg_match('/^options_/', $tmpproperty)) //if (property_exists($object, $tmpproperty) || preg_match('/^options_/', $tmpproperty))
if ($tmpproperty) if ($tmpproperty)
{ {
$sourcestring=''; $sourcestring = '';
$sourcefield=''; $sourcefield = '';
$regexstring=''; $regexstring = '';
//$transformationstring=''; //$transformationstring='';
$regforregex=array(); $regforregex = array();
if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex)) if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
//$transofrmationstring=$regforregex[3]; //$transofrmationstring=$regforregex[3];
} }
elseif (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex)) elseif (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
} }
if (! empty($sourcefield) && ! empty($regexstring)) if (!empty($sourcefield) && !empty($regexstring))
{ {
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext; if (strtolower($sourcefield) == 'body') $sourcestring = $messagetext;
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject; elseif (strtolower($sourcefield) == 'subject') $sourcestring = $subject;
elseif (strtolower($sourcefield) == 'header') $sourcestring=$header; elseif (strtolower($sourcefield) == 'header') $sourcestring = $header;
if ($sourcestring) if ($sourcestring)
{ {
$regforval=array(); $regforval = array();
$regexoptions=''; $regexoptions = '';
if (strtolower($sourcefield) == 'body') $regexoptions='ms'; // The m means ^ and $ char is valid at each new line. The s means the char '.' is valid for new lines char too if (strtolower($sourcefield) == 'body') $regexoptions = 'ms'; // The m means ^ and $ char is valid at each new line. The s means the char '.' is valid for new lines char too
if (strtolower($sourcefield) == 'header') $regexoptions='m'; // The m means ^ and $ char is valid at each new line. if (strtolower($sourcefield) == 'header') $regexoptions = 'm'; // The m means ^ and $ char is valid at each new line.
//var_dump($tmpproperty.' - '.$regexstring.' - '.$regexoptions.' - '.$sourcestring); //var_dump($tmpproperty.' - '.$regexstring.' - '.$regexoptions.' - '.$sourcestring);
if (preg_match('/'.$regexstring.'/'.$regexoptions, $sourcestring, $regforval)) if (preg_match('/'.$regexstring.'/'.$regexoptions, $sourcestring, $regforval))
{ {
//var_dump($regforval[1]);exit; //var_dump($regforval[1]);exit;
// Overwrite param $tmpproperty // Overwrite param $tmpproperty
$object->$tmpproperty = isset($regforval[1])?trim($regforval[1]):null; $object->$tmpproperty = isset($regforval[1]) ?trim($regforval[1]) : null;
} }
else else
{ {
@ -832,24 +832,24 @@ class EmailCollector extends CommonObject
} }
elseif (preg_match('/^(SET|SETIFEMPTY):(.*)$/', $valueforproperty, $regforregex)) elseif (preg_match('/^(SET|SETIFEMPTY):(.*)$/', $valueforproperty, $regforregex))
{ {
$valuecurrent=''; $valuecurrent = '';
if (preg_match('/^options_/', $tmpproperty)) $valuecurrent = $object->array_options[preg_replace('/^options_/', '', $tmpproperty)]; if (preg_match('/^options_/', $tmpproperty)) $valuecurrent = $object->array_options[preg_replace('/^options_/', '', $tmpproperty)];
else $valuecurrent = $object->$tmpproperty; else $valuecurrent = $object->$tmpproperty;
if ($regforregex[1] == 'SET' || empty($valuecurrent)) if ($regforregex[1] == 'SET' || empty($valuecurrent))
{ {
$valuetouse = $regforregex[2]; $valuetouse = $regforregex[2];
$substitutionarray=array(); $substitutionarray = array();
$matcharray=array(); $matcharray = array();
preg_match_all('/__([a-z0-9]+(?:_[a-z0-9]+)?)__/i', $valuetouse, $matcharray); preg_match_all('/__([a-z0-9]+(?:_[a-z0-9]+)?)__/i', $valuetouse, $matcharray);
//var_dump($tmpproperty.' - '.$object->$tmpproperty.' - '.$valuetouse); var_dump($matcharray); //var_dump($tmpproperty.' - '.$object->$tmpproperty.' - '.$valuetouse); var_dump($matcharray);
if (is_array($matcharray[1])) // $matcharray[1] is array with list of substitution key found without the __ if (is_array($matcharray[1])) // $matcharray[1] is array with list of substitution key found without the __
{ {
foreach($matcharray[1] as $keytoreplace) foreach ($matcharray[1] as $keytoreplace)
{ {
if ($keytoreplace && isset($object->$keytoreplace)) if ($keytoreplace && isset($object->$keytoreplace))
{ {
$substitutionarray['__'.$keytoreplace.'__']=$object->$keytoreplace; $substitutionarray['__'.$keytoreplace.'__'] = $object->$keytoreplace;
} }
} }
} }
@ -888,7 +888,7 @@ class EmailCollector extends CommonObject
dol_syslog("EmailCollector::doCollectOneCollector start", LOG_DEBUG); dol_syslog("EmailCollector::doCollectOneCollector start", LOG_DEBUG);
$langs->loadLangs(array("project", "companies", "mails", "errors", "ticket")); $langs->loadLangs(array("project", "companies", "mails", "errors", "ticket", "agenda"));
$error = 0; $error = 0;
$this->output = ''; $this->output = '';
@ -921,73 +921,73 @@ class EmailCollector extends CommonObject
$this->fetchActions(); $this->fetchActions();
$sourcedir = $this->source_directory; $sourcedir = $this->source_directory;
$targetdir = ($this->target_directory ? $this->target_directory : ''); // Can be '[Gmail]/Trash' or 'mytag' $targetdir = ($this->target_directory ? $this->target_directory : ''); // Can be '[Gmail]/Trash' or 'mytag'
$connectstringserver = $this->getConnectStringIMAP(); $connectstringserver = $this->getConnectStringIMAP();
$connectstringsource = $connectstringserver.imap_utf7_encode($sourcedir); $connectstringsource = $connectstringserver.imap_utf7_encode($sourcedir);
$connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir); $connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir);
$connection = imap_open($connectstringsource, $this->login, $this->password); $connection = imap_open($connectstringsource, $this->login, $this->password);
if (! $connection) if (!$connection)
{ {
$this->error = 'Failed to open IMAP connection '.$connectstringsource; $this->error = 'Failed to open IMAP connection '.$connectstringsource;
return -3; return -3;
} }
imap_errors(); // Clear stack of errors. imap_errors(); // Clear stack of errors.
// $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined // $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined
$host=dol_getprefix('email'); $host = dol_getprefix('email');
// Define the IMAP search string // Define the IMAP search string
// See https://tools.ietf.org/html/rfc3501#section-6.4.4 for IMAPv4 (PHP not yet compatible) // See https://tools.ietf.org/html/rfc3501#section-6.4.4 for IMAPv4 (PHP not yet compatible)
// See https://tools.ietf.org/html/rfc1064 page 13 for IMAPv2 // See https://tools.ietf.org/html/rfc1064 page 13 for IMAPv2
//$search='ALL'; //$search='ALL';
$search='UNDELETED'; // Seems not supported by some servers $search = 'UNDELETED'; // Seems not supported by some servers
$searchhead=''; $searchhead = '';
$searchfilterdoltrackid=0; $searchfilterdoltrackid = 0;
$searchfilternodoltrackid=0; $searchfilternodoltrackid = 0;
foreach($this->filters as $rule) foreach ($this->filters as $rule)
{ {
if (empty($rule['status'])) continue; if (empty($rule['status'])) continue;
if ($rule['type'] == 'to') $search.=($search?' ':'').'TO "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'to') $search .= ($search ? ' ' : '').'TO "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'bcc') $search.=($search?' ':'').'BCC'; if ($rule['type'] == 'bcc') $search .= ($search ? ' ' : '').'BCC';
if ($rule['type'] == 'cc') $search.=($search?' ':'').'CC'; if ($rule['type'] == 'cc') $search .= ($search ? ' ' : '').'CC';
if ($rule['type'] == 'from') $search.=($search?' ':'').'FROM "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'from') $search .= ($search ? ' ' : '').'FROM "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'subject') $search.=($search?' ':'').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'subject') $search .= ($search ? ' ' : '').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'body') $search.=($search?' ':'').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'body') $search .= ($search ? ' ' : '').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'header') $search.=($search?' ':'').'HEADER '.$rule['rulevalue']; if ($rule['type'] == 'header') $search .= ($search ? ' ' : '').'HEADER '.$rule['rulevalue'];
if ($rule['type'] == 'notinsubject') $search.=($search?' ':'').'SUBJECT NOT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'notinsubject') $search .= ($search ? ' ' : '').'SUBJECT NOT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'notinbody') $search.=($search?' ':'').'BODY NOT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'notinbody') $search .= ($search ? ' ' : '').'BODY NOT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'seen') $search.=($search?' ':'').'SEEN'; if ($rule['type'] == 'seen') $search .= ($search ? ' ' : '').'SEEN';
if ($rule['type'] == 'unseen') $search.=($search?' ':'').'UNSEEN'; if ($rule['type'] == 'unseen') $search .= ($search ? ' ' : '').'UNSEEN';
if ($rule['type'] == 'unanswered') $search.=($search?' ':'').'UNANSWERED'; if ($rule['type'] == 'unanswered') $search .= ($search ? ' ' : '').'UNANSWERED';
if ($rule['type'] == 'answered') $search.=($search?' ':'').'ANSWERED'; if ($rule['type'] == 'answered') $search .= ($search ? ' ' : '').'ANSWERED';
if ($rule['type'] == 'smaller') $search.=($search?' ':'').'SMALLER "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'smaller') $search .= ($search ? ' ' : '').'SMALLER "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'larger') $search.=($search?' ':'').'LARGER "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'larger') $search .= ($search ? ' ' : '').'LARGER "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'withtrackingid') { $searchfilterdoltrackid++; $searchhead.='/References.*@'.preg_quote($host, '/').'/'; } if ($rule['type'] == 'withtrackingid') { $searchfilterdoltrackid++; $searchhead .= '/References.*@'.preg_quote($host, '/').'/'; }
if ($rule['type'] == 'withouttrackingid') { $searchfilternodoltrackid++; $searchhead.='! /References.*@'.preg_quote($host, '/').'/';} if ($rule['type'] == 'withouttrackingid') { $searchfilternodoltrackid++; $searchhead .= '! /References.*@'.preg_quote($host, '/').'/'; }
} }
if (empty($targetdir)) // Use last date as filter if there is no targetdir defined. if (empty($targetdir)) // Use last date as filter if there is no targetdir defined.
{ {
$fromdate=0; $fromdate = 0;
if ($this->datelastok) $fromdate = $this->datelastok; if ($this->datelastok) $fromdate = $this->datelastok;
if ($fromdate > 0) $search.=($search?' ':'').'SINCE '.date('j-M-Y', $fromdate - 1); // SENTSINCE not supported. Date must be X-Abc-9999 (X on 1 digit if < 10) if ($fromdate > 0) $search .= ($search ? ' ' : '').'SINCE '.date('j-M-Y', $fromdate - 1); // SENTSINCE not supported. Date must be X-Abc-9999 (X on 1 digit if < 10)
//$search.=($search?' ':'').'SINCE 8-Apr-2018'; //$search.=($search?' ':'').'SINCE 8-Apr-2018';
} }
dol_syslog("IMAP search string = ".$search); dol_syslog("IMAP search string = ".$search);
//var_dump($search); //var_dump($search);
$nbemailprocessed=0; $nbemailprocessed = 0;
$nbemailok=0; $nbemailok = 0;
$nbactiondone=0; $nbactiondone = 0;
// Scan IMAP inbox // Scan IMAP inbox
$arrayofemail= imap_search($connection, $search, null, "UTF-8"); $arrayofemail = imap_search($connection, $search, null, "UTF-8");
if ($arrayofemail === false) if ($arrayofemail === false)
{ {
// Nothing found or search string not understood // Nothing found or search string not understood
@ -1001,7 +1001,7 @@ class EmailCollector extends CommonObject
} }
// Loop on each email found // Loop on each email found
if (! $error && ! empty($arrayofemail) && count($arrayofemail) > 0) if (!$error && !empty($arrayofemail) && count($arrayofemail) > 0)
{ {
// Loop to get part html and plain // Loop to get part html and plain
/* /*
@ -1078,15 +1078,15 @@ class EmailCollector extends CommonObject
dol_syslog("Start of loop on email", LOG_INFO, 1); dol_syslog("Start of loop on email", LOG_INFO, 1);
foreach($arrayofemail as $imapemail) foreach ($arrayofemail as $imapemail)
{ {
if ($nbemailprocessed > 1000) if ($nbemailprocessed > 1000)
{ {
break; // Do not process more than 1000 email per launch (this is a different protection than maxnbcollectedpercollect break; // Do not process more than 1000 email per launch (this is a different protection than maxnbcollectedpercollect
} }
$header = imap_fetchheader($connection, $imapemail, 0); $header = imap_fetchheader($connection, $imapemail, 0);
$matches=array(); $matches = array();
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $header, $matches); preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $header, $matches);
$headers = array_combine($matches[1], $matches[2]); $headers = array_combine($matches[1], $matches[2]);
//var_dump($headers); //var_dump($headers);
@ -1122,11 +1122,31 @@ class EmailCollector extends CommonObject
$this->db->begin(); $this->db->begin();
// GET Email meta datas // GET Email meta datas
$overview = imap_fetch_overview($connection, $imapemail, 0); $overview = imap_fetch_overview($connection, $imapemail, 0);
dol_syslog("** Process email - msgid=".$overview[0]->message_id." date=".dol_print_date($overview[0]->udate, 'dayrfc', 'gmt')." subject=".$overview[0]->subject); dol_syslog("** Process email - msgid=".$overview[0]->message_id." date=".dol_print_date($overview[0]->udate, 'dayrfc', 'gmt')." subject=".$overview[0]->subject);
// Decode $overview[0]->subject according to RFC2047
// Can use also imap_mime_header_decode($str)
// Can use also mb_decode_mimeheader($str)
// Can use also iconv_mime_decode($str, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8')
if (function_exists('imap_mime_header_decode')) {
$elements = imap_mime_header_decode($overview[0]->subject);
$newstring = '';
if (! empty($elements)) {
$num = count($elements);
for ($i = 0; $i < $num; $i++) {
$newstring .= ($newstring ? ' ' : '').$elements[$i]->text;
}
$overview[0]->subject = $newstring;
}
}
elseif (function_exists('mb_decode_mimeheader')) {
$overview[0]->subject = mb_decode_mimeheader($overview[0]->subject);
}
// Parse IMAP email structure // Parse IMAP email structure
global $htmlmsg, $plainmsg, $charset, $attachments; global $htmlmsg, $plainmsg, $charset, $attachments;
$this->getmsg($connection, $imapemail); $this->getmsg($connection, $imapemail);
@ -1186,26 +1206,26 @@ class EmailCollector extends CommonObject
//print $messagetext; //print $messagetext;
//exit; //exit;
$fromstring=$overview[0]->from; $fromstring = $overview[0]->from;
$sender=$overview[0]->sender; $sender = $overview[0]->sender;
$to=$overview[0]->to; $to = $overview[0]->to;
$sendtocc=$overview[0]->cc; $sendtocc = $overview[0]->cc;
$sendtobcc=$overview[0]->bcc; $sendtobcc = $overview[0]->bcc;
$date=$overview[0]->udate; $date = $overview[0]->udate;
$msgid=str_replace(array('<','>'), '', $overview[0]->message_id); $msgid = str_replace(array('<', '>'), '', $overview[0]->message_id);
$subject=$overview[0]->subject; $subject = $overview[0]->subject;
//var_dump($msgid);exit; //var_dump($msgid);exit;
$reg=array(); $reg = array();
if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg)) if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg))
{ {
$from=$reg[2]; $from = $reg[2];
$fromtext=$reg[1]; $fromtext = $reg[1];
} }
else else
{ {
$from = $fromstring; $from = $fromstring;
$fromtext=''; $fromtext = '';
} }
$fk_element_id = 0; $fk_element_type = ''; $fk_element_id = 0; $fk_element_type = '';
@ -1355,10 +1375,10 @@ class EmailCollector extends CommonObject
else $descriptiontitle = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from; else $descriptiontitle = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from;
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTopic").' : '.dol_escape_htmltag($subject)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTopic").' : '.dol_escape_htmltag($subject));
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailFrom").($langs->trans("MailFrom") != 'From' ? ' (From)':'').' : '.dol_escape_htmltag($fromstring)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailFrom").($langs->trans("MailFrom") != 'From' ? ' (From)' : '').' : '.dol_escape_htmltag($fromstring));
if ($sender) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Sender").($langs->trans("Sender") != 'Sender' ? ' (Sender)':'').' : '.dol_escape_htmltag($sender)); if ($sender) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Sender").($langs->trans("Sender") != 'Sender' ? ' (Sender)' : '').' : '.dol_escape_htmltag($sender));
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTo").($langs->trans("MailTo") != 'To' ? ' (To)':'').' : '.dol_escape_htmltag($to)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTo").($langs->trans("MailTo") != 'To' ? ' (To)' : '').' : '.dol_escape_htmltag($to));
if ($sendtocc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailCC").($langs->trans("MailCC") != 'CC' ? ' (CC)':'').' : '.dol_escape_htmltag($sendtocc)); if ($sendtocc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailCC").($langs->trans("MailCC") != 'CC' ? ' (CC)' : '').' : '.dol_escape_htmltag($sendtocc));
//if ($bcc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Bcc").' : '.dol_escape_htmltag($bcc)); //if ($bcc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Bcc").' : '.dol_escape_htmltag($bcc));
} }
@ -1374,38 +1394,38 @@ class EmailCollector extends CommonObject
else else
{ {
$actionparam = $operation['actionparam']; $actionparam = $operation['actionparam'];
$nametouseforthirdparty=''; $nametouseforthirdparty = '';
// $this->actionparam = 'SET:aaa' or 'EXTRACT:BODY:....' // $this->actionparam = 'SET:aaa' or 'EXTRACT:BODY:....'
$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '='); $arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty) foreach ($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
{ {
$sourcestring=''; $sourcestring = '';
$sourcefield=''; $sourcefield = '';
$regexstring=''; $regexstring = '';
$regforregex=array(); $regforregex = array();
if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex)) if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
} }
if (! empty($sourcefield) && ! empty($regexstring)) if (!empty($sourcefield) && !empty($regexstring))
{ {
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext; if (strtolower($sourcefield) == 'body') $sourcestring = $messagetext;
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject; elseif (strtolower($sourcefield) == 'subject') $sourcestring = $subject;
elseif (strtolower($sourcefield) == 'header') $sourcestring=$header; elseif (strtolower($sourcefield) == 'header') $sourcestring = $header;
if ($sourcestring) if ($sourcestring)
{ {
$regforval=array(); $regforval = array();
//var_dump($regexstring);var_dump($sourcestring); //var_dump($regexstring);var_dump($sourcestring);
if (preg_match('/'.$regexstring.'/ms', $sourcestring, $regforval)) if (preg_match('/'.$regexstring.'/ms', $sourcestring, $regforval))
{ {
//var_dump($regforval[1]);exit; //var_dump($regforval[1]);exit;
// Overwrite param $tmpproperty // Overwrite param $tmpproperty
$nametouseforthirdparty = isset($regforval[1])?trim($regforval[1]):null; $nametouseforthirdparty = isset($regforval[1]) ?trim($regforval[1]) : null;
} }
else else
{ {
@ -1495,7 +1515,7 @@ class EmailCollector extends CommonObject
// TODO Check if $msg ID already in database for $conf->entity // TODO Check if $msg ID already in database for $conf->entity
if (! $alreadycreated) if (!$alreadycreated)
{ {
if ($projectstatic->id > 0) if ($projectstatic->id > 0)
{ {
@ -1522,30 +1542,30 @@ class EmailCollector extends CommonObject
// Insert record of emails sent // Insert record of emails sent
$actioncomm = new ActionComm($this->db); $actioncomm = new ActionComm($this->db);
$actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...) $actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
$actioncomm->code = 'AC_'.$actioncode; $actioncomm->code = 'AC_'.$actioncode;
$actioncomm->label = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from; $actioncomm->label = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from;
$actioncomm->note_private= $descriptionfull; $actioncomm->note_private = $descriptionfull;
$actioncomm->fk_project = $projectstatic->id; $actioncomm->fk_project = $projectstatic->id;
$actioncomm->datep = $date; $actioncomm->datep = $date;
$actioncomm->datef = $date; $actioncomm->datef = $date;
$actioncomm->percentage = -1; // Not applicable $actioncomm->percentage = -1; // Not applicable
$actioncomm->socid = $thirdpartystatic->id; $actioncomm->socid = $thirdpartystatic->id;
$actioncomm->contactid = $contactstatic->id; $actioncomm->contactid = $contactstatic->id;
$actioncomm->socpeopleassigned = (!empty($contactstatic->id) ? array($contactstatic->id => '') : array()); $actioncomm->socpeopleassigned = (!empty($contactstatic->id) ? array($contactstatic->id => '') : array());
$actioncomm->authorid = $user->id; // User saving action $actioncomm->authorid = $user->id; // User saving action
$actioncomm->userownerid = $user->id; // Owner of action $actioncomm->userownerid = $user->id; // Owner of action
// Fields when action is an email (content should be added into note) // Fields when action is an email (content should be added into note)
$actioncomm->email_msgid = $msgid; $actioncomm->email_msgid = $msgid;
$actioncomm->email_from = $fromstring; $actioncomm->email_from = $fromstring;
$actioncomm->email_sender= $sender; $actioncomm->email_sender = $sender;
$actioncomm->email_to = $to; $actioncomm->email_to = $to;
$actioncomm->email_tocc = $sendtocc; $actioncomm->email_tocc = $sendtocc;
$actioncomm->email_tobcc = $sendtobcc; $actioncomm->email_tobcc = $sendtobcc;
$actioncomm->email_subject = $subject; $actioncomm->email_subject = $subject;
$actioncomm->errors_to = ''; $actioncomm->errors_to = '';
if (! in_array($fk_element_type, array('societe','contact','project','user'))) if (!in_array($fk_element_type, array('societe', 'contact', 'project', 'user')))
{ {
$actioncomm->fk_element = $fk_element_id; $actioncomm->fk_element = $fk_element_id;
$actioncomm->elementtype = $fk_element_type; $actioncomm->elementtype = $fk_element_type;
@ -1617,18 +1637,18 @@ class EmailCollector extends CommonObject
if (empty($projecttocreate->ref)) if (empty($projecttocreate->ref))
{ {
// Get next project Ref // Get next project Ref
$defaultref=''; $defaultref = '';
$modele = empty($conf->global->PROJECT_ADDON)?'mod_project_simple':$conf->global->PROJECT_ADDON; $modele = empty($conf->global->PROJECT_ADDON) ? 'mod_project_simple' : $conf->global->PROJECT_ADDON;
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $reldir=''; $file = ''; $classname = ''; $filefound = 0; $reldir = '';
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/project/".$modele.'.php', 0); $file = dol_buildpath($reldir."core/modules/project/".$modele.'.php', 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = $modele; $classname = $modele;
break; break;
} }
@ -1636,7 +1656,7 @@ class EmailCollector extends CommonObject
if ($filefound) if ($filefound)
{ {
$result=dol_include_once($reldir."core/modules/project/".$modele.'.php'); $result = dol_include_once($reldir."core/modules/project/".$modele.'.php');
$modProject = new $classname; $modProject = new $classname;
if ($savesocid > 0) if ($savesocid > 0)
@ -1732,18 +1752,18 @@ class EmailCollector extends CommonObject
if (empty($tickettocreate->ref)) if (empty($tickettocreate->ref))
{ {
// Get next project Ref // Get next project Ref
$defaultref=''; $defaultref = '';
$modele = empty($conf->global->TICKET_ADDON)?'mod_ticket_simple':$conf->global->TICKET_ADDON; $modele = empty($conf->global->TICKET_ADDON) ? 'mod_ticket_simple' : $conf->global->TICKET_ADDON;
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $reldir=''; $file = ''; $classname = ''; $filefound = 0; $reldir = '';
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/ticket/".$modele.'.php', 0); $file = dol_buildpath($reldir."core/modules/ticket/".$modele.'.php', 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = $modele; $classname = $modele;
break; break;
} }
@ -1751,7 +1771,7 @@ class EmailCollector extends CommonObject
if ($filefound) if ($filefound)
{ {
$result=dol_include_once($reldir."core/modules/ticket/".$modele.'.php'); $result = dol_include_once($reldir."core/modules/ticket/".$modele.'.php');
$modTicket = new $classname; $modTicket = new $classname;
if ($savesocid > 0) if ($savesocid > 0)
@ -1858,16 +1878,16 @@ class EmailCollector extends CommonObject
} }
} }
$output=$langs->trans('XEmailsDoneYActionsDone', $nbemailprocessed, $nbemailok, $nbactiondone); $output = $langs->trans('XEmailsDoneYActionsDone', $nbemailprocessed, $nbemailok, $nbactiondone);
dol_syslog("End of loop on emails", LOG_INFO, -1); dol_syslog("End of loop on emails", LOG_INFO, -1);
} }
else else
{ {
$output=$langs->trans('NoNewEmailToProcess'); $output = $langs->trans('NoNewEmailToProcess');
} }
imap_expunge($connection); // To validate any move imap_expunge($connection); // To validate any move
imap_close($connection); imap_close($connection);
@ -1876,7 +1896,7 @@ class EmailCollector extends CommonObject
$this->debuginfo = 'IMAP search string used : '.$search; $this->debuginfo = 'IMAP search string used : '.$search;
if ($searchhead) $this->debuginfo .= '<br>Then search string into email header : '.$searchhead; if ($searchhead) $this->debuginfo .= '<br>Then search string into email header : '.$searchhead;
if (! $error) $this->datelastok = $now; if (!$error) $this->datelastok = $now;
if (!empty($this->errors)) $this->lastresult .= " - ".join(" - ", $this->errors); if (!empty($this->errors)) $this->lastresult .= " - ".join(" - ", $this->errors);
$this->codelastresult = ($error ? 'KO' : 'OK'); $this->codelastresult = ($error ? 'KO' : 'OK');
@ -1902,7 +1922,7 @@ class EmailCollector extends CommonObject
{ {
// input $mbox = IMAP stream, $mid = message id // input $mbox = IMAP stream, $mid = message id
// output all the following: // output all the following:
global $charset,$htmlmsg,$plainmsg,$attachments; global $charset, $htmlmsg, $plainmsg, $attachments;
$htmlmsg = $plainmsg = $charset = ''; $htmlmsg = $plainmsg = $charset = '';
$attachments = array(); $attachments = array();
@ -1915,11 +1935,11 @@ class EmailCollector extends CommonObject
if (!$s->parts) { if (!$s->parts) {
// simple // simple
$this->getpart($mbox, $mid, $s, 0); // pass 0 as part-number $this->getpart($mbox, $mid, $s, 0); // pass 0 as part-number
} else { } else {
// multipart: cycle through each part // multipart: cycle through each part
foreach ($s->parts as $partno0 => $p) { foreach ($s->parts as $partno0 => $p) {
$this->getpart($mbox, $mid, $p, $partno0+1); $this->getpart($mbox, $mid, $p, $partno0 + 1);
} }
} }
} }
@ -1951,16 +1971,16 @@ class EmailCollector extends CommonObject
private function getpart($mbox, $mid, $p, $partno) private function getpart($mbox, $mid, $p, $partno)
{ {
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
global $htmlmsg,$plainmsg,$charset,$attachments; global $htmlmsg, $plainmsg, $charset, $attachments;
// DECODE DATA // DECODE DATA
$data = ($partno)? $data = ($partno) ?
imap_fetchbody($mbox, $mid, $partno): // multipart imap_fetchbody($mbox, $mid, $partno) : // multipart
imap_body($mbox, $mid); // simple imap_body($mbox, $mid); // simple
// Any part may be encoded, even plain text messages, so check everything. // Any part may be encoded, even plain text messages, so check everything.
if ($p->encoding==4) if ($p->encoding == 4)
$data = quoted_printable_decode($data); $data = quoted_printable_decode($data);
elseif ($p->encoding==3) elseif ($p->encoding == 3)
$data = base64_decode($data); $data = base64_decode($data);
// PARAMETERS // PARAMETERS
@ -1986,20 +2006,20 @@ class EmailCollector extends CommonObject
// so an attached text file (type 0) is not mistaken as the message. // so an attached text file (type 0) is not mistaken as the message.
if ($params['filename'] || $params['name']) { if ($params['filename'] || $params['name']) {
// filename may be given as 'Filename' or 'Name' or both // filename may be given as 'Filename' or 'Name' or both
$filename = ($params['filename'])? $params['filename'] : $params['name']; $filename = ($params['filename']) ? $params['filename'] : $params['name'];
// filename may be encoded, so see imap_mime_header_decode() // filename may be encoded, so see imap_mime_header_decode()
$attachments[$filename] = $data; // this is a problem if two files have same name $attachments[$filename] = $data; // this is a problem if two files have same name
} }
// TEXT // TEXT
if ($p->type==0 && $data) { if ($p->type == 0 && $data) {
// Messages may be split in different parts because of inline attachments, // Messages may be split in different parts because of inline attachments,
// so append parts together with blank row. // so append parts together with blank row.
if (strtolower($p->subtype)=='plain') if (strtolower($p->subtype) == 'plain')
$plainmsg .= trim($data) ."\n\n"; $plainmsg .= trim($data)."\n\n";
else else
$htmlmsg .= $data ."<br><br>"; $htmlmsg .= $data."<br><br>";
$charset = $params['charset']; // assume all parts are same charset $charset = $params['charset']; // assume all parts are same charset
} }
// EMBEDDED MESSAGE // EMBEDDED MESSAGE
@ -2007,7 +2027,7 @@ class EmailCollector extends CommonObject
// but AOL uses type 1 (multipart), which is not handled here. // but AOL uses type 1 (multipart), which is not handled here.
// There are no PHP functions to parse embedded messages, // There are no PHP functions to parse embedded messages,
// so this just appends the raw source to the main message. // so this just appends the raw source to the main message.
elseif ($p->type==2 && $data) { elseif ($p->type == 2 && $data) {
$plainmsg .= $data."\n\n"; $plainmsg .= $data."\n\n";
} }
@ -2015,7 +2035,7 @@ class EmailCollector extends CommonObject
if ($p->parts) { if ($p->parts) {
foreach ($p->parts as $partno0=>$p2) foreach ($p->parts as $partno0=>$p2)
{ {
$this->getpart($mbox, $mid, $p2, $partno.'.'.($partno0+1)); // 1.2, 1.2.1, etc. $this->getpart($mbox, $mid, $p2, $partno.'.'.($partno0 + 1)); // 1.2, 1.2.1, etc.
} }
} }
} }

View File

@ -168,7 +168,7 @@ if ($id > 0 || !empty($ref)) {
print "</div>\n"; print "</div>\n";
print dol_fiche_end(); dol_fiche_end();
$modulepart = 'expedition'; $modulepart = 'expedition';
$permission = $user->rights->expedition->creer; $permission = $user->rights->expedition->creer;

View File

@ -31,7 +31,7 @@
*/ */
if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr');
if (! defined('DOL_VERSION')) define('DOL_VERSION', '11.0.0-alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('DOL_VERSION')) define('DOL_VERSION', '11.0.0-beta'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c
if (! defined('EURO')) define('EURO', chr(128)); if (! defined('EURO')) define('EURO', chr(128));

View File

@ -630,7 +630,7 @@ if (($action != 'create' && $action != 'add') && !$error) {
$db->free($resql); $db->free($resql);
} else { } else {
print dol_print_error($db); dol_print_error($db);
} }
} }

View File

@ -2675,7 +2675,7 @@ else
if ($calculationrule == 'totalofround') $calculationrulenum = 1; if ($calculationrule == 'totalofround') $calculationrulenum = 1;
else $calculationrulenum = 2; else $calculationrulenum = 2;
// Show link for "recalculate" // Show link for "recalculate"
if (empty($object->getVentilExportCompta())) { if ($object->getVentilExportCompta() == 0) {
$s = $langs->trans("ReCalculate").' '; $s = $langs->trans("ReCalculate").' ';
$s .= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=calculate&calculationrule=totalofround">'.$langs->trans("Mode1").'</a>'; $s .= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=calculate&calculationrule=totalofround">'.$langs->trans("Mode1").'</a>';
$s .= ' / '; $s .= ' / ';

View File

@ -267,6 +267,7 @@ class Holiday extends CommonObject
// Insert request // Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."holiday("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."holiday(";
$sql .= "ref,";
$sql .= "fk_user,"; $sql .= "fk_user,";
$sql .= "date_create,"; $sql .= "date_create,";
$sql .= "description,"; $sql .= "description,";
@ -279,6 +280,7 @@ class Holiday extends CommonObject
$sql .= "fk_user_create,"; $sql .= "fk_user_create,";
$sql .= "entity"; $sql .= "entity";
$sql .= ") VALUES ("; $sql .= ") VALUES (";
$sql .= "'(PROV)',";
$sql .= "'".$this->db->escape($this->fk_user)."',"; $sql .= "'".$this->db->escape($this->fk_user)."',";
$sql .= " '".$this->db->idate($now)."',"; $sql .= " '".$this->db->idate($now)."',";
$sql .= " '".$this->db->escape($this->description)."',"; $sql .= " '".$this->db->escape($this->description)."',";
@ -304,12 +306,31 @@ class Holiday extends CommonObject
{ {
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."holiday"); $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."holiday");
if (!$notrigger) if ($this->id)
{ {
// Call trigger // update ref
$result = $this->call_trigger('HOLIDAY_CREATE', $user); $initialref = '(PROV'.$this->id.')';
if ($result < 0) { $error++; } if (!empty($this->ref)) $initialref = $this->ref;
// End call triggers
$sql = 'UPDATE '.MAIN_DB_PREFIX."holiday SET ref='".$this->db->escape($initialref)."' WHERE rowid=".$this->id;
if ($this->db->query($sql))
{
$this->ref = $initialref;
if (!$error)
{
$result = $this->insertExtraFields();
if ($result < 0) $error++;
}
if (!$error && !$notrigger)
{
// Call trigger
$result = $this->call_trigger('HOLIDAY_CREATE', $user);
if ($result < 0) { $error++; }
// End call triggers
}
}
} }
} }
@ -337,7 +358,7 @@ class Holiday extends CommonObject
* *
* @param int $id Id object * @param int $id Id object
* @param string $ref Ref object * @param string $ref Ref object
* @return int <0 if KO, >0 if OK * @return int <0 if KO, 0 if not found, >0 if OK
*/ */
public function fetch($id, $ref = '') public function fetch($id, $ref = '')
{ {
@ -402,12 +423,17 @@ class Holiday extends CommonObject
$this->fk_user_create = $obj->fk_user_create; $this->fk_user_create = $obj->fk_user_create;
$this->fk_type = $obj->fk_type; $this->fk_type = $obj->fk_type;
$this->entity = $obj->entity; $this->entity = $obj->entity;
$this->fetch_optionals();
$result = 1;
}
else {
$result = 0;
} }
$this->db->free($resql); $this->db->free($resql);
$this->fetch_optionals(); return $result;
return 1;
} }
else else
{ {

View File

@ -62,7 +62,7 @@ print '</tr>';
print '</table></div>'; print '</table></div>';
print '<br><br>'.$langs->trans("SomeTranslationAreUncomplete"); print '<br><br><span class="opacitymedium">'.$langs->trans("SomeTranslationAreUncomplete").'</span>';
// If there's no error, we display the next step button // If there's no error, we display the next step button
if ($err == 0) pFooter(0); if ($err == 0) pFooter(0);

View File

@ -59,6 +59,10 @@ ALTER TABLE llx_emailcollector_emailcollectoraction ADD COLUMN position integer
-- For v11 -- For v11
UPDATE llx_holiday SET ref = rowid WHERE ref IS NULL;
-- VMYSQL4.3 ALTER TABLE llx_holiday MODIFY COLUMN ref varchar(30) NOT NULL;
-- VPGSQL8.2 ALTER TABLE llx_holiday ALTER COLUMN ref SET NOT NULL;
ALTER TABLE llx_c_email_senderprofile MODIFY COLUMN active tinyint DEFAULT 1 NOT NULL; ALTER TABLE llx_c_email_senderprofile MODIFY COLUMN active tinyint DEFAULT 1 NOT NULL;
insert into llx_c_type_container (code,label,module,active) values ('menu', 'Menu', 'system', 1); insert into llx_c_type_container (code,label,module,active) values ('menu', 'Menu', 'system', 1);

View File

@ -19,7 +19,7 @@
CREATE TABLE llx_holiday CREATE TABLE llx_holiday
( (
rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
ref varchar(30) NULL, -- number ref varchar(30) NOT NULL,
ref_ext varchar(255), ref_ext varchar(255),
entity integer DEFAULT 1 NOT NULL, -- Multi company id entity integer DEFAULT 1 NOT NULL, -- Multi company id
fk_user integer NOT NULL, fk_user integer NOT NULL,

View File

@ -625,7 +625,7 @@ Module5000Desc=Allows you to manage multiple companies
Module6000Name=Workflow Module6000Name=Workflow
Module6000Desc=Workflow management (automatic creation of object and/or automatic status change) Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
Module10000Name=Websites Module10000Name=Websites
Module10000Desc=Create websites (public) with a WYSIWYG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module10000Desc=Create websites (public) with a WYSIWYG editor. This is a webmaster or developer oriented CMS (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name.
Module20000Name=Leave Request Management Module20000Name=Leave Request Management
Module20000Desc=Define and track employee leave requests Module20000Desc=Define and track employee leave requests
Module39000Name=Product Lots Module39000Name=Product Lots
@ -844,10 +844,10 @@ Permission1002=Create/modify warehouses
Permission1003=Delete warehouses Permission1003=Delete warehouses
Permission1004=Read stock movements Permission1004=Read stock movements
Permission1005=Create/modify stock movements Permission1005=Create/modify stock movements
Permission1101=Read delivery orders Permission1101=Read delivery receipts
Permission1102=Create/modify delivery orders Permission1102=Create/modify delivery receipts
Permission1104=Validate delivery orders Permission1104=Validate delivery receipts
Permission1109=Delete delivery orders Permission1109=Delete delivery receipts
Permission1121=Read supplier proposals Permission1121=Read supplier proposals
Permission1122=Create/modify supplier proposals Permission1122=Create/modify supplier proposals
Permission1123=Validate supplier proposals Permission1123=Validate supplier proposals

View File

@ -1,6 +1,6 @@
# Dolibarr language file - Source file is en_US - commercial # Dolibarr language file - Source file is en_US - commercial
Commercial=Commercial Commercial=Commerce
CommercialArea=Commercial area CommercialArea=Commerce area
Customer=Customer Customer=Customer
Customers=Customers Customers=Customers
Prospect=Prospect Prospect=Prospect

View File

@ -2,7 +2,7 @@
Delivery=Delivery Delivery=Delivery
DeliveryRef=Ref Delivery DeliveryRef=Ref Delivery
DeliveryCard=Receipt card DeliveryCard=Receipt card
DeliveryOrder=Delivery order DeliveryOrder=Delivery receipt
DeliveryDate=Delivery date DeliveryDate=Delivery date
CreateDeliveryOrder=Generate delivery receipt CreateDeliveryOrder=Generate delivery receipt
DeliveryStateSaved=Delivery state saved DeliveryStateSaved=Delivery state saved

View File

@ -847,6 +847,7 @@ Progress=Progress
ProgressShort=Progr. ProgressShort=Progr.
FrontOffice=Front office FrontOffice=Front office
BackOffice=Back office BackOffice=Back office
Submit=Submit
View=View View=View
Export=Export Export=Export
Exports=Exports Exports=Exports

View File

@ -83,7 +83,7 @@ ListOfDictionariesEntries=List of dictionaries entries
ListOfPermissionsDefined=List of defined permissions ListOfPermissionsDefined=List of defined permissions
SeeExamples=See examples here SeeExamples=See examples here
EnabledDesc=Condition to have this field active (Examples: 1 or $conf->global->MYMODULE_MYOPTION) EnabledDesc=Condition to have this field active (Examples: 1 or $conf->global->MYMODULE_MYOPTION)
VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing). It can be an expression, for example: preg_match('/public/', $_SERVER['PHP_SELF'])?0:1 VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing). It can be an expression, for example:<br>preg_match('/public/', $_SERVER['PHP_SELF'])?0:1<br>($user->rights->holiday->define_holiday ? 1 : 0)
IsAMeasureDesc=Can the value of field be cumulated to get a total into list? (Examples: 1 or 0) IsAMeasureDesc=Can the value of field be cumulated to get a total into list? (Examples: 1 or 0)
SearchAllDesc=Is the field used to make a search from the quick search tool? (Examples: 1 or 0) SearchAllDesc=Is the field used to make a search from the quick search tool? (Examples: 1 or 0)
SpecDefDesc=Enter here all documentation you want to provide with your module that is not already defined by other tabs. You can use .md or better, the rich .asciidoc syntax. SpecDefDesc=Enter here all documentation you want to provide with your module that is not already defined by other tabs. You can use .md or better, the rich .asciidoc syntax.

View File

@ -33,6 +33,7 @@ TicketDictSeverity=Ticket - Severities
TicketTypeShortBUGSOFT=Dysfonctionnement logiciel TicketTypeShortBUGSOFT=Dysfonctionnement logiciel
TicketTypeShortBUGHARD=Dysfonctionnement matériel TicketTypeShortBUGHARD=Dysfonctionnement matériel
TicketTypeShortCOM=Commercial question TicketTypeShortCOM=Commercial question
TicketTypeShortHELP=Request for functionnal help TicketTypeShortHELP=Request for functionnal help
TicketTypeShortISSUE=Issue, bug or problem TicketTypeShortISSUE=Issue, bug or problem
TicketTypeShortREQUEST=Change or enhancement request TicketTypeShortREQUEST=Change or enhancement request

View File

@ -880,7 +880,7 @@ if (!defined('NOLOGIN'))
if (GETPOST('theme', 'alpha')) if (GETPOST('theme', 'alpha'))
{ {
$conf->theme = GETPOST('theme', 'alpha', 1); $conf->theme = GETPOST('theme', 'alpha', 1);
$conf->css = "/theme/".$conf->theme."/style.css.php"; $conf->css = "/theme/".$conf->theme."/style.css.php";
} }
@ -926,7 +926,7 @@ if (!empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax = 1;
if (!empty($conf->dol_use_jmobile) && in_array($conf->theme, array('bureau2crea', 'cameleo', 'amarok'))) if (!empty($conf->dol_use_jmobile) && in_array($conf->theme, array('bureau2crea', 'cameleo', 'amarok')))
{ {
$conf->theme = 'eldy'; $conf->theme = 'eldy';
$conf->css = "/theme/".$conf->theme."/style.css.php"; $conf->css = "/theme/".$conf->theme."/style.css.php";
} }
if (!defined('NOREQUIRETRAN')) if (!defined('NOREQUIRETRAN'))
@ -1361,93 +1361,93 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr
} }
// Output standard javascript links // Output standard javascript links
if (! defined('DISABLE_JQUERY') && ! $disablejs && ! empty($conf->use_javascript_ajax)) if (!defined('DISABLE_JQUERY') && !$disablejs && !empty($conf->use_javascript_ajax))
{ {
// JQuery. Must be before other includes // JQuery. Must be before other includes
print '<!-- Includes JS for JQuery -->'."\n"; print '<!-- Includes JS for JQuery -->'."\n";
if (defined('JS_JQUERY') && constant('JS_JQUERY')) print '<script src="'.JS_JQUERY.'jquery.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; if (defined('JS_JQUERY') && constant('JS_JQUERY')) print '<script src="'.JS_JQUERY.'jquery.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
/*if (! empty($conf->global->MAIN_FEATURES_LEVEL) && ! defined('JS_JQUERY_MIGRATE_DISABLED')) /*if (! empty($conf->global->MAIN_FEATURES_LEVEL) && ! defined('JS_JQUERY_MIGRATE_DISABLED'))
{ {
if (defined('JS_JQUERY_MIGRATE') && constant('JS_JQUERY_MIGRATE')) print '<script src="'.JS_JQUERY_MIGRATE.'jquery-migrate.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; if (defined('JS_JQUERY_MIGRATE') && constant('JS_JQUERY_MIGRATE')) print '<script src="'.JS_JQUERY_MIGRATE.'jquery-migrate.min.js'.($ext?'?'.$ext:'').'"></script>'."\n";
else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery-migrate.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery-migrate.min.js'.($ext?'?'.$ext:'').'"></script>'."\n";
}*/ }*/
if (defined('JS_JQUERY_UI') && constant('JS_JQUERY_UI')) print '<script src="'.JS_JQUERY_UI.'jquery-ui.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; if (defined('JS_JQUERY_UI') && constant('JS_JQUERY_UI')) print '<script src="'.JS_JQUERY_UI.'jquery-ui.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery-ui.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; else print '<script src="'.DOL_URL_ROOT.'/includes/jquery/js/jquery-ui.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
if (! defined('DISABLE_JQUERY_TABLEDND')) print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/tablednd/jquery.tablednd.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; if (!defined('DISABLE_JQUERY_TABLEDND')) print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/tablednd/jquery.tablednd.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
// jQuery jnotify // jQuery jnotify
if (empty($conf->global->MAIN_DISABLE_JQUERY_JNOTIFY) && ! defined('DISABLE_JQUERY_JNOTIFY')) if (empty($conf->global->MAIN_DISABLE_JQUERY_JNOTIFY) && !defined('DISABLE_JQUERY_JNOTIFY'))
{ {
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jnotify/jquery.jnotify.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jnotify/jquery.jnotify.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
} }
// Flot // Flot
if (empty($conf->global->MAIN_DISABLE_JQUERY_FLOT) && ! defined('DISABLE_JQUERY_FLOT')) if (empty($conf->global->MAIN_DISABLE_JQUERY_FLOT) && !defined('DISABLE_JQUERY_FLOT'))
{ {
if (constant('JS_JQUERY_FLOT')) if (constant('JS_JQUERY_FLOT'))
{ {
print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.pie.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.pie.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.stack.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.JS_JQUERY_FLOT.'jquery.flot.stack.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
} }
else else
{ {
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.pie.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.pie.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.stack.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/flot/jquery.flot.stack.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
} }
} }
// jQuery jeditable // jQuery jeditable
if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && ! defined('DISABLE_JQUERY_JEDITABLE')) if (!empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && !defined('DISABLE_JQUERY_JEDITABLE'))
{ {
print '<!-- JS to manage editInPlace feature -->'."\n"; print '<!-- JS to manage editInPlace feature -->'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ui-datepicker.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ui-datepicker.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ui-autocomplete.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ui-autocomplete.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script>'."\n"; print '<script>'."\n";
print 'var urlSaveInPlace = \''.DOL_URL_ROOT.'/core/ajax/saveinplace.php\';'."\n"; print 'var urlSaveInPlace = \''.DOL_URL_ROOT.'/core/ajax/saveinplace.php\';'."\n";
print 'var urlLoadInPlace = \''.DOL_URL_ROOT.'/core/ajax/loadinplace.php\';'."\n"; print 'var urlLoadInPlace = \''.DOL_URL_ROOT.'/core/ajax/loadinplace.php\';'."\n";
print 'var tooltipInPlace = \''.$langs->transnoentities('ClickToEdit').'\';'."\n"; // Added in title attribute of span print 'var tooltipInPlace = \''.$langs->transnoentities('ClickToEdit').'\';'."\n"; // Added in title attribute of span
print 'var placeholderInPlace = \'&nbsp;\';'."\n"; // If we put another string than $langs->trans("ClickToEdit") here, nothing is shown. If we put empty string, there is error, Why ? print 'var placeholderInPlace = \'&nbsp;\';'."\n"; // If we put another string than $langs->trans("ClickToEdit") here, nothing is shown. If we put empty string, there is error, Why ?
print 'var cancelInPlace = \''.$langs->trans('Cancel').'\';'."\n"; print 'var cancelInPlace = \''.$langs->trans('Cancel').'\';'."\n";
print 'var submitInPlace = \''.$langs->trans('Ok').'\';'."\n"; print 'var submitInPlace = \''.$langs->trans('Ok').'\';'."\n";
print 'var indicatorInPlace = \'<img src="'.DOL_URL_ROOT."/theme/".$conf->theme."/img/working.gif".'">\';'."\n"; print 'var indicatorInPlace = \'<img src="'.DOL_URL_ROOT."/theme/".$conf->theme."/img/working.gif".'">\';'."\n";
print 'var withInPlace = 300;'; // width in pixel for default string edit print 'var withInPlace = 300;'; // width in pixel for default string edit
print '</script>'."\n"; print '</script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/core/js/editinplace.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/core/js/editinplace.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ckeditor.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ckeditor.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
} }
// jQuery Timepicker // jQuery Timepicker
if (! empty($conf->global->MAIN_USE_JQUERY_TIMEPICKER) || defined('REQUIRE_JQUERY_TIMEPICKER')) if (!empty($conf->global->MAIN_USE_JQUERY_TIMEPICKER) || defined('REQUIRE_JQUERY_TIMEPICKER'))
{ {
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/timepicker/jquery-ui-timepicker-addon.js'.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/timepicker/jquery-ui-timepicker-addon.js'.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script src="'.DOL_URL_ROOT.'/core/js/timepicker.js.php?lang='.$langs->defaultlang.($ext?'&amp;'.$ext:'').'"></script>'."\n"; print '<script src="'.DOL_URL_ROOT.'/core/js/timepicker.js.php?lang='.$langs->defaultlang.($ext ? '&amp;'.$ext : '').'"></script>'."\n";
} }
if (! defined('DISABLE_SELECT2') && (! empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT'))) // jQuery plugin "mutiselect", "multiple-select", "select2", ... if (!defined('DISABLE_SELECT2') && (!empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT'))) // jQuery plugin "mutiselect", "multiple-select", "select2", ...
{ {
$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT; $tmpplugin = empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) ?constant('REQUIRE_JQUERY_MULTISELECT') : $conf->global->MAIN_USE_JQUERY_MULTISELECT;
print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/'.$tmpplugin.'/dist/js/'.$tmpplugin.'.full.min.js'.($ext?'?'.$ext:'').'"></script>'."\n"; // We include full because we need the support of containerCssClass print '<script src="'.DOL_URL_ROOT.'/includes/jquery/plugins/'.$tmpplugin.'/dist/js/'.$tmpplugin.'.full.min.js'.($ext ? '?'.$ext : '').'"></script>'."\n"; // We include full because we need the support of containerCssClass
} }
} }
if (! $disablejs && ! empty($conf->use_javascript_ajax)) if (!$disablejs && !empty($conf->use_javascript_ajax))
{ {
// CKEditor // CKEditor
if (! empty($conf->fckeditor->enabled) && (empty($conf->global->FCKEDITOR_EDITORNAME) || $conf->global->FCKEDITOR_EDITORNAME == 'ckeditor') && ! defined('DISABLE_CKEDITOR')) if (!empty($conf->fckeditor->enabled) && (empty($conf->global->FCKEDITOR_EDITORNAME) || $conf->global->FCKEDITOR_EDITORNAME == 'ckeditor') && !defined('DISABLE_CKEDITOR'))
{ {
print '<!-- Includes JS for CKEditor -->'."\n"; print '<!-- Includes JS for CKEditor -->'."\n";
$pathckeditor = DOL_URL_ROOT . '/includes/ckeditor/ckeditor/'; $pathckeditor = DOL_URL_ROOT.'/includes/ckeditor/ckeditor/';
$jsckeditor='ckeditor.js'; $jsckeditor = 'ckeditor.js';
if (constant('JS_CKEDITOR')) // To use external ckeditor 4 js lib if (constant('JS_CKEDITOR')) // To use external ckeditor 4 js lib
{ {
$pathckeditor=constant('JS_CKEDITOR'); $pathckeditor = constant('JS_CKEDITOR');
} }
print '<script><!-- enable ckeditor by main.inc.php -->'; print '<script><!-- enable ckeditor by main.inc.php -->';
print 'var CKEDITOR_BASEPATH = \''.$pathckeditor.'\';'."\n"; print 'var CKEDITOR_BASEPATH = \''.$pathckeditor.'\';'."\n";
print 'var ckeditorConfig = \''.dol_buildpath($themesubdir.'/theme/'.$conf->theme.'/ckeditor/config.js'.($ext?'?'.$ext:''), 1).'\';'."\n"; // $themesubdir='' in standard usage print 'var ckeditorConfig = \''.dol_buildpath($themesubdir.'/theme/'.$conf->theme.'/ckeditor/config.js'.($ext ? '?'.$ext : ''), 1).'\';'."\n"; // $themesubdir='' in standard usage
print 'var ckeditorFilebrowserBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n"; print 'var ckeditorFilebrowserBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n";
print 'var ckeditorFilebrowserImageBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Type=Image&Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n"; print 'var ckeditorFilebrowserImageBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Type=Image&Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n";
print '</script>'."\n"; print '</script>'."\n";
print '<script src="'.$pathckeditor.$jsckeditor.($ext?'?'.$ext:'').'"></script>'."\n"; print '<script src="'.$pathckeditor.$jsckeditor.($ext ? '?'.$ext : '').'"></script>'."\n";
print '<script>'; print '<script>';
if (GETPOST('mode', 'aZ09') == 'Full_inline') if (GETPOST('mode', 'aZ09') == 'Full_inline')
{ {
@ -2551,6 +2551,7 @@ if (!function_exists("llxFooter"))
print '<div id="dialogforpopup" style="display: none;"></div>'."\n"; print '<div id="dialogforpopup" style="display: none;"></div>'."\n";
// Add code for the asynchronous anonymous first ping (for telemetry) // Add code for the asynchronous anonymous first ping (for telemetry)
// You can use &forceping=1 in parameters to force the ping.
if (($_SERVER["PHP_SELF"] == DOL_URL_ROOT.'/index.php') || GETPOST('forceping', 'alpha')) if (($_SERVER["PHP_SELF"] == DOL_URL_ROOT.'/index.php') || GETPOST('forceping', 'alpha'))
{ {
//print '<!-- instance_unique_id='.$conf->file->instance_unique_id.' MAIN_FIRST_PING_OK_ID='.$conf->global->MAIN_FIRST_PING_OK_ID.' -->'; //print '<!-- instance_unique_id='.$conf->file->instance_unique_id.' MAIN_FIRST_PING_OK_ID='.$conf->global->MAIN_FIRST_PING_OK_ID.' -->';
@ -2560,6 +2561,8 @@ if (!function_exists("llxFooter"))
{ {
if (empty($_COOKIE['DOLINSTALLNOPING_'.md5($conf->file->instance_unique_id)])) if (empty($_COOKIE['DOLINSTALLNOPING_'.md5($conf->file->instance_unique_id)]))
{ {
include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
print "\n".'<!-- Includes JS for Ping of Dolibarr MAIN_FIRST_PING_OK_DATE = '.$conf->global->MAIN_FIRST_PING_OK_DATE.' MAIN_FIRST_PING_OK_ID = '.$conf->global->MAIN_FIRST_PING_OK_ID.' -->'."\n"; print "\n".'<!-- Includes JS for Ping of Dolibarr MAIN_FIRST_PING_OK_DATE = '.$conf->global->MAIN_FIRST_PING_OK_DATE.' MAIN_FIRST_PING_OK_ID = '.$conf->global->MAIN_FIRST_PING_OK_ID.' -->'."\n";
print "\n<!-- JS CODE TO ENABLE the anonymous Ontime Ping -->\n"; print "\n<!-- JS CODE TO ENABLE the anonymous Ontime Ping -->\n";
$hash_unique_id = md5('dolibarr'.$conf->file->instance_unique_id); $hash_unique_id = md5('dolibarr'.$conf->file->instance_unique_id);
@ -2580,7 +2583,8 @@ if (!function_exists("llxFooter"))
entity: "<?php echo (int) $conf->entity; ?>", entity: "<?php echo (int) $conf->entity; ?>",
dbtype: "<?php echo dol_escape_js($db->type); ?>", dbtype: "<?php echo dol_escape_js($db->type); ?>",
country_code: "<?php echo dol_escape_js($mysoc->country_code); ?>", country_code: "<?php echo dol_escape_js($mysoc->country_code); ?>",
php_version: "<?php echo phpversion(); ?>" php_version: "<?php echo phpversion(); ?>",
os_version: "<?php echo version_os('smr'); ?>"
}, },
success: function (data, status, xhr) { // success callback function (data contains body of response) success: function (data, status, xhr) { // success callback function (data contains body of response)
console.log("Ping ok"); console.log("Ping ok");

View File

@ -33,32 +33,32 @@ dol_include_once('/mrp/lib/mrp_mo.lib.php');
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("mrp","other")); $langs->loadLangs(array("mrp", "other"));
// Get parameters // Get parameters
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha'); $ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'alpha'); $action = GETPOST('action', 'alpha');
$cancel = GETPOST('cancel', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09');
$backtopage = GETPOST('backtopage', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha');
if (GETPOST('actioncode', 'array')) if (GETPOST('actioncode', 'array'))
{ {
$actioncode=GETPOST('actioncode', 'array', 3); $actioncode = GETPOST('actioncode', 'array', 3);
if (! count($actioncode)) $actioncode='0'; if (!count($actioncode)) $actioncode = '0';
} }
else else
{ {
$actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
} }
$search_agenda_label=GETPOST('search_agenda_label'); $search_agenda_label = GETPOST('search_agenda_label');
// Security check - Protection if external user // Security check - Protection if external user
//if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) accessforbidden();
//if ($user->socid > 0) $socid = $user->socid; //if ($user->socid > 0) $socid = $user->socid;
//$result = restrictedArea($user, 'mrp', $id); //$result = restrictedArea($user, 'mrp', $id);
$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
$sortfield = GETPOST("sortfield", 'alpha'); $sortfield = GETPOST("sortfield", 'alpha');
$sortorder = GETPOST("sortorder", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha');
$page = GETPOST("page", 'int'); $page = GETPOST("page", 'int');
@ -66,21 +66,21 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined,
$offset = $limit * $page; $offset = $limit * $page;
$pageprev = $page - 1; $pageprev = $page - 1;
$pagenext = $page + 1; $pagenext = $page + 1;
if (! $sortfield) $sortfield='a.datep,a.id'; if (!$sortfield) $sortfield = 'a.datep,a.id';
if (! $sortorder) $sortorder='DESC'; if (!$sortorder) $sortorder = 'DESC';
// Initialize technical objects // Initialize technical objects
$object=new Mo($db); $object = new Mo($db);
$extrafields = new ExtraFields($db); $extrafields = new ExtraFields($db);
$diroutputmassaction=$conf->mrp->dir_output . '/temp/massgeneration/'.$user->id; $diroutputmassaction = $conf->mrp->dir_output.'/temp/massgeneration/'.$user->id;
$hookmanager->initHooks(array('moagenda','globalcard')); // Note that conf->hooks_modules contains array $hookmanager->initHooks(array('moagenda', 'globalcard')); // Note that conf->hooks_modules contains array
// Fetch optionals attributes and labels // Fetch optionals attributes and labels
$extrafields->fetch_name_optionals_label($object->table_element); $extrafields->fetch_name_optionals_label($object->table_element);
// Load object // Load object
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity] . "/" . $object->id; if ($id > 0 || !empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object->entity]."/".$object->id;
@ -88,14 +88,14 @@ if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mrp->multidir_output[$object-
* Actions * Actions
*/ */
$parameters=array('id'=>$socid); $parameters = array('id'=>$socid);
$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook)) if (empty($reshook))
{ {
// Cancel // Cancel
if (GETPOST('cancel', 'alpha') && ! empty($backtopage)) if (GETPOST('cancel', 'alpha') && !empty($backtopage))
{ {
header("Location: ".$backtopage); header("Location: ".$backtopage);
exit; exit;
@ -104,8 +104,8 @@ if (empty($reshook))
// Purge search criteria // Purge search criteria
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers
{ {
$actioncode=''; $actioncode = '';
$search_agenda_label=''; $search_agenda_label = '';
} }
} }
@ -121,12 +121,12 @@ $form = new Form($db);
if ($object->id > 0) if ($object->id > 0)
{ {
$title=$langs->trans("Agenda"); $title = $langs->trans("Agenda");
//if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title; //if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title;
$help_url = ''; $help_url = '';
llxHeader('', $title, $help_url); llxHeader('', $title, $help_url);
if (! empty($conf->notification->enabled)) $langs->load("mails"); if (!empty($conf->notification->enabled)) $langs->load("mails");
$head = moPrepareHead($object); $head = moPrepareHead($object);
@ -134,9 +134,9 @@ if ($object->id > 0)
// Object card // Object card
// ------------------------------------------------------------ // ------------------------------------------------------------
$linkback = '<a href="' .dol_buildpath('/mrp/mo_list.php', 1) . '?restore_lastsearch_values=1' . (! empty($socid) ? '&socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>'; $linkback = '<a href="'.dol_buildpath('/mrp/mo_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
$morehtmlref='<div class="refidno">'; $morehtmlref = '<div class="refidno">';
/* /*
// Ref customer // Ref customer
$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
@ -176,7 +176,7 @@ if ($object->id > 0)
} }
} }
}*/ }*/
$morehtmlref.='</div>'; $morehtmlref .= '</div>';
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
@ -195,16 +195,16 @@ if ($object->id > 0)
// Actions buttons // Actions buttons
$objthirdparty=$object; $objthirdparty = $object;
$objcon=new stdClass(); $objcon = new stdClass();
$out='&origin='.$object->element.'&originid='.$object->id; $out = '&origin='.$object->element.'&originid='.$object->id;
$permok=$user->rights->agenda->myactions->create; $permok = $user->rights->agenda->myactions->create;
if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
{ {
//$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'; //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id; if (get_class($objthirdparty) == 'Societe') $out .= '&amp;socid='.$objthirdparty->id;
$out.=(! empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1&amp;percentage=-1'; $out .= (!empty($objcon->id) ? '&amp;contactid='.$objcon->id : '').'&amp;backtopage=1&amp;percentage=-1';
//$out.=$langs->trans("AddAnAction").' '; //$out.=$langs->trans("AddAnAction").' ';
//$out.=img_picto($langs->trans("AddAnAction"),'filenew'); //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
//$out.="</a>"; //$out.="</a>";
@ -213,9 +213,9 @@ if ($object->id > 0)
print '<div class="tabsAction">'; print '<div class="tabsAction">';
if (! empty($conf->agenda->enabled)) if (!empty($conf->agenda->enabled))
{ {
if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create))
{ {
print '<a class="butAction" href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'">'.$langs->trans("AddAction").'</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'">'.$langs->trans("AddAction").'</a>';
} }
@ -227,18 +227,18 @@ if ($object->id > 0)
print '</div>'; print '</div>';
if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) if (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read)))
{ {
$param='&id='.$object->id.'&socid='.$socid; $param = '&id='.$object->id.'&socid='.$socid;
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
//print load_fiche_titre($langs->trans("ActionsOnMo"), '', ''); //print load_fiche_titre($langs->trans("ActionsOnMo"), '', '');
// List of all actions // List of all actions
$filters=array(); $filters = array();
$filters['search_agenda_label']=$search_agenda_label; $filters['search_agenda_label'] = $search_agenda_label;
// TODO Replace this with same code than into list.php // TODO Replace this with same code than into list.php
//show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); //show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);

View File

@ -171,40 +171,40 @@ class Products extends DolibarrApi
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
$sql = "SELECT t.rowid, t.ref, t.ref_ext"; $sql = "SELECT t.rowid, t.ref, t.ref_ext";
$sql.= " FROM ".MAIN_DB_PREFIX."product as t"; $sql .= " FROM ".MAIN_DB_PREFIX."product as t";
if ($category > 0) { if ($category > 0) {
$sql.= ", ".MAIN_DB_PREFIX."categorie_product as c"; $sql .= ", ".MAIN_DB_PREFIX."categorie_product as c";
} }
$sql.= ' WHERE t.entity IN ('.getEntity('product').')'; $sql .= ' WHERE t.entity IN ('.getEntity('product').')';
// Select products of given category // Select products of given category
if ($category > 0) { if ($category > 0) {
$sql.= " AND c.fk_categorie = ".$db->escape($category); $sql .= " AND c.fk_categorie = ".$db->escape($category);
$sql.= " AND c.fk_product = t.rowid "; $sql .= " AND c.fk_product = t.rowid ";
} }
if ($mode == 1) { if ($mode == 1) {
// Show only products // Show only products
$sql.= " AND t.fk_product_type = 0"; $sql .= " AND t.fk_product_type = 0";
} elseif ($mode == 2) { } elseif ($mode == 2) {
// Show only services // Show only services
$sql.= " AND t.fk_product_type = 1"; $sql .= " AND t.fk_product_type = 1";
} }
// Add sql filters // Add sql filters
if ($sqlfilters) { if ($sqlfilters) {
if (! DolibarrApi::_checkFilters($sqlfilters)) { if (!DolibarrApi::_checkFilters($sqlfilters)) {
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
} }
$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; $regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; $sql .= " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
} }
$sql.= $db->order($sortfield, $sortorder); $sql .= $db->order($sortfield, $sortorder);
if ($limit) { if ($limit) {
if ($page < 0) { if ($page < 0) {
$page = 0; $page = 0;
} }
$offset = $limit * $page; $offset = $limit * $page;
$sql.= $db->plimit($limit + 1, $offset); $sql .= $db->plimit($limit + 1, $offset);
} }
$result = $db->query($sql); $result = $db->query($sql);
@ -216,7 +216,7 @@ class Products extends DolibarrApi
{ {
$obj = $db->fetch_object($result); $obj = $db->fetch_object($result);
$product_static = new Product($db); $product_static = new Product($db);
if($product_static->fetch($obj->rowid)) { if ($product_static->fetch($obj->rowid)) {
$obj_ret[] = $this->_cleanObjectDatas($product_static); $obj_ret[] = $this->_cleanObjectDatas($product_static);
} }
$i++; $i++;
@ -225,7 +225,7 @@ class Products extends DolibarrApi
else { else {
throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror()); throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror());
} }
if(! count($obj_ret)) { if (!count($obj_ret)) {
throw new RestException(404, 'No product found'); throw new RestException(404, 'No product found');
} }
return $obj_ret; return $obj_ret;
@ -239,13 +239,13 @@ class Products extends DolibarrApi
*/ */
public function post($request_data = null) public function post($request_data = null)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
// Check mandatory fields // Check mandatory fields
$result = $this->_validate($request_data); $result = $this->_validate($request_data);
foreach($request_data as $field => $value) { foreach ($request_data as $field => $value) {
$this->product->$field = $value; $this->product->$field = $value;
} }
if ($this->product->create(DolibarrApiAccess::$user) < 0) { if ($this->product->create(DolibarrApiAccess::$user) < 0) {
@ -271,22 +271,22 @@ class Products extends DolibarrApi
{ {
global $conf; global $conf;
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) { if (!DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
$oldproduct = dol_clone($this->product, 0); $oldproduct = dol_clone($this->product, 0);
foreach($request_data as $field => $value) { foreach ($request_data as $field => $value) {
if ($field == 'id') { continue; if ($field == 'id') { continue;
} }
$this->product->$field = $value; $this->product->$field = $value;
@ -300,7 +300,7 @@ class Products extends DolibarrApi
$result = $this->product->update($id, DolibarrApiAccess::$user, 1, 'update', $updatetype); $result = $this->product->update($id, DolibarrApiAccess::$user, 1, 'update', $updatetype);
// If price mode is 1 price per product // If price mode is 1 price per product
if ($result > 0 && ! empty($conf->global->PRODUCT_PRICE_UNIQ)) { if ($result > 0 && !empty($conf->global->PRODUCT_PRICE_UNIQ)) {
// We update price only if it was changed // We update price only if it was changed
$pricemodified = false; $pricemodified = false;
if ($this->product->price_base_type != $oldproduct->price_base_type) { $pricemodified = true; if ($this->product->price_base_type != $oldproduct->price_base_type) { $pricemodified = true;
@ -359,15 +359,15 @@ class Products extends DolibarrApi
*/ */
public function delete($id) public function delete($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) { if (!DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
@ -392,11 +392,11 @@ class Products extends DolibarrApi
*/ */
public function getSubproducts($id) public function getSubproducts($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
if(! DolibarrApi::_checkAccessToResource('product', $id)) { if (!DolibarrApi::_checkAccessToResource('product', $id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
@ -430,11 +430,11 @@ class Products extends DolibarrApi
*/ */
public function addSubproducts($id, $subproduct_id, $qty, $incdec = 1) public function addSubproducts($id, $subproduct_id, $qty, $incdec = 1)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
if(! DolibarrApi::_checkAccessToResource('product', $id)) { if (!DolibarrApi::_checkAccessToResource('product', $id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
@ -462,11 +462,11 @@ class Products extends DolibarrApi
*/ */
public function delSubproducts($id, $subproduct_id) public function delSubproducts($id, $subproduct_id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
if(! DolibarrApi::_checkAccessToResource('product', $id)) { if (!DolibarrApi::_checkAccessToResource('product', $id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
@ -493,7 +493,7 @@ class Products extends DolibarrApi
*/ */
public function getCategories($id, $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0) public function getCategories($id, $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0)
{ {
if (! DolibarrApiAccess::$user->rights->categorie->lire) { if (!DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -525,7 +525,7 @@ class Products extends DolibarrApi
{ {
global $conf; global $conf;
if (! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -534,7 +534,7 @@ class Products extends DolibarrApi
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if (! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
@ -567,7 +567,7 @@ class Products extends DolibarrApi
{ {
global $conf; global $conf;
if (! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -576,12 +576,12 @@ class Products extends DolibarrApi
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if (! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
if ($result > 0) { if ($result > 0) {
require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/productcustomerprice.class.php';
$prodcustprice = new Productcustomerprice($this->db); $prodcustprice = new Productcustomerprice($this->db);
$filter = array(); $filter = array();
$filter['t.fk_product'] .= $id; $filter['t.fk_product'] .= $id;
@ -589,7 +589,7 @@ class Products extends DolibarrApi
$result = $prodcustprice->fetch_all('', '', 0, 0, $filter); $result = $prodcustprice->fetch_all('', '', 0, 0, $filter);
} }
if ( empty($prodcustprice->lines)) { if (empty($prodcustprice->lines)) {
throw new RestException(404, 'Prices not found'); throw new RestException(404, 'Prices not found');
} }
@ -609,7 +609,7 @@ class Products extends DolibarrApi
{ {
global $conf; global $conf;
if (! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -618,7 +618,7 @@ class Products extends DolibarrApi
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if (! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
@ -627,7 +627,7 @@ class Products extends DolibarrApi
} }
return array( return array(
'prices_by_qty'=>$this->product->prices_by_qty[0], // 1 if price by quantity was activated for the product 'prices_by_qty'=>$this->product->prices_by_qty[0], // 1 if price by quantity was activated for the product
'prices_by_qty_list'=>$this->product->prices_by_qty_list[0] 'prices_by_qty_list'=>$this->product->prices_by_qty_list[0]
); );
} }
@ -648,15 +648,15 @@ class Products extends DolibarrApi
*/ */
public function deletePurchasePrice($id, $priceid) public function deletePurchasePrice($id, $priceid)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) { if (!DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
} }
$resultsupplier = 0; $resultsupplier = 0;
@ -691,45 +691,45 @@ class Products extends DolibarrApi
$obj_ret = array(); $obj_ret = array();
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
$sql = "SELECT t.rowid, t.ref, t.ref_ext"; $sql = "SELECT t.rowid, t.ref, t.ref_ext";
$sql.= " FROM ".MAIN_DB_PREFIX."product as t"; $sql .= " FROM ".MAIN_DB_PREFIX."product as t";
if ($category > 0) { if ($category > 0) {
$sql.= ", ".MAIN_DB_PREFIX."categorie_product as c"; $sql .= ", ".MAIN_DB_PREFIX."categorie_product as c";
} }
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur_price as s"; $sql .= ", ".MAIN_DB_PREFIX."product_fournisseur_price as s";
$sql.= ' WHERE t.entity IN ('.getEntity('product').')'; $sql .= ' WHERE t.entity IN ('.getEntity('product').')';
if ($supplier > 0) { if ($supplier > 0) {
$sql.= " AND s.fk_soc = ".$db->escape($supplier); $sql .= " AND s.fk_soc = ".$db->escape($supplier);
} }
$sql.= " AND s.fk_product = t.rowid "; $sql .= " AND s.fk_product = t.rowid ";
// Select products of given category // Select products of given category
if ($category > 0) { if ($category > 0) {
$sql.= " AND c.fk_categorie = ".$db->escape($category); $sql .= " AND c.fk_categorie = ".$db->escape($category);
$sql.= " AND c.fk_product = t.rowid "; $sql .= " AND c.fk_product = t.rowid ";
} }
if ($mode == 1) { if ($mode == 1) {
// Show only products // Show only products
$sql.= " AND t.fk_product_type = 0"; $sql .= " AND t.fk_product_type = 0";
} elseif ($mode == 2) { } elseif ($mode == 2) {
// Show only services // Show only services
$sql.= " AND t.fk_product_type = 1"; $sql .= " AND t.fk_product_type = 1";
} }
// Add sql filters // Add sql filters
if ($sqlfilters) { if ($sqlfilters) {
if (! DolibarrApi::_checkFilters($sqlfilters)) { if (!DolibarrApi::_checkFilters($sqlfilters)) {
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
} }
$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; $regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; $sql .= " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
} }
$sql.= $db->order($sortfield, $sortorder); $sql .= $db->order($sortfield, $sortorder);
if ($limit) { if ($limit) {
if ($page < 0) { if ($page < 0) {
$page = 0; $page = 0;
} }
$offset = $limit * $page; $offset = $limit * $page;
$sql.= $db->plimit($limit + 1, $offset); $sql .= $db->plimit($limit + 1, $offset);
} }
$result = $db->query($sql); $result = $db->query($sql);
if ($result) { if ($result) {
@ -740,7 +740,7 @@ class Products extends DolibarrApi
{ {
$obj = $db->fetch_object($result); $obj = $db->fetch_object($result);
$product_static = new Product($db); $product_static = new Product($db);
if($product_static->fetch($obj->rowid)) { if ($product_static->fetch($obj->rowid)) {
$obj_ret[] = $this->_cleanObjectDatas($product_static); $obj_ret[] = $this->_cleanObjectDatas($product_static);
} }
$i++; $i++;
@ -749,7 +749,7 @@ class Products extends DolibarrApi
else { else {
throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror()); throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror());
} }
if(! count($obj_ret)) { if (!count($obj_ret)) {
throw new RestException(404, 'No product found'); throw new RestException(404, 'No product found');
} }
return $obj_ret; return $obj_ret;
@ -814,7 +814,7 @@ class Products extends DolibarrApi
*/ */
public function getAttributes() public function getAttributes()
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -836,14 +836,14 @@ class Products extends DolibarrApi
*/ */
public function getAttributeById($id) public function getAttributeById($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
$prodattr = new ProductAttribute($this->db); $prodattr = new ProductAttribute($this->db);
$result = $prodattr->fetch((int) $id); $result = $prodattr->fetch((int) $id);
if($result < 0) { if ($result < 0) {
throw new RestException(404, "Attribute not found"); throw new RestException(404, "Attribute not found");
} }
@ -863,11 +863,11 @@ class Products extends DolibarrApi
*/ */
public function getAttributesByRef($ref) public function getAttributesByRef($ref)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
$sql = "SELECT rowid, ref, label, rang FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '". trim($ref) ."' AND entity IN (".getEntity('product').")"; $sql = "SELECT rowid, ref, label, rang FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '".trim($ref)."' AND entity IN (".getEntity('product').")";
$query = $this->db->query($sql); $query = $this->db->query($sql);
@ -900,7 +900,7 @@ class Products extends DolibarrApi
*/ */
public function addAttributes($ref, $label) public function addAttributes($ref, $label)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -930,7 +930,7 @@ class Products extends DolibarrApi
*/ */
public function putAttributes($id, $request_data = null) public function putAttributes($id, $request_data = null)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -943,7 +943,7 @@ class Products extends DolibarrApi
throw new RestException(500, "Error fetching attribute"); throw new RestException(500, "Error fetching attribute");
} }
foreach($request_data as $field => $value) { foreach ($request_data as $field => $value) {
if ($field == 'rowid') { continue; if ($field == 'rowid') { continue;
} }
$prodattr->$field = $value; $prodattr->$field = $value;
@ -965,8 +965,8 @@ class Products extends DolibarrApi
/** /**
* Delete attributes by id. * Delete attributes by id.
* *
* @param int $id ID of Attribute * @param int $id ID of Attribute
* @return int * @return int Result of deletion
* *
* @throws RestException * @throws RestException
* @throws 401 * @throws 401
@ -975,18 +975,19 @@ class Products extends DolibarrApi
*/ */
public function deleteAttributes($id) public function deleteAttributes($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$prodattr = new ProductAttribute($this->db); $prodattr = new ProductAttribute($this->db);
$prodattr->id = (int) $id; $prodattr->id = (int) $id;
$result = $prodattr->delete(); $result = $prodattr->delete(DolibarrApiAccess::$user);
if ($result > 0) { if ($result <= 0) {
return 1; throw new RestException(500, "Error deleting attribute");
} }
throw new RestException(500, "Error deleting attribute");
return $result;
} }
/** /**
@ -1002,7 +1003,7 @@ class Products extends DolibarrApi
*/ */
public function getAttributeValueById($id) public function getAttributeValueById($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -1043,11 +1044,11 @@ class Products extends DolibarrApi
*/ */
public function getAttributeValueByRef($id, $ref) public function getAttributeValueByRef($id, $ref)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
$sql = "SELECT rowid, fk_product_attribute, ref, value FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '". trim($ref) ."' AND fk_product_attribute = ". (int) $id ." AND entity IN (".getEntity('product').")"; $sql = "SELECT rowid, fk_product_attribute, ref, value FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '".trim($ref)."' AND fk_product_attribute = ".(int) $id." AND entity IN (".getEntity('product').")";
$query = $this->db->query($sql); $query = $this->db->query($sql);
@ -1084,11 +1085,11 @@ class Products extends DolibarrApi
*/ */
public function deleteAttributeValueByRef($id, $ref) public function deleteAttributeValueByRef($id, $ref)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '". trim($ref) ."' AND fk_product_attribute = ". (int) $id; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '".trim($ref)."' AND fk_product_attribute = ".(int) $id;
if ($this->db->query($sql)) { if ($this->db->query($sql)) {
return 1; return 1;
@ -1110,7 +1111,7 @@ class Products extends DolibarrApi
*/ */
public function getAttributeValues($id) public function getAttributeValues($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -1131,7 +1132,7 @@ class Products extends DolibarrApi
*/ */
public function getAttributeValuesByRef($ref) public function getAttributeValuesByRef($ref)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -1139,7 +1140,7 @@ class Products extends DolibarrApi
$sql = 'SELECT '; $sql = 'SELECT ';
$sql .= 'v.fk_product_attribute, v.rowid, v.ref, v.value FROM '.MAIN_DB_PREFIX.'product_attribute_value v '; $sql .= 'v.fk_product_attribute, v.rowid, v.ref, v.value FROM '.MAIN_DB_PREFIX.'product_attribute_value v ';
$sql .= "WHERE v.fk_product_attribute = ( SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '". strtoupper(trim($ref)) ."' LIMIT 1)"; $sql .= "WHERE v.fk_product_attribute = ( SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '".strtoupper(trim($ref))."' LIMIT 1)";
$query = $this->db->query($sql); $query = $this->db->query($sql);
@ -1171,7 +1172,7 @@ class Products extends DolibarrApi
*/ */
public function addAttributeValue($id, $ref, $value) public function addAttributeValue($id, $ref, $value)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -1204,7 +1205,7 @@ class Products extends DolibarrApi
*/ */
public function putAttributeValue($id, $request_data) public function putAttributeValue($id, $request_data)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -1217,7 +1218,7 @@ class Products extends DolibarrApi
throw new RestException(500, "Error fetching attribute value"); throw new RestException(500, "Error fetching attribute value");
} }
foreach($request_data as $field => $value) { foreach ($request_data as $field => $value) {
if ($field == 'rowid') { continue; if ($field == 'rowid') { continue;
} }
$objectval->$field = $value; $objectval->$field = $value;
@ -1249,7 +1250,7 @@ class Products extends DolibarrApi
*/ */
public function deleteAttributeValueById($id) public function deleteAttributeValueById($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
@ -1275,7 +1276,7 @@ class Products extends DolibarrApi
*/ */
public function getVariants($id) public function getVariants($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
@ -1303,12 +1304,12 @@ class Products extends DolibarrApi
*/ */
public function getVariantsByProdRef($ref) public function getVariantsByProdRef($ref)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if (!DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch('', $ref); $result = $this->product->fetch('', $ref);
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
@ -1344,7 +1345,7 @@ class Products extends DolibarrApi
*/ */
public function addVariant($id, $weight_impact, $price_impact, $price_impact_is_percent, $features, $reference = false) public function addVariant($id, $weight_impact, $price_impact, $price_impact_is_percent, $features, $reference = false)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -1367,18 +1368,19 @@ class Products extends DolibarrApi
} }
$result = $this->product->fetch((int) $id); $result = $this->product->fetch((int) $id);
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
$prodcomb = new ProductCombination($this->db); $prodcomb = new ProductCombination($this->db);
$result = $prodcomb->createProductCombination(DolibarrApiAccess::$user, $this->product, $features, array(), $price_impact_is_percent, $price_impact, $weight_impact, $reference);
if ($result > 0) $result = $prodcomb->createProductCombination(DolibarrApiAccess::$user, $this->product, $features, array(), $price_impact_is_percent, $price_impact, $weight_impact, $reference);
{ if ($result > 0)
return $result; {
} else { return $result;
throw new RestException(500, "Error creating new product variant"); } else {
} throw new RestException(500, "Error creating new product variant");
}
} }
/** /**
@ -1401,7 +1403,7 @@ class Products extends DolibarrApi
*/ */
public function addVariantByProductRef($ref, $weight_impact, $price_impact, $price_impact_is_percent, $features) public function addVariantByProductRef($ref, $weight_impact, $price_impact, $price_impact_is_percent, $features)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
@ -1424,12 +1426,12 @@ class Products extends DolibarrApi
} }
$result = $this->product->fetch('', trim($ref)); $result = $this->product->fetch('', trim($ref));
if(! $result ) { if (!$result) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
$prodcomb = new ProductCombination($this->db); $prodcomb = new ProductCombination($this->db);
if (! $prodcomb->fetchByProductCombination2ValuePairs($this->product->id, $features)) if (!$prodcomb->fetchByProductCombination2ValuePairs($this->product->id, $features))
{ {
$result = $prodcomb->createProductCombination(DolibarrApiAccess::$user, $this->product, $features, array(), $price_impact_is_percent, $price_impact, $weight_impact); $result = $prodcomb->createProductCombination(DolibarrApiAccess::$user, $this->product, $features, array(), $price_impact_is_percent, $price_impact, $weight_impact);
if ($result > 0) if ($result > 0)
@ -1457,14 +1459,14 @@ class Products extends DolibarrApi
*/ */
public function putVariant($id, $request_data = null) public function putVariant($id, $request_data = null)
{ {
if(! DolibarrApiAccess::$user->rights->produit->creer) { if (!DolibarrApiAccess::$user->rights->produit->creer) {
throw new RestException(401); throw new RestException(401);
} }
$prodcomb = new ProductCombination($this->db); $prodcomb = new ProductCombination($this->db);
$prodcomb->fetch((int) $id); $prodcomb->fetch((int) $id);
foreach($request_data as $field => $value) { foreach ($request_data as $field => $value) {
if ($field == 'rowid') { continue; if ($field == 'rowid') { continue;
} }
$prodcomb->$field = $value; $prodcomb->$field = $value;
@ -1481,8 +1483,8 @@ class Products extends DolibarrApi
/** /**
* Delete product variants. * Delete product variants.
* *
* @param int $id ID of Variant * @param int $id ID of Variant
* @return int * @return int Result of deletion
* *
* @throws RestException * @throws RestException
* @throws 401 * @throws 401
@ -1491,19 +1493,18 @@ class Products extends DolibarrApi
*/ */
public function deleteVariant($id) public function deleteVariant($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->supprimer) { if (!DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$prodcomb = new ProductCombination($this->db); $prodcomb = new ProductCombination($this->db);
$prodcomb->id = (int) $id; $prodcomb->id = (int) $id;
$result = $prodcomb->delete(DolibarrApiAccess::$user); $result = $prodcomb->delete(DolibarrApiAccess::$user);
return $result; if ($result <= 0)
if ($result > 0)
{ {
return 1; throw new RestException(500, "Error deleting variant");
} }
throw new RestException(500, "Error deleting variant"); return $result;
} }
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore

View File

@ -27,15 +27,15 @@ include_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php';
include_once DOL_DOCUMENT_ROOT.'/product/inventory/lib/inventory.lib.php'; include_once DOL_DOCUMENT_ROOT.'/product/inventory/lib/inventory.lib.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("stocks","other")); $langs->loadLangs(array("stocks", "other"));
// Get parameters // Get parameters
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha'); $ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'aZ09'); $action = GETPOST('action', 'aZ09');
$confirm = GETPOST('confirm', 'alpha'); $confirm = GETPOST('confirm', 'alpha');
$cancel = GETPOST('cancel', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09');
$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectcard'; // To manage different context of search $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'myobjectcard'; // To manage different context of search
$backtopage = GETPOST('backtopage', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha');
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) if (empty($conf->global->MAIN_USE_ADVANCED_PERMS))
@ -48,28 +48,28 @@ else
} }
// Initialize technical objects // Initialize technical objects
$object=new Inventory($db); $object = new Inventory($db);
$extrafields = new ExtraFields($db); $extrafields = new ExtraFields($db);
$diroutputmassaction=$conf->stock->dir_output . '/temp/massgeneration/'.$user->id; $diroutputmassaction = $conf->stock->dir_output.'/temp/massgeneration/'.$user->id;
$hookmanager->initHooks(array('inventorycard')); // Note that conf->hooks_modules contains array $hookmanager->initHooks(array('inventorycard')); // Note that conf->hooks_modules contains array
// Fetch optionals attributes and labels // Fetch optionals attributes and labels
$extrafields->fetch_name_optionals_label($object->table_element); $extrafields->fetch_name_optionals_label($object->table_element);
$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
// Initialize array of search criterias // Initialize array of search criterias
$search_all=trim(GETPOST("search_all", 'alpha')); $search_all = trim(GETPOST("search_all", 'alpha'));
$search=array(); $search = array();
foreach($object->fields as $key => $val) foreach ($object->fields as $key => $val)
{ {
if (GETPOST('search_'.$key, 'alpha')) $search[$key]=GETPOST('search_'.$key, 'alpha'); if (GETPOST('search_'.$key, 'alpha')) $search[$key] = GETPOST('search_'.$key, 'alpha');
} }
if (empty($action) && empty($id) && empty($ref)) $action='view'; if (empty($action) && empty($id) && empty($ref)) $action = 'view';
// Load object // Load object
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
// Security check - Protection if external user // Security check - Protection if external user
//if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) accessforbidden();
@ -92,13 +92,13 @@ else
* Actions * Actions
*/ */
$parameters=array(); $parameters = array();
$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook)) if (empty($reshook))
{ {
$error=0; $error = 0;
$backurlforlist = DOL_URL_ROOT.'/product/inventory/list.php'; $backurlforlist = DOL_URL_ROOT.'/product/inventory/list.php';
@ -132,7 +132,7 @@ if (empty($reshook))
* View * View
*/ */
$form=new Form($db); $form = new Form($db);
llxHeader('', $langs->trans('Inventory'), ''); llxHeader('', $langs->trans('Inventory'), '');
@ -164,7 +164,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Confirmation to delete // Confirmation to delete
if ($action == 'delete') { if ($action == 'delete') {
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteInventory'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 1); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteInventory'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 1);
} }
// Confirmation to delete line // Confirmation to delete line
if ($action == 'deleteline') if ($action == 'deleteline')
@ -176,14 +176,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
if ($action == 'clone') { if ($action == 'clone') {
// Create an array for form // Create an array for form
$formquestion = array(); $formquestion = array();
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneMyObject', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneMyObject', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
} }
// Call Hook formConfirm // Call Hook formConfirm
$parameters = array('lineid' => $lineid); $parameters = array('lineid' => $lineid);
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
if (empty($reshook)) $formconfirm.=$hookmanager->resPrint; if (empty($reshook)) $formconfirm .= $hookmanager->resPrint;
elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint; elseif ($reshook > 0) $formconfirm = $hookmanager->resPrint;
// Print form confirm // Print form confirm
print $formconfirm; print $formconfirm;
@ -191,9 +191,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Object card // Object card
// ------------------------------------------------------------ // ------------------------------------------------------------
$linkback = '<a href="' . DOL_URL_ROOT . '/product/inventory/list.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/inventory/list.php'.(!empty($socid) ? '?socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
$morehtmlref='<div class="refidno">'; $morehtmlref = '<div class="refidno">';
/* /*
// Ref bis // Ref bis
$morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->inventory->creer, 'string', '', 0, 1); $morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->inventory->creer, 'string', '', 0, 1);
@ -233,7 +233,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
} }
} }
*/ */
$morehtmlref.='</div>'; $morehtmlref .= '</div>';
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
@ -245,10 +245,10 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
print '<table class="border centpercent">'."\n"; print '<table class="border centpercent">'."\n";
// Common attributes // Common attributes
include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
// Other attributes. Fields from hook formObjectOptions and Extrafields. // Other attributes. Fields from hook formObjectOptions and Extrafields.
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
print '</table>'; print '</table>';
print '</div>'; print '</div>';
@ -262,8 +262,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Buttons for actions // Buttons for actions
if ($action != 'presend' && $action != 'editline') { if ($action != 'presend' && $action != 'editline') {
print '<div class="tabsAction">'."\n"; print '<div class="tabsAction">'."\n";
$parameters=array(); $parameters = array();
$reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook)) if (empty($reshook))

View File

@ -355,10 +355,10 @@ else
$formconfirm = ''; $formconfirm = '';
// Confirm delete third party // Confirm delete warehouse
if ($action == 'delete') if ($action == 'delete')
{ {
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteAWarehouse"), $langs->trans("ConfirmDeleteWarehouse", $object->libelle), "confirm_delete", '', 0, 2); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteAWarehouse"), $langs->trans("ConfirmDeleteWarehouse", $object->label), "confirm_delete", '', 0, 2);
} }
// Call Hook formConfirm // Call Hook formConfirm
@ -389,10 +389,10 @@ else
print '<table class="border centpercent">'; print '<table class="border centpercent">';
// Parent entrepot // Parent entrepot
$e = new Entrepot($db); $parentwarehouse = new Entrepot($db);
if(!empty($object->fk_parent) && $e->fetch($object->fk_parent) > 0) { if(!empty($object->fk_parent) && $parentwarehouse->fetch($object->fk_parent) > 0) {
print '<tr><td>'.$langs->trans("ParentWarehouse").'</td><td>'; print '<tr><td>'.$langs->trans("ParentWarehouse").'</td><td>';
print $e->getNomUrl(3); print $parentwarehouse->getNomUrl(3);
print '</td></tr>'; print '</td></tr>';
} }
@ -668,7 +668,7 @@ else
print '<table class="border centpercent">'; print '<table class="border centpercent">';
// Ref // Ref
print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input name="libelle" size="20" value="'.$object->libelle.'"></td></tr>'; print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input name="libelle" size="20" value="'.$object->label.'"></td></tr>';
print '<tr><td>'.$langs->trans("LocationSummary").'</td><td><input name="lieu" size="40" value="'.$object->lieu.'"></td></tr>'; print '<tr><td>'.$langs->trans("LocationSummary").'</td><td><input name="lieu" size="40" value="'.$object->lieu.'"></td></tr>';

View File

@ -53,9 +53,13 @@ class Entrepot extends CommonObject
/** /**
* @var string Label * @var string Label
* @deprecated * @deprecated
* @see $label
*/ */
public $libelle; public $libelle;
/**
* @var string Label
*/
public $label; public $label;
/** /**
@ -64,6 +68,10 @@ class Entrepot extends CommonObject
public $description; public $description;
public $statut; public $statut;
/**
* @var string Place
*/
public $lieu; public $lieu;
/** /**
@ -82,11 +90,13 @@ class Entrepot extends CommonObject
public $town; public $town;
/** /**
* @var int ID * @var int ID of parent
*/ */
public $fk_parent; public $fk_parent;
// List of short language codes for status /**
* @var array List of short language codes for status
*/
public $statuts = array(); public $statuts = array();
/** /**

View File

@ -729,7 +729,7 @@ dol_fiche_end();
// Save // Save
print '<div class="center">'; print '<div class="center">';
print '<input type="submit" value="'.$langs->trans("Save").'" id="submitsave" class="button">'; print '<input type="submit" value="'.$langs->trans("Submit").'" id="submitsave" class="button">';
if (!empty($backtopage)) if (!empty($backtopage))
{ {
print ' &nbsp; &nbsp; <input type="submit" value="'.$langs->trans("Cancel").'" id="submitcancel" class="button">'; print ' &nbsp; &nbsp; <input type="submit" value="'.$langs->trans("Cancel").'" id="submitcancel" class="button">';

View File

@ -53,7 +53,6 @@ $extrafields = new ExtraFields($db);
$extrafields->fetch_name_optionals_label($object->table_element); $extrafields->fetch_name_optionals_label($object->table_element);
/* /*
* Actions * Actions
*/ */
@ -358,7 +357,7 @@ if ($action != "infos_success") {
$formticket->withfile = 2; $formticket->withfile = 2;
$formticket->action = 'create_ticket'; $formticket->action = 'create_ticket';
$formticket->param = array('returnurl' => $_SERVER['PHP_SELF']); $formticket->param = array('returnurl' => $_SERVER['PHP_SELF'].($conf->entity > 1 ? '?entity='.$conf->entity : ''));
if (empty($defaultref)) { if (empty($defaultref)) {
$defaultref = ''; $defaultref = '';

View File

@ -781,7 +781,7 @@ if ($resql)
print $reception->getNomUrl(1); print $reception->getNomUrl(1);
$filename = dol_sanitizeFileName($reception->ref); $filename = dol_sanitizeFileName($reception->ref);
$filedir = $conf->reception->dir_output.'/'.dol_sanitizeFileName($reception->ref); $filedir = $conf->reception->dir_output.'/'.dol_sanitizeFileName($reception->ref);
$urlsource = $_SERVER['PHP_SELF'].'?id='.$reception->rowid; $urlsource = $_SERVER['PHP_SELF'].'?id='.$reception->id;
print $formfile->getDocumentsLink($reception->element, $filename, $filedir); print $formfile->getDocumentsLink($reception->element, $filename, $filedir);
print "</td>\n"; print "</td>\n";

View File

@ -150,9 +150,7 @@ if ($result)
$newcardbutton=''; $newcardbutton='';
if (! empty($user->rights->salaries->write)) if (! empty($user->rights->salaries->write))
{ {
$newcardbutton='<a class="butActionNew" href="'.DOL_URL_ROOT.'/salaries/card.php?action=create"><span class="valignmiddle text-plus-circle">'.$langs->trans('NewSalaryPayment').'</span>'; $newcardbutton .= dolGetButtonTitle($langs->trans('NewSalaryPayment'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/salaries/card.php?action=create');
$newcardbutton.= '<span class="fa fa-plus-circle valignmiddle"></span>';
$newcardbutton.= '</a>';
} }
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'; print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
@ -234,14 +232,24 @@ if ($result)
// Ref // Ref
print "<td>".$salstatic->getNomUrl(1)."</td>\n"; print "<td>".$salstatic->getNomUrl(1)."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Employee // Employee
print "<td>".$userstatic->getNomUrl(1)."</td>\n"; print "<td>".$userstatic->getNomUrl(1)."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Label payment // Label payment
print "<td>".dol_trunc($obj->label, 40)."</td>\n"; print "<td>".dol_trunc($obj->label, 40)."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Date payment // Date payment
print '<td align="center">'.dol_print_date($db->jdate($obj->datep), 'day')."</td>\n"; print '<td align="center">'.dol_print_date($db->jdate($obj->datep), 'day')."</td>\n";
if (! $i) $totalarray['nbfield']++;
// Type // Type
print '<td>'.$langs->trans("PaymentTypeShort".$obj->payment_code).' '.$obj->num_payment.'</td>'; print '<td>'.$langs->trans("PaymentTypeShort".$obj->payment_code).' '.$obj->num_payment.'</td>';
if (! $i) $totalarray['nbfield']++;
// Account // Account
if (! empty($conf->banque->enabled)) if (! empty($conf->banque->enabled))
{ {
@ -267,22 +275,26 @@ if ($result)
} }
else print '&nbsp;'; else print '&nbsp;';
print '</td>'; print '</td>';
if (! $i) $totalarray['nbfield']++;
} }
// Amount
print '<td class="right">'.price($obj->amount).'</td>';
print '<td></td>';
print "</tr>\n";
$total = $total + $obj->amount; // Amount
print '<td class="nowrap right">'.price($obj->amount).'</td>';
if (! $i) $totalarray['nbfield']++;
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='totalttcfield';
$totalarray['val']['totalttcfield'] += $obj->amount;
print '<td></td>';
if (! $i) $totalarray['nbfield']++;
print "</tr>\n";
$i++; $i++;
} }
$colspan=5; // Show total line
if (! empty($conf->banque->enabled)) $colspan++; include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
print '<tr class="liste_total"><td colspan="'.$colspan.'" class="liste_total">'.$langs->trans("Total").'</td>';
print '<td class="liste_total right">'.price($total)."</td>";
print "<td></td></tr>";
print "</table>"; print "</table>";
print '</div>'; print '</div>';

View File

@ -111,11 +111,15 @@ if ($action == 'setvalue' && $user->admin)
// Payment token for URL // Payment token for URL
$result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN", GETPOST('PAYMENT_SECURITY_TOKEN', 'alpha'), 'chaine', 0, '', $conf->entity); $result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN", GETPOST('PAYMENT_SECURITY_TOKEN', 'alpha'), 'chaine', 0, '', $conf->entity);
if (!$result > 0) if (!$result > 0) {
$error++;
$result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN_UNIQUE", GETPOST('PAYMENT_SECURITY_TOKEN_UNIQUE', 'alpha'), 'chaine', 0, '', $conf->entity);
if (!$result > 0)
$error++; $error++;
}
if (empty($conf->use_javascript_ajax)) {
$result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN_UNIQUE", GETPOST('PAYMENT_SECURITY_TOKEN_UNIQUE', 'alpha'), 'chaine', 0, '', $conf->entity);
if (!$result > 0) {
$error++;
}
}
if (!$error) { if (!$error) {
$db->commit(); $db->commit();
@ -452,7 +456,7 @@ print '</table>';
dol_fiche_end(); dol_fiche_end();
print '<div class="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></div>'; print '<div class="center"><input type="submit" class="button" value="'.$langs->trans("Save").'"></div>';
print '</form>'; print '</form>';

View File

@ -405,7 +405,7 @@ class SupplierProposal extends CommonObject
*/ */
public function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $fk_product = 0, $remise_percent = 0, $price_base_type = 'HT', $pu_ttc = 0, $info_bits = 0, $type = 0, $rang = -1, $special_code = 0, $fk_parent_line = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $array_option = 0, $ref_supplier = '', $fk_unit = '', $origin = '', $origin_id = 0, $pu_ht_devise = 0, $date_start = 0, $date_end = 0) public function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $fk_product = 0, $remise_percent = 0, $price_base_type = 'HT', $pu_ttc = 0, $info_bits = 0, $type = 0, $rang = -1, $special_code = 0, $fk_parent_line = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $array_option = 0, $ref_supplier = '', $fk_unit = '', $origin = '', $origin_id = 0, $pu_ht_devise = 0, $date_start = 0, $date_end = 0)
{ {
global $mysoc, $conf; global $mysoc, $conf, $langs;
dol_syslog(get_class($this)."::addline supplier_proposalid=$this->id, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, fk_product=$fk_product, remise_except=$remise_percent, price_base_type=$price_base_type, pu_ttc=$pu_ttc, info_bits=$info_bits, type=$type"); dol_syslog(get_class($this)."::addline supplier_proposalid=$this->id, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, fk_product=$fk_product, remise_except=$remise_percent, price_base_type=$price_base_type, pu_ttc=$pu_ttc, info_bits=$info_bits, type=$type");
include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';

View File

@ -642,7 +642,7 @@ if ($resql)
print '</td>'; print '</td>';
// Warning // Warning
$warnornote = ''; $warnornote = '';
if ($obj->fk_statut == 1 && $db->jdate($obj->date_valid) < ($now - $conf->supplier_proposal->warning_delay)) $warnornote .= img_warning($langs->trans("Late")); //if ($obj->fk_statut == 1 && $db->jdate($obj->date_valid) < ($now - $conf->supplier_proposal->warning_delay)) $warnornote .= img_warning($langs->trans("Late"));
if (!empty($obj->note_private)) if (!empty($obj->note_private))
{ {
$warnornote .= ($warnornote ? ' ' : ''); $warnornote .= ($warnornote ? ' ' : '');

View File

@ -1,75 +0,0 @@
<?php
/* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2018 SuperAdmin
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file takepos/admin/about.php
* \ingroup takepos
* \brief About page of module TakePos.
*/
require '../../main.inc.php'; // Load $user and permissions
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
require_once '../lib/takepos.lib.php';
// Translations
$langs->loadLangs(array("errors","admin","cashdesk"));
// Access control
if (! $user->admin) {
accessforbidden();
}
// Parameters
$action = GETPOST('action', 'alpha');
$backtopage = GETPOST('backtopage', 'alpha');
/*
* Actions
*/
// None
/*
* View
*/
$form = new Form($db);
$page_name = "TakePosAbout";
llxHeader('', $langs->trans($page_name));
// Subheader
$linkback = '<a href="'.($backtopage?$backtopage:DOL_URL_ROOT.'/admin/modules.php').'">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans($page_name), $linkback, 'object_takepos@takepos');
// Configuration header
$head = takeposAdminPrepareHead();
dol_fiche_head($head, 'about', '', 0, 'takepos@takepos');
dol_include_once('/takepos/core/modules/modTakePos.class.php');
$tmpmodule = new modTakePos($db);
print $tmpmodule->getDescLong();
// Page end
dol_fiche_end();
llxFooter();
$db->close();

View File

@ -0,0 +1 @@

View File

@ -81,7 +81,10 @@ if (GETPOST('action', 'alpha') == 'set')
$res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "TAKEPOS_CUSTOM_RECEIPT", GETPOST('TAKEPOS_CUSTOM_RECEIPT', 'int'), 'int', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_CUSTOM_RECEIPT", GETPOST('TAKEPOS_CUSTOM_RECEIPT', 'int'), 'int', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity);
if (!empty($conf->global->TAKEPOS_ENABLE_SUMUP)) {
$res = dolibarr_set_const($db, "TAKEPOS_SUMUP_AFFILIATE", GETPOST('TAKEPOS_SUMUP_AFFILIATE', 'alpha'), 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "TAKEPOS_SUMUP_APPID", GETPOST('TAKEPOS_SUMUP_APPID', 'alpha'), 'chaine', 0, '', $conf->entity);
}
if ($conf->global->TAKEPOS_ORDER_NOTES == 1) if ($conf->global->TAKEPOS_ORDER_NOTES == 1)
{ {
$extrafields = new ExtraFields($db); $extrafields = new ExtraFields($db);
@ -241,6 +244,20 @@ print '<td colspan="2">';
print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1); print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1);
print "</td></tr>\n"; print "</td></tr>\n";
// Sumup options
if ($conf->global->TAKEPOS_ENABLE_SUMUP) {
print '<tr class="oddeven"><td>';
print $langs->trans("SumupAffiliate");
print '<td colspan="2">';
print '<input type="text" name="TAKEPOS_SUMUP_AFFILIATE" value="'.$conf->global->TAKEPOS_SUMUP_AFFILIATE.'"></input>';
print "</td></tr>\n";
print '<tr class="oddeven"><td>';
print $langs->trans("SumupAppId");
print '<td colspan="2">';
print '<input type="text" name="TAKEPOS_SUMUP_APPID" value="'.$conf->global->TAKEPOS_SUMUP_APPID.'"></input>';
print "</td></tr>\n";
}
// Custom Receipt // Custom Receipt
print '<tr class="oddeven"><td>'; print '<tr class="oddeven"><td>';
print $langs->trans('CustomReceipt'); print $langs->trans('CustomReceipt');
@ -254,17 +271,17 @@ print $langs->trans('EmailTemplate');
print '<td colspan="2">'; print '<td colspan="2">';
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
$formmail = new FormMail($db); $formmail = new FormMail($db);
$nboftemplates = $formmail->fetchAllEMailTemplate('facture_send', $user, null, -1); // We set lang=null to get in priority record with no lang $nboftemplates = $formmail->fetchAllEMailTemplate('facture_send', $user, null, -1); // We set lang=null to get in priority record with no lang
//$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, ''); //$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, '');
$arrayofmessagename=array(); $arrayofmessagename = array();
if (is_array($formmail->lines_model)) { if (is_array($formmail->lines_model)) {
foreach($formmail->lines_model as $modelmail) { foreach ($formmail->lines_model as $modelmail) {
//var_dump($modelmail); //var_dump($modelmail);
$moreonlabel=''; $moreonlabel = '';
if (! empty($arrayofmessagename[$modelmail->label])) { if (!empty($arrayofmessagename[$modelmail->label])) {
$moreonlabel=' <span class="opacitymedium">('.$langs->trans("SeveralLangugeVariatFound").')</span>'; $moreonlabel = ' <span class="opacitymedium">('.$langs->trans("SeveralLangugeVariatFound").')</span>';
} }
$arrayofmessagename[$modelmail->label]=$langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel; $arrayofmessagename[$modelmail->label] = $langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel;
} }
} }
//var_dump($arraydefaultmessage); //var_dump($arraydefaultmessage);

View File

@ -22,16 +22,16 @@
* \brief Setup page for TakePos module * \brief Setup page for TakePos module
*/ */
require '../../main.inc.php'; // Load $user and permissions require '../../main.inc.php'; // Load $user and permissions
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
require_once DOL_DOCUMENT_ROOT."/core/lib/takepos.lib.php"; require_once DOL_DOCUMENT_ROOT."/core/lib/takepos.lib.php";
$terminal=GETPOST('terminal', 'int'); $terminal = GETPOST('terminal', 'int');
// If socid provided by ajax company selector // If socid provided by ajax company selector
if (! empty($_REQUEST['CASHDESK_ID_THIRDPARTY'.$terminal.'_id'])) if (!empty($_REQUEST['CASHDESK_ID_THIRDPARTY'.$terminal.'_id']))
{ {
$_GET['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha'); $_GET['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha');
$_POST['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha'); $_POST['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha');
@ -46,9 +46,9 @@ $langs->loadLangs(array("admin", "cashdesk"));
global $db; global $db;
$sql = "SELECT code, libelle as label FROM ".MAIN_DB_PREFIX."c_paiement"; $sql = "SELECT code, libelle as label FROM ".MAIN_DB_PREFIX."c_paiement";
$sql.= " WHERE entity IN (".getEntity('c_paiement').")"; $sql .= " WHERE entity IN (".getEntity('c_paiement').")";
$sql.= " AND active = 1"; $sql .= " AND active = 1";
$sql.= " ORDER BY libelle"; $sql .= " ORDER BY libelle";
$resql = $db->query($sql); $resql = $db->query($sql);
$paiements = array(); $paiements = array();
if ($resql) { if ($resql) {
@ -67,16 +67,19 @@ $terminaltouse = $terminal;
if (GETPOST('action', 'alpha') == 'set') if (GETPOST('action', 'alpha') == 'set')
{ {
$db->begin(); $db->begin();
if (GETPOST('socid', 'int') < 0) $_POST["socid"]=''; if (GETPOST('socid', 'int') < 0) $_POST["socid"] = '';
$res = dolibarr_set_const($db, "CASHDESK_ID_THIRDPARTY".$terminaltouse, (GETPOST('socid', 'int') > 0 ? GETPOST('socid', 'int') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_THIRDPARTY".$terminaltouse, (GETPOST('socid', 'int') > 0 ? GETPOST('socid', 'int') : ''), 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CASH".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CASH".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CHEQUE".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CHEQUE".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CB".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CB".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
foreach($paiements as $modep) { if (!empty($conf->global->TAKEPOS_ENABLE_SUMUP)) {
$res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_SUMUP".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
}
foreach ($paiements as $modep) {
if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue;
$name="CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse; $name = "CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse;
$res = dolibarr_set_const($db, $name, (GETPOST($name, 'alpha') > 0 ? GETPOST($name, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, $name, (GETPOST($name, 'alpha') > 0 ? GETPOST($name, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
} }
$res = dolibarr_set_const($db, "CASHDESK_ID_WAREHOUSE".$terminaltouse, (GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "CASHDESK_ID_WAREHOUSE".$terminaltouse, (GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
@ -87,9 +90,9 @@ if (GETPOST('action', 'alpha') == 'set')
dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha')); dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha'));
if (! $res > 0) $error++; if (!$res > 0) $error++;
if (! $error) if (!$error)
{ {
$db->commit(); $db->commit();
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
@ -106,12 +109,12 @@ if (GETPOST('action', 'alpha') == 'set')
* View * View
*/ */
$form=new Form($db); $form = new Form($db);
$formproduct=new FormProduct($db); $formproduct = new FormProduct($db);
llxHeader('', $langs->trans("CashDeskSetup")); llxHeader('', $langs->trans("CashDeskSetup"));
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("CashDeskSetup").' (TakePOS)', $linkback, 'title_setup'); print load_fiche_titre($langs->trans("CashDeskSetup").' (TakePOS)', $linkback, 'title_setup');
$head = takepos_prepare_head(); $head = takepos_prepare_head();
dol_fiche_head($head, 'terminal'.$terminal, 'TakePOS', -1); dol_fiche_head($head, 'terminal'.$terminal, 'TakePOS', -1);
@ -119,7 +122,7 @@ print '<br>';
// Mode // Mode
print '<form action="'.$_SERVER["PHP_SELF"].'?terminal='.(empty($terminal)?1:$terminal).'" method="post">'; print '<form action="'.$_SERVER["PHP_SELF"].'?terminal='.(empty($terminal) ? 1 : $terminal).'" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set">'; print '<input type="hidden" name="action" value="set">';
@ -134,39 +137,46 @@ print $form->select_company($conf->global->{'CASHDESK_ID_THIRDPARTY'.$terminalto
print '</td></tr>'; print '</td></tr>';
$atleastonefound = 0; $atleastonefound = 0;
if (! empty($conf->banque->enabled)) if (!empty($conf->banque->enabled))
{ {
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSell").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSell").'</td>';
print '<td>'; print '<td>';
$form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 0, "courant=2", 1); $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 0, "courant=2", 1);
if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse})) $atleastonefound++; if (!empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse})) $atleastonefound++;
print '</td></tr>'; print '</td></tr>';
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCheque").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCheque").'</td>';
print '<td>'; print '<td>';
$form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 0, "courant=1", 1); $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 0, "courant=1", 1);
if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse})) $atleastonefound++; if (!empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse})) $atleastonefound++;
print '</td></tr>'; print '</td></tr>';
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCB").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCB").'</td>';
print '<td>'; print '<td>';
$form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 0, "courant=1", 1); $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 0, "courant=1", 1);
if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse})) $atleastonefound++; if (!empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse})) $atleastonefound++;
print '</td></tr>'; print '</td></tr>';
if ($conf->global->TAKEPOS_ENABLE_SUMUP) {
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSumup").'</td>';
print '<td>';
$form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 0, "courant=1", 1);
if (!empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse})) $atleastonefound++;
print '</td></tr>';
}
foreach($paiements as $modep) { foreach ($paiements as $modep) {
if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; // Already managed before if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; // Already managed before
$name="CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse; $name = "CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse;
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->label).'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->label).'</td>';
print '<td>'; print '<td>';
if (! empty($conf->global->$name)) $atleastonefound++; if (!empty($conf->global->$name)) $atleastonefound++;
$cour=preg_match('/^LIQ.*/', $modep->code)?2:1; $cour = preg_match('/^LIQ.*/', $modep->code) ? 2 : 1;
$form->select_comptes($conf->global->$name, $name, 0, "courant=".$cour, 1); $form->select_comptes($conf->global->$name, $name, 0, "courant=".$cour, 1);
print '</td></tr>'; print '</td></tr>';
} }
} }
if (! empty($conf->stock->enabled)) if (!empty($conf->stock->enabled))
{ {
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskDoNotDecreaseStock").'</td>'; // Force warehouse (this is not a default value) print '<tr class="oddeven"><td>'.$langs->trans("CashDeskDoNotDecreaseStock").'</td>'; // Force warehouse (this is not a default value)
print '<td>'; print '<td>';
if (empty($conf->productbatch->enabled)) { if (empty($conf->productbatch->enabled)) {
print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1); print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1);
@ -181,12 +191,12 @@ if (! empty($conf->stock->enabled))
} }
print '</td></tr>'; print '</td></tr>';
$disabled=$conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}; $disabled = $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal};
print '<tr class="oddeven"><td>'.$langs->trans("CashDeskIdWareHouse").'</td>'; // Force warehouse (this is not a default value) print '<tr class="oddeven"><td>'.$langs->trans("CashDeskIdWareHouse").'</td>'; // Force warehouse (this is not a default value)
print '<td>'; print '<td>';
if (! $disabled) if (!$disabled)
{ {
print $formproduct->selectWarehouses($conf->global->{'CASHDESK_ID_WAREHOUSE'.$terminal}, 'CASHDESK_ID_WAREHOUSE'.$terminal, '', 1, $disabled); print $formproduct->selectWarehouses($conf->global->{'CASHDESK_ID_WAREHOUSE'.$terminal}, 'CASHDESK_ID_WAREHOUSE'.$terminal, '', 1, $disabled);
print ' <a href="'.DOL_URL_ROOT.'/product/stock/card.php?action=create&backtopage='.urlencode($_SERVER["PHP_SELF"]).'">('.$langs->trans("Create").')</a>'; print ' <a href="'.DOL_URL_ROOT.'/product/stock/card.php?action=create&backtopage='.urlencode($_SERVER["PHP_SELF"]).'">('.$langs->trans("Create").')</a>';
@ -207,7 +217,7 @@ if (! empty($conf->stock->enabled))
} }
print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalPrinterToUse").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalPrinterToUse").'</td>';
print '<td>'; print '<td>';
print $form->selectarray('TAKEPOS_PRINTER_TO_USE'.$terminal, $printers, (empty($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal})?'0':$conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal}), 1); print $form->selectarray('TAKEPOS_PRINTER_TO_USE'.$terminal, $printers, (empty($conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal}) ? '0' : $conf->global->{'TAKEPOS_PRINTER_TO_USE'.$terminal}), 1);
print '</td></tr>'; print '</td></tr>';
$printer->listPrintersTemplates(); $printer->listPrintersTemplates();
$templates = array(); $templates = array();
@ -216,18 +226,18 @@ if (! empty($conf->stock->enabled))
} }
print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalTemplateToUseForInvoicesTicket").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalTemplateToUseForInvoicesTicket").'</td>';
print '<td>'; print '<td>';
print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal})?'0':$conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}), 1); print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}) ? '0' : $conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal}), 1);
print '</td></tr>'; print '</td></tr>';
print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalTemplateToUseForOrdersTicket").'</td>'; print '<tr class="oddeven"><td>'.$langs->trans("TakeposTerminalTemplateToUseForOrdersTicket").'</td>';
print '<td>'; print '<td>';
print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal})?'0':$conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal}), 1); print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal, $templates, (empty($conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal}) ? '0' : $conf->global->{'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal}), 1);
print '</td></tr>'; print '</td></tr>';
} }
} }
print '</table>'; print '</table>';
if ($atleastonefound == 0 && ! empty($conf->banque->enabled)) if ($atleastonefound == 0 && !empty($conf->banque->enabled))
{ {
print info_admin($langs->trans("AtLeastOneDefaultBankAccountMandatory"), 0, 0, 'error'); print info_admin($langs->trans("AtLeastOneDefaultBankAccountMandatory"), 0, 0, 'error');
} }

View File

@ -1,60 +0,0 @@
<?php
/* Copyright (C) 2018 SuperAdmin
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file takepos/lib/takepos.lib.php
* \ingroup takepos
* \brief Library files with common functions for TakePos
*/
/**
* Prepare admin pages header
*
* @return array
*/
function takeposAdminPrepareHead()
{
global $langs, $conf;
$langs->load("cashdesk");
$h = 0;
$head = array();
$head[$h][0] = dol_buildpath("/takepos/admin/setup.php", 1);
$head[$h][1] = $langs->trans("Settings");
$head[$h][2] = 'settings';
$h++;
$head[$h][0] = dol_buildpath("/takepos/admin/about.php", 1);
$head[$h][1] = $langs->trans("About");
$head[$h][2] = 'about';
$h++;
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
//$this->tabs = array(
// 'entity:+tabname:Title:@takepos:/takepos/mypage.php?id=__ID__'
//); // to add new tab
//$this->tabs = array(
// 'entity:-tabname:Title:@takepos:/takepos/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos');
complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos', 'remove');
return $head;
}

View File

@ -25,16 +25,16 @@
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Not disabled cause need to load personalized language //if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Not disabled cause need to load personalized language
//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); //if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1');
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); //if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1');
if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); if (!defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1');
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); if (!defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1');
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); if (!defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1');
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); if (!defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1');
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); if (!defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1');
require '../main.inc.php'; // Load $user and permissions require '../main.inc.php'; // Load $user and permissions
require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant $place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant
$invoiceid = GETPOST('invoiceid', 'int'); $invoiceid = GETPOST('invoiceid', 'int');
@ -50,16 +50,16 @@ if ($invoiceid > 0)
} }
else else
{ {
$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'"; $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
$resql = $db->query($sql); $resql = $db->query($sql);
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if ($obj) if ($obj)
{ {
$invoiceid = $obj->rowid; $invoiceid = $obj->rowid;
} }
if (! $invoiceid) if (!$invoiceid)
{ {
$invoiceid=0; // Invoice does not exist yet $invoiceid = 0; // Invoice does not exist yet
} }
else else
{ {
@ -84,8 +84,8 @@ if ($resql) {
if ($paycode == 'CB') $paycode = 'CB'; if ($paycode == 'CB') $paycode = 'CB';
if ($paycode == 'CHQ') $paycode = 'CHEQUE'; if ($paycode == 'CHQ') $paycode = 'CHEQUE';
$accountname="CASHDESK_ID_BANKACCOUNT_".$paycode.$_SESSION["takeposterminal"]; $accountname = "CASHDESK_ID_BANKACCOUNT_".$paycode.$_SESSION["takeposterminal"];
if (! empty($conf->global->$accountname) && $conf->global->$accountname > 0) array_push($paiements, $obj); if (!empty($conf->global->$accountname) && $conf->global->$accountname > 0) array_push($paiements, $obj);
} }
} }
?> ?>
@ -171,21 +171,50 @@ else print "var received=0;";
amountpayed = <?php echo $invoice->total_ttc; ?>; amountpayed = <?php echo $invoice->total_ttc; ?>;
} }
console.log("We click on the payment mode to pay amount = "+amountpayed); console.log("We click on the payment mode to pay amount = "+amountpayed);
parent.$("#poslines").load("invoice.php?place=<?php echo $place;?>&action=valid&pay="+payment+"&amount="+amountpayed+"&invoiceid="+invoiceid, function() { parent.$("#poslines").load("invoice.php?place=<?php echo $place; ?>&action=valid&pay="+payment+"&amount="+amountpayed+"&invoiceid="+invoiceid, function() {
if (amountpayed > <?php echo $remaintopay; ?> || amountpayed == <?php echo $remaintopay; ?> || amountpayed==0 ) parent.$.colorbox.close(); if (amountpayed > <?php echo $remaintopay; ?> || amountpayed == <?php echo $remaintopay; ?> || amountpayed==0 ) parent.$.colorbox.close();
else location.reload(); else location.reload();
}); });
} }
function ValidateSumup() {
<?php $_SESSION['SMP_CURRENT_PAYMENT'] = "NEW" ?>
var invoiceid = <?php echo($invoiceid > 0 ? $invoiceid : 0); ?>;
var amountpayed = $("#change1").val();
if (amountpayed > <?php echo $invoice->total_ttc; ?>) {
amountpayed = <?php echo $invoice->total_ttc; ?>;
}
// Starting sumup app
window.open('sumupmerchant://pay/1.0?affiliate-key=<?php echo dolibarr_get_const($db, "TAKEPOS_SUMUP_AFFILIATE")?>&app-id=<?php echo dolibarr_get_const($db, "TAKEPOS_SUMUP_APPID")?>&total=' + amountpayed + '&currency=EUR&title=' + invoiceid + '&callback=<?php echo DOL_MAIN_URL_ROOT ?>/takepos/smpcb.php');
var loop = window.setInterval(function () {
$.ajax('/takepos/smpcb.php?status').done(function (data) {
console.log(data);
if (data === "SUCCESS") {
parent.$("#poslines").load("invoice.php?place=<?php echo $place; ?>&action=valid&pay=CB&amount=" + amountpayed + "&invoiceid=" + invoiceid, function () {
//parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight);
parent.$.colorbox.close();
//parent.setFocusOnSearchField(); // This does not have effect
});
clearInterval(loop);
} else if (data === "FAILED") {
parent.$.colorbox.close();
clearInterval(loop);
}
});
}, 2500);
}
</script> </script>
<div style="position:absolute; top:2%; left:5%; height:30%; width:91%;"> <div style="position:absolute; top:2%; left:5%; height:30%; width:91%;">
<center> <center>
<div class="paymentbordline paymentbordlinetotal"> <div class="paymentbordline paymentbordlinetotal">
<center><span style='font-family: verdana,arial,helvetica; font-size: 200%;'><font color="white"><?php echo $langs->trans('TotalTTC');?>: </font><span id="totaldisplay" class="colorwhite"><?php echo price($invoice->total_ttc, 1, '', 1, -1, -1) ?></span></font></span></center> <center><span style='font-family: verdana,arial,helvetica; font-size: 200%;'><font color="white"><?php echo $langs->trans('TotalTTC'); ?>: </font><span id="totaldisplay" class="colorwhite"><?php echo price($invoice->total_ttc, 1, '', 1, -1, -1) ?></span></font></span></center>
</div> </div>
<?php if ($remaintopay != $invoice->total_ttc) { ?> <?php if ($remaintopay != $invoice->total_ttc) { ?>
<div class="paymentbordline paymentbordlineremain"> <div class="paymentbordline paymentbordlineremain">
<center><span style='font-family: verdana,arial,helvetica; font-size: 200%;'><font color="white"><?php echo $langs->trans('RemainToPay');?>: </font><span id="remaintopaydisplay" class="colorwhite"><?php echo price($remaintopay, 1, '', 1, -1, -1) ?></span></font></span></center> <center><span style='font-family: verdana,arial,helvetica; font-size: 200%;'><font color="white"><?php echo $langs->trans('RemainToPay'); ?>: </font><span id="remaintopaydisplay" class="colorwhite"><?php echo price($remaintopay, 1, '', 1, -1, -1) ?></span></font></span></center>
</div> </div>
<?php } ?> <?php } ?>
<div class="paymentbordline paymentbordlinereceived"> <div class="paymentbordline paymentbordlinereceived">
@ -241,11 +270,11 @@ $numpad = $conf->global->TAKEPOS_NUMPAD;
<?php } else { <?php } else {
$button = array_pop($action_buttons); $button = array_pop($action_buttons);
?> ?>
<button type="button" class="calcbutton2" onclick="<?php echo $button["function"];?>"><span <?php echo $button["span"];?>><?php echo $button["text"];?></span></button> <button type="button" class="calcbutton2" onclick="<?php echo $button["function"]; ?>"><span <?php echo $button["span"]; ?>><?php echo $button["text"]; ?></span></button>
<?php } ?> <?php } ?>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "1"; else print "0.10";?>);"><?php if ($numpad==0) print "1"; else print "0.10";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "1"; else print "0.10"; ?>);"><?php if ($numpad == 0) print "1"; else print "0.10"; ?></button>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "2"; else print "0.20";?>);"><?php if ($numpad==0) print "2"; else print "0.20";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "2"; else print "0.20"; ?>);"><?php if ($numpad == 0) print "2"; else print "0.20"; ?></button>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "3"; else print "0.50";?>);"><?php if ($numpad==0) print "3"; else print "0.50";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "3"; else print "0.50"; ?>);"><?php if ($numpad == 0) print "3"; else print "0.50"; ?></button>
<?php if (count($paiements) > 2) { <?php if (count($paiements) > 2) {
$paycode = $paiements[2]->code; $paycode = $paiements[2]->code;
if ($paycode == 'LIQ') $paycode = 'cash'; if ($paycode == 'LIQ') $paycode = 'cash';
@ -256,24 +285,31 @@ $numpad = $conf->global->TAKEPOS_NUMPAD;
<?php } else { <?php } else {
$button = array_pop($action_buttons); $button = array_pop($action_buttons);
?> ?>
<button type="button" class="calcbutton2" onclick="<?php echo $button["function"];?>"><span <?php echo $button["span"];?>><?php echo $button["text"];?></span></button> <button type="button" class="calcbutton2" onclick="<?php echo $button["function"]; ?>"><span <?php echo $button["span"]; ?>><?php echo $button["text"]; ?></span></button>
<?php } ?> <?php } ?>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "0"; else print "0.01";?>);"><?php if ($numpad==0) print "0"; else print "0.01";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "0"; else print "0.01"; ?>);"><?php if ($numpad == 0) print "0"; else print "0.01"; ?></button>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "'000'"; else print "0.02";?>);"><?php if ($numpad==0) print "000"; else print "0.02";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "'000'"; else print "0.02"; ?>);"><?php if ($numpad == 0) print "000"; else print "0.02"; ?></button>
<button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad==0) print "'.'"; else print "0.05";?>);"><?php if ($numpad==0) print "."; else print "0.05";?></button> <button type="button" class="calcbutton" onclick="addreceived(<?php if ($numpad == 0) print "'.'"; else print "0.05"; ?>);"><?php if ($numpad == 0) print "."; else print "0.05"; ?></button>
<?php <?php
$i=3; $i = 3;
while($i < count($paiements)){ while ($i < count($paiements)) {
?> ?>
<button type="button" class="calcbutton2" onclick="Validate('<?php echo $langs->trans($paiements[$i]->code); ?>');"><?php echo $langs->trans("PaymentTypeShort".$paiements[$i]->code); ?></button> <button type="button" class="calcbutton2" onclick="Validate('<?php echo $langs->trans($paiements[$i]->code); ?>');"><?php echo $langs->trans("PaymentTypeShort".$paiements[$i]->code); ?></button>
<?php <?php
$i=$i+1; $i = $i + 1;
} }
$class=($i==3)?"calcbutton3":"calcbutton2";
foreach($action_buttons as $button){ if ($conf->global->TAKEPOS_ENABLE_SUMUP && !empty(dolibarr_get_const($db, "CASHDESK_ID_BANKACCOUNT_SUMUP".$_SESSION["takeposterminal"]))) {
$newclass = $class.($button["class"]?" ".$button["class"]:""); ?>
<button type="button" class="calcbutton2" onclick="ValidateSumup();">Sumup</button>
<?php
}
$class = ($i == 3) ? "calcbutton3" : "calcbutton2";
foreach ($action_buttons as $button) {
$newclass = $class.($button["class"] ? " ".$button["class"] : "");
?> ?>
<button type="button" class="<?php echo $newclass;?>" onclick="<?php echo $button["function"];?>"><span <?php echo $button["span"];?>><?php echo $button["text"];?></span></button> <button type="button" class="<?php echo $newclass; ?>" onclick="<?php echo $button["function"]; ?>"><span <?php echo $button["span"]; ?>><?php echo $button["text"]; ?></span></button>
<?php <?php
} }
?> ?>

35
htdocs/takepos/smpcb.php Normal file
View File

@ -0,0 +1,35 @@
<?php
require '../main.inc.php';
if (isset($_GET['status'])) {
die(strtoupper($_SESSION['SMP_CURRENT_PAYMENT']));
}
if ($_GET['smp-status']) {
print '<html lang="en">
<head>
<meta charset="utf-8">
<title>The HTML5 Herald</title>
<meta name="description" content="The HTML5 Herald">
<meta name="author" content="SitePoint">
<link rel="stylesheet" href="css/styles.css?v=1.0">
</head>
<body>';
$_SESSION['SMP_CURRENT_PAYMENT'] = $_GET['smp-status'];
print '<script type="application/javascript">
window.onload = function() {
window.close();
};
</script>';
print "Transaction status registered, you can close this";
die('</body></html>');
}
print 'NOOP';

View File

@ -2127,7 +2127,7 @@ form#login {
border-radius: 4px; border-radius: 4px;
border:solid 1px rgba(80,80,80,.4); border:solid 1px rgba(80,80,80,.4);
border-top:solid 1px f8f8f8; border-top:solid 1px #f8f8f8;
} }
.login_table input#username, .login_table input#password, .login_table input#securitycode{ .login_table input#username, .login_table input#password, .login_table input#securitycode{
border: none; border: none;

View File

@ -364,6 +364,116 @@ class Users extends DolibarrApi
return 1; return 1;
} }
/**
* List Groups
*
* Return an array with a list of Groups
*
* @url GET /groups
*
* @param string $sortfield Sort field
* @param string $sortorder Sort order
* @param int $limit Limit for list
* @param int $page Page number
* @param string $group_ids Groups ids filter field. Example: '1' or '1,2,3' {@pattern /^[0-9,]*$/i}
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
* @return array Array of User objects
*/
public function listGroups($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $group_ids = 0, $sqlfilters = '')
{
global $db, $conf;
$obj_ret = array();
if (!DolibarrApiAccess::$user->rights->user->group_advance->read) {
throw new RestException(401, "You are not allowed to read list of groups");
}
// case of external user, $societe param is ignored and replaced by user's socid
//$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $societe;
$sql = "SELECT t.rowid";
$sql .= " FROM ".MAIN_DB_PREFIX."usergroup as t";
$sql .= ' WHERE t.entity IN ('.getEntity('user').')';
if ($group_ids) $sql .= " AND t.rowid IN (".$group_ids.")";
// Add sql filters
if ($sqlfilters)
{
if (!DolibarrApi::_checkFilters($sqlfilters))
{
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
}
$regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
$sql .= " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
}
$sql .= $db->order($sortfield, $sortorder);
if ($limit) {
if ($page < 0)
{
$page = 0;
}
$offset = $limit * $page;
$sql .= $db->plimit($limit + 1, $offset);
}
$result = $db->query($sql);
if ($result)
{
$i = 0;
$num = $db->num_rows($result);
$min = min($num, ($limit <= 0 ? $num : $limit));
while ($i < $min)
{
$obj = $db->fetch_object($result);
$group_static = new UserGroup($this->db);
if ($group_static->fetch($obj->rowid)) {
$obj_ret[] = $this->_cleanObjectDatas($group_static);
}
$i++;
}
}
else {
throw new RestException(503, 'Error when retrieve Group list : '.$db->lasterror());
}
if (!count($obj_ret)) {
throw new RestException(404, 'No Group found');
}
return $obj_ret;
}
/**
* Get properties of an group object
*
* Return an array with group informations
*
* @url GET /groups/{group}
*
* @param int $group ID of group
* @param int $load_members Load members list or not {@min 0} {@max 1}
* @return array Array of User objects
*/
public function infoGroups($group, $load_members = 0)
{
global $db, $conf;
if (!DolibarrApiAccess::$user->rights->user->group_advance->read) {
throw new RestException(401, "You are not allowed to read groups");
}
$group_static = new UserGroup($this->db);
$result = $group_static->fetch($group, '', $load_members);
if (!$result)
{
throw new RestException(404, 'Group not found');
}
return $this->_cleanObjectDatas($group_static);
}
/** /**
* Delete account * Delete account
* *

View File

@ -174,9 +174,10 @@ class ProductAttribute
/** /**
* Deletes a product attribute * Deletes a product attribute
* *
* @return int <0 KO, >0 OK * @param User $user Object user
* @return int <0 KO, >0 OK
*/ */
public function delete() public function delete($user = null)
{ {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_attribute WHERE rowid = ".(int) $this->id; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_attribute WHERE rowid = ".(int) $this->id;

View File

@ -400,7 +400,7 @@ if (! empty($id) || ! empty($ref))
} }
} }
$listofvariantselected .= '</div>'; $listofvariantselected .= '</div>';
//print dol_fiche_end(); //dol_fiche_end();
} else { } else {
$title = $langs->trans('EditProductCombination'); $title = $langs->trans('EditProductCombination');
} }
@ -612,7 +612,7 @@ if (! empty($id) || ! empty($ref))
print '</table>'; print '</table>';
} }
print dol_fiche_end(); dol_fiche_end();
?> ?>
<div style="text-align: center"> <div style="text-align: center">

View File

@ -825,14 +825,26 @@ if ($action == 'addcontainer')
if (!$error) if (!$error)
{ {
$res = $objectpage->create($user); $pageid = $objectpage->create($user);
if ($res <= 0) if ($pageid <= 0) {
{
$error++; $error++;
setEventMessages($objectpage->error, $objectpage->errors, 'errors'); setEventMessages($objectpage->error, $objectpage->errors, 'errors');
$action = 'createcontainer'; $action = 'createcontainer';
} }
else {
// If there is no home page yet, this new page will be set as the home page
if (empty($object->fk_default_home)) {
$object->fk_default_home = $pageid;
$res = $object->update($user);
if ($res <= 0)
{
$error++;
setEventMessages($object->error, $object->errors, 'errors');
}
}
}
} }
if (!$error) if (!$error)
{ {
if (!empty($objectpage->content)) if (!empty($objectpage->content))
@ -2891,7 +2903,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
print '<br>'; print '<br>';
if (!empty($conf->use_javascript_ajax)) print '<input type="radio" name="radiocreatefrom" id="checkboxcreatefromfetching" value="checkboxcreatefromfetching"'.(GETPOST('radiocreatefrom') == 'checkboxcreatefromfetching' ? ' checked' : '').'> '; if (!empty($conf->use_javascript_ajax)) print '<input type="radio" name="radiocreatefrom" id="checkboxcreatefromfetching" value="checkboxcreatefromfetching"'.(GETPOST('radiocreatefrom') == 'checkboxcreatefromfetching' ? ' checked' : '').'> ';
print '<label for="checkboxcreatefromfetching"><span class="opacitymedium">'.$langs->trans("CreateByFetchingExternalPage").'</span></label><br>'; print '<label for="checkboxcreatefromfetching"><span class="opacitymediumxx">'.$langs->trans("CreateByFetchingExternalPage").'</span></label><br>';
print '<hr class="tablecheckboxcreatefromfetching'.$hiddenfromfetchingafterload.'">'; print '<hr class="tablecheckboxcreatefromfetching'.$hiddenfromfetchingafterload.'">';
print '<table class="tableforfield centpercent tablecheckboxcreatefromfetching'.$hiddenfromfetchingafterload.'">'; print '<table class="tableforfield centpercent tablecheckboxcreatefromfetching'.$hiddenfromfetchingafterload.'">';
print '<tr><td class="titlefield">'; print '<tr><td class="titlefield">';
@ -2912,7 +2924,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
print '<br>'; print '<br>';
if (!empty($conf->use_javascript_ajax)) print '<input type="radio" name="radiocreatefrom" id="checkboxcreatemanually" value="checkboxcreatemanually"'.(GETPOST('radiocreatefrom') == 'checkboxcreatemanually' ? ' checked' : '').'> '; if (!empty($conf->use_javascript_ajax)) print '<input type="radio" name="radiocreatefrom" id="checkboxcreatemanually" value="checkboxcreatemanually"'.(GETPOST('radiocreatefrom') == 'checkboxcreatemanually' ? ' checked' : '').'> ';
print '<label for="checkboxcreatemanually"><span class="opacitymedium">'.$langs->trans("OrEnterPageInfoManually").'</span></label><br>'; print '<label for="checkboxcreatemanually"><span class="opacitymediumxx">'.$langs->trans("OrEnterPageInfoManually").'</span></label><br>';
print '<hr class="tablecheckboxcreatemanually'.$hiddenmanuallyafterload.'">'; print '<hr class="tablecheckboxcreatemanually'.$hiddenmanuallyafterload.'">';
} }
@ -3015,7 +3027,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
print '<tr><td>'; print '<tr><td>';
print $langs->trans('Language'); print $langs->trans('Language');
print '</td><td>'; print '</td><td>';
print $formadmin->select_language($pagelang ? $pagelang : $langs->defaultlang, 'WEBSITE_LANG', 0, null, '1'); print $formadmin->select_language($pagelang ? $pagelang : $langs->defaultlang, 'WEBSITE_LANG', 0, null, '1', 0, 0, 'minwidth200');
print '</td></tr>'; print '</td></tr>';
// Translation of // Translation of

View File

@ -45,32 +45,32 @@ dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array("mymodule@mymodule","other")); $langs->loadLangs(array("mymodule@mymodule", "other"));
// Get parameters // Get parameters
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha'); $ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'alpha'); $action = GETPOST('action', 'alpha');
$cancel = GETPOST('cancel', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09');
$backtopage = GETPOST('backtopage', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha');
if (GETPOST('actioncode', 'array')) if (GETPOST('actioncode', 'array'))
{ {
$actioncode=GETPOST('actioncode', 'array', 3); $actioncode = GETPOST('actioncode', 'array', 3);
if (! count($actioncode)) $actioncode='0'; if (!count($actioncode)) $actioncode = '0';
} }
else else
{ {
$actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
} }
$search_agenda_label=GETPOST('search_agenda_label'); $search_agenda_label = GETPOST('search_agenda_label');
// Security check - Protection if external user // Security check - Protection if external user
//if ($user->socid > 0) accessforbidden(); //if ($user->socid > 0) accessforbidden();
//if ($user->socid > 0) $socid = $user->socid; //if ($user->socid > 0) $socid = $user->socid;
//$result = restrictedArea($user, 'mymodule', $id); //$result = restrictedArea($user, 'mymodule', $id);
$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
$sortfield = GETPOST("sortfield", 'alpha'); $sortfield = GETPOST("sortfield", 'alpha');
$sortorder = GETPOST("sortorder", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha');
$page = GETPOST("page", 'int'); $page = GETPOST("page", 'int');