Passed
Push — master ( 3cffbe...0f9140 )
by Alxarafe
23:50
created
Views/LoginView.php 1 patch
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
     public function draw()
62 62
     {
63 63
         header('Cache-Control: Public, must-revalidate');
64
-        header("Content-type: text/html; charset=" . Globals::$conf->file->character_set_client);
64
+        header("Content-type: text/html; charset=".Globals::$conf->file->character_set_client);
65 65
 
66 66
         // Need global variable $title to be defined by caller (like dol_loginfunction)
67 67
         // Caller can also set 	$morelogincontent = array(['options']=>array('js'=>..., 'table'=>...);
@@ -93,9 +93,9 @@  discard block
 block discarded – undo
93 93
         }
94 94
 
95 95
         $php_self = AlDolUtils::dol_escape_htmltag($_SERVER['PHP_SELF']);
96
-        $php_self .= AlDolUtils::dol_escape_htmltag($_SERVER["QUERY_STRING"]) ? '?' . AlDolUtils::dol_escape_htmltag($_SERVER["QUERY_STRING"]) : '';
96
+        $php_self .= AlDolUtils::dol_escape_htmltag($_SERVER["QUERY_STRING"]) ? '?'.AlDolUtils::dol_escape_htmltag($_SERVER["QUERY_STRING"]) : '';
97 97
         if (!preg_match('/mainmenu=/', $php_self)) {
98
-            $php_self .= (preg_match('/\?/', $php_self) ? '&' : '?') . 'mainmenu=home';
98
+            $php_self .= (preg_match('/\?/', $php_self) ? '&' : '?').'mainmenu=home';
99 99
         }
100 100
 
101 101
         $this->url = $php_self;
@@ -109,28 +109,28 @@  discard block
 block discarded – undo
109 109
           );
110 110
          */
111 111
         $arrayofjs = array(
112
-            DOL_BASE_URI . '/includes/jstz/jstz.min.js' . (empty(Globals::$conf->dol_use_jmobile) ? '' : '?version=' . urlencode(DOL_VERSION)),
113
-        DOL_BASE_URI . '/core/js/dst.js' . (empty(Globals::$conf->dol_use_jmobile) ? '' : '?version=' . urlencode(DOL_VERSION))
112
+            DOL_BASE_URI.'/includes/jstz/jstz.min.js'.(empty(Globals::$conf->dol_use_jmobile) ? '' : '?version='.urlencode(DOL_VERSION)),
113
+        DOL_BASE_URI.'/core/js/dst.js'.(empty(Globals::$conf->dol_use_jmobile) ? '' : '?version='.urlencode(DOL_VERSION))
114 114
         );
115 115
 
116 116
         // $titletruedolibarrversion is defined by dol_loginfunction in security2.lib.php.
117 117
         // We must keep the @, some tools use it to know it is login page and find true dolibarr version.
118 118
         // $titleofloginpage = Globals::$langs->trans('Login') . ' @ ' . $titletruedolibarrversion;
119
-        $titleofloginpage = Globals::$langs->trans('Login') . ' @ ' . DOL_VERSION;
119
+        $titleofloginpage = Globals::$langs->trans('Login').' @ '.DOL_VERSION;
120 120
 
121 121
         $disablenofollow = 1;
122
-        if (!preg_match('/' . constant('DOL_APPLICATION_TITLE') . '/', $this->title)) {
122
+        if (!preg_match('/'.constant('DOL_APPLICATION_TITLE').'/', $this->title)) {
123 123
             $disablenofollow = 0;
124 124
         }
125 125
 
126 126
         print $this->top_htmlhead('', $titleofloginpage, 0, 0, $arrayofjs, array(), 0, $disablenofollow);
127 127
 
128 128
 
129
-        $colorbackhmenu1 = '60,70,100';      // topmenu
129
+        $colorbackhmenu1 = '60,70,100'; // topmenu
130 130
         if (!isset(Globals::$conf->global->THEME_ELDY_TOPMENU_BACK1)) {
131 131
             Globals::$conf->global->THEME_ELDY_TOPMENU_BACK1 = $colorbackhmenu1;
132 132
         }
133 133
         $colorbackhmenu1 = empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED) ? (empty(Globals::$conf->global->THEME_ELDY_TOPMENU_BACK1) ? $colorbackhmenu1 : Globals::$conf->global->THEME_ELDY_TOPMENU_BACK1) : (empty($user->conf->THEME_ELDY_TOPMENU_BACK1) ? $colorbackhmenu1 : $user->conf->THEME_ELDY_TOPMENU_BACK1);
134
-        $colorbackhmenu1 = join(',', AlDolUtils2::colorStringToArray($colorbackhmenu1));    // Normalize value to 'x,y,z'
134
+        $colorbackhmenu1 = join(',', AlDolUtils2::colorStringToArray($colorbackhmenu1)); // Normalize value to 'x,y,z'
135 135
     }
136 136
 }
Please login to merge, or discard this patch.
Views/CategoriesView.php 1 patch
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -70,21 +70,21 @@  discard block
 block discarded – undo
70 70
             if ($action == 'create' || filter_input(INPUT_POST, "addcat") == 'addcat') {
71 71
                 AlDolUtils::dol_set_focus('#label');
72 72
 
73
-                print '<form action="' . $_SERVER['PHP_SELF'] . '?type=' . $type . '" method="POST">';
74
-                print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
75
-                print '<input type="hidden" name="urlfrom" value="' . $urlfrom . '">';
73
+                print '<form action="'.$_SERVER['PHP_SELF'].'?type='.$type.'" method="POST">';
74
+                print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
75
+                print '<input type="hidden" name="urlfrom" value="'.$urlfrom.'">';
76 76
                 print '<input type="hidden" name="action" value="add">';
77 77
                 print '<input type="hidden" name="addcat" value="addcat">';
78
-                print '<input type="hidden" name="id" value="' . AlDolUtils::GETPOST('origin', 'alpha') . '">';
79
-                print '<input type="hidden" name="type" value="' . $type . '">';
80
-                print '<input type="hidden" name="backtopage" value="' . $backtopage . '">';
78
+                print '<input type="hidden" name="id" value="'.AlDolUtils::GETPOST('origin', 'alpha').'">';
79
+                print '<input type="hidden" name="type" value="'.$type.'">';
80
+                print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
81 81
                 if ($origin)
82 82
                 {
83
-                    print '<input type="hidden" name="origin" value="' . $origin . '">';
83
+                    print '<input type="hidden" name="origin" value="'.$origin.'">';
84 84
                 }
85 85
                 if ($catorigin)
86 86
                 {
87
-                    print '<input type="hidden" name="catorigin" value="' . $catorigin . '">';
87
+                    print '<input type="hidden" name="catorigin" value="'.$catorigin.'">';
88 88
                 }
89 89
 
90 90
                 print load_fiche_titre($langs->trans("CreateCat"));
@@ -95,29 +95,29 @@  discard block
 block discarded – undo
95 95
 
96 96
                 // Ref
97 97
                 print '<tr>';
98
-                print '<td class="titlefieldcreate fieldrequired">' . $langs->trans("Ref") . '</td><td><input id="label" class="minwidth100" name="label" value="' . $label . '">';
98
+                print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input id="label" class="minwidth100" name="label" value="'.$label.'">';
99 99
                 print'</td></tr>';
100 100
 
101 101
                 // Description
102
-                print '<tr><td class="tdtop">' . $langs->trans("Description") . '</td><td>';
102
+                print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
103 103
                 //require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
104 104
                 $doleditor = new DolEditor('description', $description, '', 200, 'dolibarr_notes', '', false, true, Globals::$conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_6, '90%');
105 105
                 $doleditor->Create();
106 106
                 print '</td></tr>';
107 107
 
108 108
                 // Color
109
-                print '<tr><td>' . $langs->trans("Color") . '</td><td>';
109
+                print '<tr><td>'.$langs->trans("Color").'</td><td>';
110 110
                 print $formother->selectColor($color, 'color');
111 111
                 print '</td></tr>';
112 112
 
113 113
                 // Parent category
114
-                print '<tr><td>' . $langs->trans("AddIn") . '</td><td>';
114
+                print '<tr><td>'.$langs->trans("AddIn").'</td><td>';
115 115
                 print $form->select_all_categories($type, $catorigin, 'parent');
116 116
                 print ajax_combobox('parent');
117 117
                 print '</td></tr>';
118 118
 
119 119
                 $parameters = array();
120
-                $reshook = Globals::$hookManager->executeHooks('formObjectOptions', $parameters, $object, $action);    // Note that $action and $object may have been modified by hook
120
+                $reshook = Globals::$hookManager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
121 121
                 print Globals::$hookManager->resPrint;
122 122
                 if (empty($reshook)) {
123 123
                     print $object->showOptionals($extrafields, 'edit');
@@ -128,9 +128,9 @@  discard block
 block discarded – undo
128 128
                 AlDolUtils::dol_fiche_end('');
129 129
 
130 130
                 print '<div class="center">';
131
-                print '<input type="submit" class="button" value="' . $langs->trans("CreateThisCat") . '" name="creation" />';
131
+                print '<input type="submit" class="button" value="'.$langs->trans("CreateThisCat").'" name="creation" />';
132 132
                 print '&nbsp; &nbsp; &nbsp;';
133
-                print '<input type="submit" class="button" value="' . $langs->trans("Cancel") . '" name="cancel" />';
133
+                print '<input type="submit" class="button" value="'.$langs->trans("Cancel").'" name="cancel" />';
134 134
                 print '</div>';
135 135
 
136 136
                 print '</form>';
Please login to merge, or discard this patch.
Base/MenuManager.php 1 patch
Spacing   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -39,8 +39,8 @@  discard block
 block discarded – undo
39 39
      * @var DoliDB Database handler.
40 40
      */
41 41
     // public $db;
42
-    var $type_user;         // Put 0 for internal users, 1 for external users
43
-    var $atarget = "";                                // To store default target to use onto links
42
+    var $type_user; // Put 0 for internal users, 1 for external users
43
+    var $atarget = ""; // To store default target to use onto links
44 44
     var $name = "eldy";
45 45
     var $menu_array;
46 46
     var $menu_array_after;
@@ -164,16 +164,16 @@  discard block
 block discarded – undo
164 164
 
165 165
         if ($mode == 'topnb') {
166 166
             //print_eldy_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode);  // no output
167
-            AlEldyLib::print_eldy_menu(Config::$dbEngine, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode);  // no output
167
+            AlEldyLib::print_eldy_menu(Config::$dbEngine, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode); // no output
168 168
             return $this->menu->getNbOfVisibleMenuEntries();
169 169
         }
170 170
 
171 171
         if ($mode == 'jmobile') {     // Used to get menu in xml ul/li
172
-            AlEldyLib::print_eldy_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode);      // Fill this->menu that is empty with top menu
172
+            AlEldyLib::print_eldy_menu($this->db, $this->atarget, $this->type_user, $this->tabMenu, $this->menu, 1, $mode); // Fill this->menu that is empty with top menu
173 173
             // $this->menu->liste is top menu
174 174
             //var_dump($this->menu->liste);exit;
175 175
             $lastlevel = array();
176
-            print '<!-- Generate menu list from menu handler ' . $this->name . ' -->' . "\n";
176
+            print '<!-- Generate menu list from menu handler '.$this->name.' -->'."\n";
177 177
             foreach ($this->menu->liste as $key => $val) {  // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
178 178
                 print '<ul class="ulmenu" data-inset="true">';
179 179
                 print '<li class="lilevel0">';
@@ -194,13 +194,13 @@  discard block
 block discarded – undo
194 194
                     }
195 195
 
196 196
                     print $val['titre'];
197
-                    print '</a>' . "\n";
197
+                    print '</a>'."\n";
198 198
 
199 199
                     // Search submenu fot this mainmenu entry
200 200
                     $tmpmainmenu = $val['mainmenu'];
201 201
                     $tmpleftmenu = 'all';
202 202
                     $submenu = new Menu();
203
-                    print_left_eldy_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $submenu, 1, $tmpmainmenu, $tmpleftmenu);       // Fill $submenu (example with tmpmainmenu='home' tmpleftmenu='all', return left menu tree of Home)
203
+                    print_left_eldy_menu($this->db, $this->menu_array, $this->menu_array_after, $this->tabMenu, $submenu, 1, $tmpmainmenu, $tmpleftmenu); // Fill $submenu (example with tmpmainmenu='home' tmpleftmenu='all', return left menu tree of Home)
204 204
                     // Note: $submenu contains menu entry with substitution not yet done
205 205
                     //if ($tmpmainmenu.'-'.$tmpleftmenu == 'home-all') { var_dump($submenu); exit; }
206 206
                     //if ($tmpmainmenu=='accountancy') { var_dump($submenu->liste); exit; }
@@ -210,21 +210,21 @@  discard block
 block discarded – undo
210 210
                     $canonnexturl = preg_replace('/\?.*$/', '', $nexturl);
211 211
                     //var_dump($canonrelurl);
212 212
                     //var_dump($canonnexturl);
213
-                    print '<ul>' . "\n";
213
+                    print '<ul>'."\n";
214 214
                     if (($canonrelurl != $canonnexturl && !in_array($val['mainmenu'], array('tools'))) || (strpos($canonrelurl, '/product/index.php') !== false || strpos($canonrelurl, '/compta/bank/list.php') !== false)) {
215 215
                         // We add sub entry
216
-                        print str_pad('', 1) . '<li class="lilevel1 ui-btn-icon-right ui-btn">';  // ui-btn to highlight on clic
217
-                        print '<a href="' . $relurl . '">';
218
-                        if ($langs->trans(ucfirst($val['mainmenu']) . "Dashboard") == ucfirst($val['mainmenu']) . "Dashboard") {  // No translation
216
+                        print str_pad('', 1).'<li class="lilevel1 ui-btn-icon-right ui-btn">'; // ui-btn to highlight on clic
217
+                        print '<a href="'.$relurl.'">';
218
+                        if ($langs->trans(ucfirst($val['mainmenu'])."Dashboard") == ucfirst($val['mainmenu'])."Dashboard") {  // No translation
219 219
                             if (in_array($val['mainmenu'], array('cashdesk', 'externalsite', 'website', 'collab'))) {
220 220
                                 print $langs->trans("Access");
221 221
                             } else {
222 222
                                 print $langs->trans("Dashboard");
223 223
                             }
224 224
                         } else
225
-                            print $langs->trans(ucfirst($val['mainmenu']) . "Dashboard");
225
+                            print $langs->trans(ucfirst($val['mainmenu'])."Dashboard");
226 226
                         print '</a>';
227
-                        print '</li>' . "\n";
227
+                        print '</li>'."\n";
228 228
                     }
229 229
 
230 230
                     if ($val['level'] == 0) {
@@ -258,7 +258,7 @@  discard block
 block discarded – undo
258 258
                         if ($showmenu) {  // Visible (option to hide when not allowed is off or allowed)
259 259
                             $substitarray = array('__LOGIN__' => $user->login, '__USER_ID__' => $user->id, '__USER_SUPERVISOR_ID__' => $user->fk_user);
260 260
                             $substitarray['__USERID__'] = $user->id; // For backward compatibility
261
-                            $val2['url'] = make_substitutions($val2['url'], $substitarray);  // Make also substitution of __(XXX)__ and __[XXX]__
261
+                            $val2['url'] = make_substitutions($val2['url'], $substitarray); // Make also substitution of __(XXX)__ and __[XXX]__
262 262
 
263 263
                             if (!preg_match("/^(http:\/\/|https:\/\/)/i", $val2['url'])) {
264 264
                                 $relurl2 = dol_buildpath($val2['url'], 1);
@@ -277,14 +277,14 @@  discard block
 block discarded – undo
277 277
                             }
278 278
 
279 279
                             print str_pad('', $val2['level'] + 1);
280
-                            print '<li class="lilevel' . ($val2['level'] + 1);
280
+                            print '<li class="lilevel'.($val2['level'] + 1);
281 281
                             if ($val2['level'] == 0) {
282
-                                print ' ui-btn-icon-right ui-btn';  // ui-btn to highlight on clic
282
+                                print ' ui-btn-icon-right ui-btn'; // ui-btn to highlight on clic
283 283
                             }
284
-                            print $disabled . '">';  // ui-btn to highlight on clic
284
+                            print $disabled.'">'; // ui-btn to highlight on clic
285 285
                             if ($relurl2) {
286 286
                                 if ($val2['enabled']) { // Allowed
287
-                                    print '<a href="' . $relurl2 . '"';
287
+                                    print '<a href="'.$relurl2.'"';
288 288
                                     //print ' data-ajax="false"';
289 289
                                     print '>';
290 290
                                     $lastlevel2[$val2['level']] = 'enabled';
@@ -308,17 +308,17 @@  discard block
 block discarded – undo
308 308
                                 else
309 309
                                     print '</a>';
310 310
                             }
311
-                            print '</li>' . "\n";
311
+                            print '</li>'."\n";
312 312
                         }
313 313
                     }
314 314
                     //var_dump($submenu);
315 315
                     print '</ul>';
316 316
                 }
317 317
                 if ($val['enabled'] == 2) {
318
-                    print '<font class="vsmenudisabled">' . $val['titre'] . '</font>';
318
+                    print '<font class="vsmenudisabled">'.$val['titre'].'</font>';
319 319
                 }
320 320
                 print '</li>';
321
-                print '</ul>' . "\n";
321
+                print '</ul>'."\n";
322 322
             }
323 323
         }
324 324
 
Please login to merge, or discard this patch.
Base/AlExtraFields.php 2 patches
Spacing   +207 added lines, -207 removed lines patch added patch discarded remove patch
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
         if ($elementtype == 'contact')
228 228
             $elementtype = 'socpeople';
229 229
 
230
-        $table = $elementtype . '_extrafields';
230
+        $table = $elementtype.'_extrafields';
231 231
         if ($elementtype == 'categorie')
232 232
             $table = 'categories_extrafields';
233 233
 
@@ -272,10 +272,10 @@  discard block
 block discarded – undo
272 272
                 'default' => $default_value
273 273
             );
274 274
 
275
-            $result = Config::$dbEngine->DDLAddField(MAIN_DB_PREFIX . $table, $attrname, $field_desc);
275
+            $result = Config::$dbEngine->DDLAddField(MAIN_DB_PREFIX.$table, $attrname, $field_desc);
276 276
             if ($result > 0) {
277 277
                 if ($unique) {
278
-                    $sql = "ALTER TABLE " . MAIN_DB_PREFIX . $table . " ADD UNIQUE INDEX uk_" . $table . "_" . $attrname . " (" . $attrname . ")";
278
+                    $sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table." ADD UNIQUE INDEX uk_".$table."_".$attrname." (".$attrname.")";
279 279
                     $resql = Config::$dbEngine->query($sql, 1, 'dml');
280 280
                 }
281 281
                 return 1;
@@ -344,7 +344,7 @@  discard block
 block discarded – undo
344 344
                 $params = '';
345 345
             }
346 346
 
347
-            $sql = "INSERT INTO " . MAIN_DB_PREFIX . "extrafields(";
347
+            $sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(";
348 348
             $sql .= " name,";
349 349
             $sql .= " label,";
350 350
             $sql .= " type,";
@@ -367,30 +367,30 @@  discard block
 block discarded – undo
367 367
             $sql .= " enabled,";
368 368
             $sql .= " help";
369 369
             $sql .= " )";
370
-            $sql .= " VALUES('" . $attrname . "',";
371
-            $sql .= " '" . Config::$dbEngine->escape($label) . "',";
372
-            $sql .= " '" . Config::$dbEngine->escape($type) . "',";
373
-            $sql .= " " . $pos . ",";
374
-            $sql .= " '" . Config::$dbEngine->escape($size) . "',";
375
-            $sql .= " " . ($entity === '' ? Globals::$conf->entity : $entity) . ",";
376
-            $sql .= " '" . Config::$dbEngine->escape($elementtype) . "',";
377
-            $sql .= " " . $unique . ",";
378
-            $sql .= " " . $required . ",";
379
-            $sql .= " '" . Config::$dbEngine->escape($params) . "',";
380
-            $sql .= " " . $alwayseditable . ",";
381
-            $sql .= " " . ($perms ? "'" . Config::$dbEngine->escape($perms) . "'" : "null") . ",";
382
-            $sql .= " " . ($langfile ? "'" . Config::$dbEngine->escape($langfile) . "'" : "null") . ",";
383
-            $sql .= " '" . Config::$dbEngine->escape($list) . "',";
384
-            $sql .= " " . ($default ? "'" . Config::$dbEngine->escape($default) . "'" : "null") . ",";
385
-            $sql .= " " . ($computed ? "'" . Config::$dbEngine->escape($computed) . "'" : "null") . ",";
386
-            $sql .= " " . (is_object(Globals::$user) ? Globals::$user->id : 0) . ",";
387
-            $sql .= " " . (is_object(Globals::$user) ? Globals::$user->id : 0) . ",";
388
-            $sql .= "'" . Config::$dbEngine->idate(dol_now()) . "',";
389
-            $sql .= " " . ($enabled ? "'" . Config::$dbEngine->escape($enabled) . "'" : "1") . ",";
390
-            $sql .= " " . ($help ? "'" . Config::$dbEngine->escape($help) . "'" : "null");
370
+            $sql .= " VALUES('".$attrname."',";
371
+            $sql .= " '".Config::$dbEngine->escape($label)."',";
372
+            $sql .= " '".Config::$dbEngine->escape($type)."',";
373
+            $sql .= " ".$pos.",";
374
+            $sql .= " '".Config::$dbEngine->escape($size)."',";
375
+            $sql .= " ".($entity === '' ? Globals::$conf->entity : $entity).",";
376
+            $sql .= " '".Config::$dbEngine->escape($elementtype)."',";
377
+            $sql .= " ".$unique.",";
378
+            $sql .= " ".$required.",";
379
+            $sql .= " '".Config::$dbEngine->escape($params)."',";
380
+            $sql .= " ".$alwayseditable.",";
381
+            $sql .= " ".($perms ? "'".Config::$dbEngine->escape($perms)."'" : "null").",";
382
+            $sql .= " ".($langfile ? "'".Config::$dbEngine->escape($langfile)."'" : "null").",";
383
+            $sql .= " '".Config::$dbEngine->escape($list)."',";
384
+            $sql .= " ".($default ? "'".Config::$dbEngine->escape($default)."'" : "null").",";
385
+            $sql .= " ".($computed ? "'".Config::$dbEngine->escape($computed)."'" : "null").",";
386
+            $sql .= " ".(is_object(Globals::$user) ? Globals::$user->id : 0).",";
387
+            $sql .= " ".(is_object(Globals::$user) ? Globals::$user->id : 0).",";
388
+            $sql .= "'".Config::$dbEngine->idate(dol_now())."',";
389
+            $sql .= " ".($enabled ? "'".Config::$dbEngine->escape($enabled)."'" : "1").",";
390
+            $sql .= " ".($help ? "'".Config::$dbEngine->escape($help)."'" : "null");
391 391
             $sql .= ')';
392 392
 
393
-            AlDolUtils::dol_syslog(get_class($this) . "::create_label", LOG_DEBUG);
393
+            AlDolUtils::dol_syslog(get_class($this)."::create_label", LOG_DEBUG);
394 394
             if (Config::$dbEngine->query($sql)) {
395 395
                 return 1;
396 396
             } else {
@@ -415,7 +415,7 @@  discard block
 block discarded – undo
415 415
         if ($elementtype == 'contact')
416 416
             $elementtype = 'socpeople';
417 417
 
418
-        $table = $elementtype . '_extrafields';
418
+        $table = $elementtype.'_extrafields';
419 419
         if ($elementtype == 'categorie')
420 420
             $table = 'categories_extrafields';
421 421
 
@@ -430,15 +430,15 @@  discard block
 block discarded – undo
430 430
 
431 431
             if (!$error) {
432 432
                 $sql = "SELECT COUNT(rowid) as nb";
433
-                $sql .= " FROM " . MAIN_DB_PREFIX . "extrafields";
434
-                $sql .= " WHERE elementtype = '" . $elementtype . "'";
435
-                $sql .= " AND name = '" . $attrname . "'";
433
+                $sql .= " FROM ".MAIN_DB_PREFIX."extrafields";
434
+                $sql .= " WHERE elementtype = '".$elementtype."'";
435
+                $sql .= " AND name = '".$attrname."'";
436 436
                 //$sql.= " AND entity IN (0,".Globals::$conf->entity.")";      Do not test on entity here. We want to see if there is still on field remaning in other entities before deleting field in table
437 437
                 $resql = Config::$dbEngine->query($sql);
438 438
                 if ($resql) {
439 439
                     $obj = Config::$dbEngine->fetch_object($resql);
440 440
                     if ($obj->nb <= 0) {
441
-                        $result = Config::$dbEngine->DDLDropField(MAIN_DB_PREFIX . $table, $attrname); // This also drop the unique key
441
+                        $result = Config::$dbEngine->DDLDropField(MAIN_DB_PREFIX.$table, $attrname); // This also drop the unique key
442 442
                         if ($result < 0) {
443 443
                             $this->error = Config::$dbEngine->lasterror();
444 444
                             $error++;
@@ -472,12 +472,12 @@  discard block
 block discarded – undo
472 472
             $elementtype = 'socpeople';
473 473
 
474 474
         if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) {
475
-            $sql = "DELETE FROM " . MAIN_DB_PREFIX . "extrafields";
476
-            $sql .= " WHERE name = '" . $attrname . "'";
477
-            $sql .= " AND entity IN  (0," . Globals::$conf->entity . ')';
478
-            $sql .= " AND elementtype = '" . $elementtype . "'";
475
+            $sql = "DELETE FROM ".MAIN_DB_PREFIX."extrafields";
476
+            $sql .= " WHERE name = '".$attrname."'";
477
+            $sql .= " AND entity IN  (0,".Globals::$conf->entity.')';
478
+            $sql .= " AND elementtype = '".$elementtype."'";
479 479
 
480
-            AlDolUtils::dol_syslog(get_class($this) . "::delete_label", LOG_DEBUG);
480
+            AlDolUtils::dol_syslog(get_class($this)."::delete_label", LOG_DEBUG);
481 481
             $resql = Config::$dbEngine->query($sql);
482 482
             if ($resql) {
483 483
                 return 1;
@@ -521,7 +521,7 @@  discard block
 block discarded – undo
521 521
         if ($elementtype == 'contact')
522 522
             $elementtype = 'socpeople';
523 523
 
524
-        $table = $elementtype . '_extrafields';
524
+        $table = $elementtype.'_extrafields';
525 525
         if ($elementtype == 'categorie')
526 526
             $table = 'categories_extrafields';
527 527
 
@@ -559,7 +559,7 @@  discard block
 block discarded – undo
559 559
             $field_desc = array('type' => $typedb, 'value' => $lengthdb, 'null' => ($required ? 'NOT NULL' : 'NULL'), 'default' => $default);
560 560
 
561 561
             if ($type != 'separate') { // No table update when separate type
562
-                $result = Config::$dbEngine->DDLUpdateField(MAIN_DB_PREFIX . $table, $attrname, $field_desc);
562
+                $result = Config::$dbEngine->DDLUpdateField(MAIN_DB_PREFIX.$table, $attrname, $field_desc);
563 563
             }
564 564
             if ($result > 0 || $type == 'separate') {
565 565
                 if ($label) {
@@ -568,11 +568,11 @@  discard block
 block discarded – undo
568 568
                 if ($result > 0) {
569 569
                     $sql = '';
570 570
                     if ($unique) {
571
-                        $sql = "ALTER TABLE " . MAIN_DB_PREFIX . $table . " ADD UNIQUE INDEX uk_" . $table . "_" . $attrname . " (" . $attrname . ")";
571
+                        $sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table." ADD UNIQUE INDEX uk_".$table."_".$attrname." (".$attrname.")";
572 572
                     } else {
573
-                        $sql = "ALTER TABLE " . MAIN_DB_PREFIX . $table . " DROP INDEX uk_" . $table . "_" . $attrname;
573
+                        $sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table." DROP INDEX uk_".$table."_".$attrname;
574 574
                     }
575
-                    AlDolUtils::dol_syslog(get_class($this) . '::update', LOG_DEBUG);
575
+                    AlDolUtils::dol_syslog(get_class($this).'::update', LOG_DEBUG);
576 576
                     $resql = Config::$dbEngine->query($sql, 1, 'dml');
577 577
                     return 1;
578 578
                 } else {
@@ -617,7 +617,7 @@  discard block
 block discarded – undo
617 617
     {
618 618
         // phpcs:enable
619 619
         // global $conf, $user;
620
-        AlDolUtils::dol_syslog(get_class($this) . "::update_label " . $attrname . ", " . $label . ", " . $type . ", " . $size . ", " . $elementtype . ", " . $unique . ", " . $required . ", " . $pos . ", " . $alwayseditable . ", " . $perms . ", " . $list . ", " . $default . ", " . $computed . ", " . $entity . ", " . $langfile . ", " . $enabled . ", " . $totalizable);
620
+        AlDolUtils::dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required.", ".$pos.", ".$alwayseditable.", ".$perms.", ".$list.", ".$default.", ".$computed.", ".$entity.", ".$langfile.", ".$enabled.", ".$totalizable);
621 621
 
622 622
         // Clean parameters
623 623
         if ($elementtype == 'thirdparty')
@@ -652,21 +652,21 @@  discard block
 block discarded – undo
652 652
 
653 653
             if ($entity === '' || $entity != '0') {
654 654
                 // We dont want on all entities, we delete all and current
655
-                $sql_del = "DELETE FROM " . MAIN_DB_PREFIX . "extrafields";
656
-                $sql_del .= " WHERE name = '" . $attrname . "'";
657
-                $sql_del .= " AND entity IN (0, " . ($entity === '' ? Globals::$conf->entity : $entity) . ")";
658
-                $sql_del .= " AND elementtype = '" . $elementtype . "'";
655
+                $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."extrafields";
656
+                $sql_del .= " WHERE name = '".$attrname."'";
657
+                $sql_del .= " AND entity IN (0, ".($entity === '' ? Globals::$conf->entity : $entity).")";
658
+                $sql_del .= " AND elementtype = '".$elementtype."'";
659 659
             } else {
660 660
                 // We want on all entities ($entities = '0'), we delete on all only (we keep setup specific to each entity)
661
-                $sql_del = "DELETE FROM " . MAIN_DB_PREFIX . "extrafields";
662
-                $sql_del .= " WHERE name = '" . $attrname . "'";
661
+                $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."extrafields";
662
+                $sql_del .= " WHERE name = '".$attrname."'";
663 663
                 $sql_del .= " AND entity = 0";
664
-                $sql_del .= " AND elementtype = '" . $elementtype . "'";
664
+                $sql_del .= " AND elementtype = '".$elementtype."'";
665 665
             }
666 666
             $resql1 = Config::$dbEngine->query($sql_del);
667 667
 
668
-            $sql = "INSERT INTO " . MAIN_DB_PREFIX . "extrafields(";
669
-            $sql .= " name,";  // This is code
668
+            $sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(";
669
+            $sql .= " name,"; // This is code
670 670
             $sql .= " entity,";
671 671
             $sql .= " label,";
672 672
             $sql .= " type,";
@@ -689,28 +689,28 @@  discard block
 block discarded – undo
689 689
             $sql .= " enabled,";
690 690
             $sql .= " help";
691 691
             $sql .= ") VALUES (";
692
-            $sql .= "'" . $attrname . "',";
693
-            $sql .= " " . ($entity === '' ? Globals::$conf->entity : $entity) . ",";
694
-            $sql .= " '" . Config::$dbEngine->escape($label) . "',";
695
-            $sql .= " '" . Config::$dbEngine->escape($type) . "',";
696
-            $sql .= " '" . Config::$dbEngine->escape($size) . "',";
697
-            $sql .= " '" . Config::$dbEngine->escape($elementtype) . "',";
698
-            $sql .= " " . $unique . ",";
699
-            $sql .= " " . $required . ",";
700
-            $sql .= " " . ($perms ? "'" . Config::$dbEngine->escape($perms) . "'" : "null") . ",";
701
-            $sql .= " " . ($langfile ? "'" . Config::$dbEngine->escape($langfile) . "'" : "null") . ",";
702
-            $sql .= " " . $pos . ",";
703
-            $sql .= " '" . Config::$dbEngine->escape($alwayseditable) . "',";
704
-            $sql .= " '" . Config::$dbEngine->escape($params) . "',";
705
-            $sql .= " '" . Config::$dbEngine->escape($list) . "', ";
706
-            $sql .= " " . $totalizable . ",";
707
-            $sql .= " " . (($default != '') ? "'" . Config::$dbEngine->escape($default) . "'" : "null") . ",";
708
-            $sql .= " " . ($computed ? "'" . Config::$dbEngine->escape($computed) . "'" : "null") . ",";
709
-            $sql .= " " . Globals::$user->id . ",";
710
-            $sql .= " " . Globals::$user->id . ",";
711
-            $sql .= "'" . Config::$dbEngine->idate(dol_now()) . "',";
712
-            $sql .= "'" . Config::$dbEngine->escape($enabled) . "',";
713
-            $sql .= " " . ($help ? "'" . Config::$dbEngine->escape($help) . "'" : "null");
692
+            $sql .= "'".$attrname."',";
693
+            $sql .= " ".($entity === '' ? Globals::$conf->entity : $entity).",";
694
+            $sql .= " '".Config::$dbEngine->escape($label)."',";
695
+            $sql .= " '".Config::$dbEngine->escape($type)."',";
696
+            $sql .= " '".Config::$dbEngine->escape($size)."',";
697
+            $sql .= " '".Config::$dbEngine->escape($elementtype)."',";
698
+            $sql .= " ".$unique.",";
699
+            $sql .= " ".$required.",";
700
+            $sql .= " ".($perms ? "'".Config::$dbEngine->escape($perms)."'" : "null").",";
701
+            $sql .= " ".($langfile ? "'".Config::$dbEngine->escape($langfile)."'" : "null").",";
702
+            $sql .= " ".$pos.",";
703
+            $sql .= " '".Config::$dbEngine->escape($alwayseditable)."',";
704
+            $sql .= " '".Config::$dbEngine->escape($params)."',";
705
+            $sql .= " '".Config::$dbEngine->escape($list)."', ";
706
+            $sql .= " ".$totalizable.",";
707
+            $sql .= " ".(($default != '') ? "'".Config::$dbEngine->escape($default)."'" : "null").",";
708
+            $sql .= " ".($computed ? "'".Config::$dbEngine->escape($computed)."'" : "null").",";
709
+            $sql .= " ".Globals::$user->id.",";
710
+            $sql .= " ".Globals::$user->id.",";
711
+            $sql .= "'".Config::$dbEngine->idate(dol_now())."',";
712
+            $sql .= "'".Config::$dbEngine->escape($enabled)."',";
713
+            $sql .= " ".($help ? "'".Config::$dbEngine->escape($help)."'" : "null");
714 714
             $sql .= ")";
715 715
 
716 716
             $resql2 = Config::$dbEngine->query($sql);
@@ -754,14 +754,14 @@  discard block
 block discarded – undo
754 754
         $array_name_label = array();
755 755
 
756 756
         // To avoid conflicts with external modules. TODO Remove this.
757
-        if (!$forceload &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
757
+        if (!$forceload && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
758 758
         return $array_name_label;
759 759
 
760 760
         // Set array of label of entity
761 761
         // TODO Remove completely loading of label. This should be done by presentation.
762 762
         $labelmulticompany = array();
763 763
         if (!empty(Globals::$conf->multicompany->enabled)) {
764
-            $sql_entity_name = 'SELECT rowid, label FROM ' . MAIN_DB_PREFIX . 'entity WHERE rowid in (0,' . Globals::$conf->entity . ')';
764
+            $sql_entity_name = 'SELECT rowid, label FROM '.MAIN_DB_PREFIX.'entity WHERE rowid in (0,'.Globals::$conf->entity.')';
765 765
             $resql_entity_name = Config::$dbEngine->query($sql_entity_name);
766 766
             if ($resql_entity_name) {
767 767
                 while ($obj = Config::$dbEngine->fetch_object($resql_entity_name)) {
@@ -771,13 +771,13 @@  discard block
 block discarded – undo
771 771
         }
772 772
 
773 773
         // We should not have several time this log. If we have, there is some optimization to do by calling a simple $object->fetch_optionals() that include cache management.
774
-        AlDolUtils::dol_syslog("fetch_name_optionals_label elementtype=" . $elementtype);
774
+        AlDolUtils::dol_syslog("fetch_name_optionals_label elementtype=".$elementtype);
775 775
 
776 776
         $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,totalizable,fielddefault,fieldcomputed,entity,enabled,help";
777
-        $sql .= " FROM " . MAIN_DB_PREFIX . "extrafields";
778
-        $sql .= " WHERE entity IN (0," . Globals::$conf->entity . ")";
777
+        $sql .= " FROM ".MAIN_DB_PREFIX."extrafields";
778
+        $sql .= " WHERE entity IN (0,".Globals::$conf->entity.")";
779 779
         if ($elementtype)
780
-            $sql .= " AND elementtype = '" . $elementtype . "'"; // Filed with object->table_element
780
+            $sql .= " AND elementtype = '".$elementtype."'"; // Filed with object->table_element
781 781
         $sql .= " ORDER BY pos";
782 782
 
783 783
         $resql = Config::$dbEngine->select($sql);
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
                 $this->attribute_list[$tab->name] = $tab->list;
810 810
                 $this->attribute_totalizable[$tab->name] = $tab->totalizable;
811 811
                 $this->attribute_entityid[$tab->name] = $tab->entity;
812
-                $this->attribute_entitylabel[$tab->name] = (empty($labelmulticompany[$tab->entity]) ? 'Entity' . $tab->entity : $labelmulticompany[$tab->entity]);
812
+                $this->attribute_entitylabel[$tab->name] = (empty($labelmulticompany[$tab->entity]) ? 'Entity'.$tab->entity : $labelmulticompany[$tab->entity]);
813 813
 
814 814
                 // New usage
815 815
                 $this->attributes[$tab->elementtype]['type'][$tab->name] = $tab->type;
@@ -828,7 +828,7 @@  discard block
 block discarded – undo
828 828
                 $this->attributes[$tab->elementtype]['list'][$tab->name] = $tab->list;
829 829
                 $this->attributes[$tab->elementtype]['totalizable'][$tab->name] = $tab->totalizable;
830 830
                 $this->attributes[$tab->elementtype]['entityid'][$tab->name] = $tab->entity;
831
-                $this->attributes[$tab->elementtype]['entitylabel'][$tab->name] = (empty($labelmulticompany[$tab->entity]) ? 'Entity' . $tab->entity : $labelmulticompany[$tab->entity]);
831
+                $this->attributes[$tab->elementtype]['entitylabel'][$tab->name] = (empty($labelmulticompany[$tab->entity]) ? 'Entity'.$tab->entity : $labelmulticompany[$tab->entity]);
832 832
                 $this->attributes[$tab->elementtype]['enabled'][$tab->name] = $tab->enabled;
833 833
                 $this->attributes[$tab->elementtype]['help'][$tab->name] = $tab->help;
834 834
             }
@@ -861,13 +861,13 @@  discard block
 block discarded – undo
861 861
         // global $conf, $langs, $form;
862 862
 
863 863
         if (!is_object($form)) {
864
-            require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
864
+            require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
865 865
             $form = new Form(Config::$dbEngine);
866 866
         }
867 867
 
868 868
         $out = '';
869 869
 
870
-        $keyprefix = $keyprefix . 'options_';  // Because we work on extrafields
870
+        $keyprefix = $keyprefix.'options_'; // Because we work on extrafields
871 871
 
872 872
         if (!empty($extrafieldsobjectkey)) {
873 873
             $label = $this->attributes[$extrafieldsobjectkey]['label'][$key];
@@ -883,7 +883,7 @@  discard block
 block discarded – undo
883 883
             $list = dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1);
884 884
             $totalizable = $this->attributes[$extrafieldsobjectkey]['totalizable'][$key];
885 885
             $help = $this->attributes[$extrafieldsobjectkey]['help'][$key];
886
-            $hidden = (empty($list) ? 1 : 0);  // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
886
+            $hidden = (empty($list) ? 1 : 0); // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
887 887
         } else { // Old usage
888 888
             $label = $this->attribute_label[$key];
889 889
             $type = $this->attribute_type[$key];
@@ -897,12 +897,12 @@  discard block
 block discarded – undo
897 897
             $langfile = $this->attribute_langfile[$key];
898 898
             $list = $this->attribute_list[$key];
899 899
             $totalizable = $this->attribute_totalizable[$key];
900
-            $hidden = (empty($list) ? 1 : 0);  // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
900
+            $hidden = (empty($list) ? 1 : 0); // If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
901 901
         }
902 902
 
903 903
         if ($computed) {
904 904
             if (!preg_match('/^search_/', $keyprefix))
905
-                return '<span class="opacitymedium">' . Globals::$langs->trans("AutomaticallyCalculated") . '</span>';
905
+                return '<span class="opacitymedium">'.Globals::$langs->trans("AutomaticallyCalculated").'</span>';
906 906
             else
907 907
                 return '';
908 908
         }
@@ -942,31 +942,31 @@  discard block
 block discarded – undo
942 942
                 $value = '-1';
943 943
 
944 944
             // TODO Must also support $moreparam
945
-            $out = $form->selectDate($value, $keyprefix . $key . $keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
945
+            $out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
946 946
         }
947 947
         elseif (in_array($type, array('int', 'integer'))) {
948 948
             $tmp = explode(',', $size);
949 949
             $newsize = $tmp[0];
950
-            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" maxlength="' . $newsize . '" value="' . dol_escape_htmltag($value) . '"' . ($moreparam ? $moreparam : '') . '>';
950
+            $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam ? $moreparam : '').'>';
951 951
         } elseif (preg_match('/varchar/', $type)) {
952
-            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" maxlength="' . $size . '" value="' . dol_escape_htmltag($value) . '"' . ($moreparam ? $moreparam : '') . '>';
952
+            $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam ? $moreparam : '').'>';
953 953
         } elseif (in_array($type, array('mail', 'phone', 'url'))) {
954
-            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . dol_escape_htmltag($value) . '" ' . ($moreparam ? $moreparam : '') . '>';
954
+            $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
955 955
         } elseif ($type == 'text') {
956 956
             if (!preg_match('/search_/', $keyprefix)) {  // If keyprefix is search_ or search_options_, we must just use a simple text field
957
-                require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
958
-                $doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, false, ROWS_5, '90%');
957
+                require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
958
+                $doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, false, ROWS_5, '90%');
959 959
                 $out = $doleditor->Create(1);
960 960
             } else {
961
-                $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . dol_escape_htmltag($value) . '" ' . ($moreparam ? $moreparam : '') . '>';
961
+                $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
962 962
             }
963 963
         } elseif ($type == 'html') {
964 964
             if (!preg_match('/search_/', $keyprefix)) {  // If keyprefix is search_ or search_options_, we must just use a simple text field
965
-                require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
966
-                $doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
965
+                require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
966
+                $doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
967 967
                 $out = $doleditor->Create(1);
968 968
             } else {
969
-                $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . dol_escape_htmltag($value) . '" ' . ($moreparam ? $moreparam : '') . '>';
969
+                $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
970 970
             }
971 971
         } elseif ($type == 'boolean') {
972 972
             $checked = '';
@@ -975,33 +975,33 @@  discard block
 block discarded – undo
975 975
             } else {
976 976
                 $checked = ' value="1" ';
977 977
             }
978
-            $out = '<input type="checkbox" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" ' . $checked . ' ' . ($moreparam ? $moreparam : '') . '>';
978
+            $out = '<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam ? $moreparam : '').'>';
979 979
         } elseif ($type == 'price') {
980 980
             if (!empty($value)) {  // $value in memory is a php numeric, we format it into user number format.
981 981
                 $value = price($value);
982 982
             }
983
-            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ' . Globals::$langs->getCurrencySymbol(Globals::$conf->currency);
983
+            $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'> '.Globals::$langs->getCurrencySymbol(Globals::$conf->currency);
984 984
         } elseif ($type == 'double') {
985 985
             if (!empty($value)) {  // $value in memory is a php numeric, we format it into user number format.
986 986
                 $value = price($value);
987 987
             }
988
-            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ';
988
+            $out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'> ';
989 989
         } elseif ($type == 'select') {
990 990
             $out = '';
991
-            if (!empty(Globals::$conf->use_javascript_ajax) &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
992
-                include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
993
-                $out .= ajax_combobox($keyprefix . $key . $keysuffix, array(), 0);
991
+            if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
992
+                include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
993
+                $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
994 994
             }
995 995
 
996
-            $out .= '<select class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" ' . ($moreparam ? $moreparam : '') . '>';
996
+            $out .= '<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '').'>';
997 997
             $out .= '<option value="0">&nbsp;</option>';
998 998
             foreach ($param['options'] as $key => $val) {
999 999
                 if ((string) $key == '')
1000 1000
                     continue;
1001 1001
                 list($val, $parent) = explode('|', $val);
1002
-                $out .= '<option value="' . $key . '"';
1002
+                $out .= '<option value="'.$key.'"';
1003 1003
                 $out .= (((string) $value == (string) $key) ? ' selected' : '');
1004
-                $out .= (!empty($parent) ? ' parent="' . $parent . '"' : '');
1004
+                $out .= (!empty($parent) ? ' parent="'.$parent.'"' : '');
1005 1005
                 $out .= '>';
1006 1006
                 if ($langfile && $val)
1007 1007
                     $out .= Globals::$langs->trans($val);
@@ -1013,12 +1013,12 @@  discard block
 block discarded – undo
1013 1013
         }
1014 1014
         elseif ($type == 'sellist') {
1015 1015
             $out = '';
1016
-            if (!empty(Globals::$conf->use_javascript_ajax) &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
1017
-                include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
1018
-                $out .= ajax_combobox($keyprefix . $key . $keysuffix, array(), 0);
1016
+            if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
1017
+                include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
1018
+                $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
1019 1019
             }
1020 1020
 
1021
-            $out .= '<select class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" ' . ($moreparam ? $moreparam : '') . '>';
1021
+            $out .= '<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '').'>';
1022 1022
             if (is_array($param['options'])) {
1023 1023
                 $param_list = array_keys($param['options']);
1024 1024
                 $InfoFieldList = explode(":", $param_list[0]);
@@ -1029,19 +1029,19 @@  discard block
 block discarded – undo
1029 1029
                 // 2 : key fields name (if differ of rowid)
1030 1030
                 // 3 : key field parent (for dependent lists)
1031 1031
                 // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
1032
-                $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
1032
+                $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
1033 1033
 
1034 1034
 
1035 1035
                 if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
1036 1036
                     if (strpos($InfoFieldList[4], 'extra.') !== false) {
1037
-                        $keyList = 'main.' . $InfoFieldList[2] . ' as rowid';
1037
+                        $keyList = 'main.'.$InfoFieldList[2].' as rowid';
1038 1038
                     } else {
1039
-                        $keyList = $InfoFieldList[2] . ' as rowid';
1039
+                        $keyList = $InfoFieldList[2].' as rowid';
1040 1040
                     }
1041 1041
                 }
1042 1042
                 if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3])) {
1043 1043
                     list($parentName, $parentField) = explode('|', $InfoFieldList[3]);
1044
-                    $keyList .= ', ' . $parentField;
1044
+                    $keyList .= ', '.$parentField;
1045 1045
                 }
1046 1046
 
1047 1047
                 $fields_label = explode('|', $InfoFieldList[1]);
@@ -1051,8 +1051,8 @@  discard block
 block discarded – undo
1051 1051
                 }
1052 1052
 
1053 1053
                 $sqlwhere = '';
1054
-                $sql = 'SELECT ' . $keyList;
1055
-                $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
1054
+                $sql = 'SELECT '.$keyList;
1055
+                $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
1056 1056
                 if (!empty($InfoFieldList[4])) {
1057 1057
                     // can use curent entity filter
1058 1058
                     if (strpos($InfoFieldList[4], '$ENTITY$') !== false) {
@@ -1071,24 +1071,24 @@  discard block
 block discarded – undo
1071 1071
                     }
1072 1072
                     //We have to join on extrafield table
1073 1073
                     if (strpos($InfoFieldList[4], 'extra') !== false) {
1074
-                        $sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList[0] . '_extrafields as extra';
1075
-                        $sqlwhere .= ' WHERE extra.fk_object=main.' . $InfoFieldList[2] . ' AND ' . $InfoFieldList[4];
1074
+                        $sql .= ' as main, '.MAIN_DB_PREFIX.$InfoFieldList[0].'_extrafields as extra';
1075
+                        $sqlwhere .= ' WHERE extra.fk_object=main.'.$InfoFieldList[2].' AND '.$InfoFieldList[4];
1076 1076
                     } else {
1077
-                        $sqlwhere .= ' WHERE ' . $InfoFieldList[4];
1077
+                        $sqlwhere .= ' WHERE '.$InfoFieldList[4];
1078 1078
                     }
1079 1079
                 } else {
1080 1080
                     $sqlwhere .= ' WHERE 1=1';
1081 1081
                 }
1082 1082
                 // Some tables may have field, some other not. For the moment we disable it.
1083 1083
                 if (in_array($InfoFieldList[0], array('tablewithentity'))) {
1084
-                    $sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
1084
+                    $sqlwhere .= ' AND entity = '.Globals::$conf->entity;
1085 1085
                 }
1086 1086
                 $sql .= $sqlwhere;
1087 1087
                 //print $sql;
1088 1088
 
1089
-                $sql .= ' ORDER BY ' . implode(', ', $fields_label);
1089
+                $sql .= ' ORDER BY '.implode(', ', $fields_label);
1090 1090
 
1091
-                AlDolUtils::dol_syslog(get_class($this) . '::showInputField type=sellist', LOG_DEBUG);
1091
+                AlDolUtils::dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG);
1092 1092
                 $resql = Config::$dbEngine->query($sql);
1093 1093
                 if ($resql) {
1094 1094
                     $out .= '<option value="0">&nbsp;</option>';
@@ -1104,7 +1104,7 @@  discard block
 block discarded – undo
1104 1104
                         if (is_array($fields_label)) {
1105 1105
                             $notrans = true;
1106 1106
                             foreach ($fields_label as $field_toshow) {
1107
-                                $labeltoshow .= $obj->$field_toshow . ' ';
1107
+                                $labeltoshow .= $obj->$field_toshow.' ';
1108 1108
                             }
1109 1109
                         } else {
1110 1110
                             $labeltoshow = $obj->{$InfoFieldList[1]};
@@ -1115,12 +1115,12 @@  discard block
 block discarded – undo
1115 1115
                             foreach ($fields_label as $field_toshow) {
1116 1116
                                 $translabel = Globals::$langs->trans($obj->$field_toshow);
1117 1117
                                 if ($translabel != $obj->$field_toshow) {
1118
-                                    $labeltoshow = dol_trunc($translabel, 18) . ' ';
1118
+                                    $labeltoshow = dol_trunc($translabel, 18).' ';
1119 1119
                                 } else {
1120
-                                    $labeltoshow = dol_trunc($obj->$field_toshow, 18) . ' ';
1120
+                                    $labeltoshow = dol_trunc($obj->$field_toshow, 18).' ';
1121 1121
                                 }
1122 1122
                             }
1123
-                            $out .= '<option value="' . $obj->rowid . '" selected>' . $labeltoshow . '</option>';
1123
+                            $out .= '<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
1124 1124
                         } else {
1125 1125
                             if (!$notrans) {
1126 1126
                                 $translabel = Globals::$langs->trans($obj->{$InfoFieldList[1]});
@@ -1133,38 +1133,38 @@  discard block
 block discarded – undo
1133 1133
                             if (empty($labeltoshow))
1134 1134
                                 $labeltoshow = '(not defined)';
1135 1135
                             if ($value == $obj->rowid) {
1136
-                                $out .= '<option value="' . $obj->rowid . '" selected>' . $labeltoshow . '</option>';
1136
+                                $out .= '<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
1137 1137
                             }
1138 1138
 
1139 1139
                             if (!empty($InfoFieldList[3]) && $parentField) {
1140
-                                $parent = $parentName . ':' . $obj->{$parentField};
1140
+                                $parent = $parentName.':'.$obj->{$parentField};
1141 1141
                             }
1142 1142
 
1143
-                            $out .= '<option value="' . $obj->rowid . '"';
1143
+                            $out .= '<option value="'.$obj->rowid.'"';
1144 1144
                             $out .= ($value == $obj->rowid ? ' selected' : '');
1145
-                            $out .= (!empty($parent) ? ' parent="' . $parent . '"' : '');
1146
-                            $out .= '>' . $labeltoshow . '</option>';
1145
+                            $out .= (!empty($parent) ? ' parent="'.$parent.'"' : '');
1146
+                            $out .= '>'.$labeltoshow.'</option>';
1147 1147
                         }
1148 1148
 
1149 1149
                         $i++;
1150 1150
                     }
1151 1151
                     Config::$dbEngine->free($resql);
1152 1152
                 } else {
1153
-                    print 'Error in request ' . $sql . ' ' . Config::$dbEngine->lasterror() . '. Check setup of extra parameters.<br>';
1153
+                    print 'Error in request '.$sql.' '.Config::$dbEngine->lasterror().'. Check setup of extra parameters.<br>';
1154 1154
                 }
1155 1155
             }
1156 1156
             $out .= '</select>';
1157 1157
         } elseif ($type == 'checkbox') {
1158 1158
             $value_arr = explode(',', $value);
1159
-            $out = $form->multiselectarray($keyprefix . $key . $keysuffix, (empty($param['options']) ? null : $param['options']), $value_arr, '', 0, '', 0, '100%');
1159
+            $out = $form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options']) ? null : $param['options']), $value_arr, '', 0, '', 0, '100%');
1160 1160
         } elseif ($type == 'radio') {
1161 1161
             $out = '';
1162 1162
             foreach ($param['options'] as $keyopt => $val) {
1163
-                $out .= '<input class="flat ' . $morecss . '" type="radio" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" ' . ($moreparam ? $moreparam : '');
1164
-                $out .= ' value="' . $keyopt . '"';
1165
-                $out .= ' id="' . $keyprefix . $key . $keysuffix . '_' . $keyopt . '"';
1163
+                $out .= '<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '');
1164
+                $out .= ' value="'.$keyopt.'"';
1165
+                $out .= ' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
1166 1166
                 $out .= ($value == $keyopt ? 'checked' : '');
1167
-                $out .= '/><label for="' . $keyprefix . $key . $keysuffix . '_' . $keyopt . '">' . $val . '</label><br>';
1167
+                $out .= '/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
1168 1168
             }
1169 1169
         } elseif ($type == 'chkbxlst') {
1170 1170
             if (is_array($value)) {
@@ -1183,17 +1183,17 @@  discard block
 block discarded – undo
1183 1183
                 // 2 : key fields name (if differ of rowid)
1184 1184
                 // 3 : key field parent (for dependent lists)
1185 1185
                 // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
1186
-                $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
1186
+                $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
1187 1187
 
1188 1188
                 if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3])) {
1189
-                    list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]);
1190
-                    $keyList .= ', ' . $parentField;
1189
+                    list ($parentName, $parentField) = explode('|', $InfoFieldList[3]);
1190
+                    $keyList .= ', '.$parentField;
1191 1191
                 }
1192 1192
                 if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
1193 1193
                     if (strpos($InfoFieldList[4], 'extra.') !== false) {
1194
-                        $keyList = 'main.' . $InfoFieldList[2] . ' as rowid';
1194
+                        $keyList = 'main.'.$InfoFieldList[2].' as rowid';
1195 1195
                     } else {
1196
-                        $keyList = $InfoFieldList[2] . ' as rowid';
1196
+                        $keyList = $InfoFieldList[2].' as rowid';
1197 1197
                     }
1198 1198
                 }
1199 1199
 
@@ -1204,8 +1204,8 @@  discard block
 block discarded – undo
1204 1204
                 }
1205 1205
 
1206 1206
                 $sqlwhere = '';
1207
-                $sql = 'SELECT ' . $keyList;
1208
-                $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
1207
+                $sql = 'SELECT '.$keyList;
1208
+                $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
1209 1209
                 if (!empty($InfoFieldList[4])) {
1210 1210
 
1211 1211
                     // can use SELECT request
@@ -1229,11 +1229,11 @@  discard block
 block discarded – undo
1229 1229
                             // Init des compteurs
1230 1230
                             $nbPregRepl = $nbPregSel = 0;
1231 1231
                             // On retire toutes les parenthèses sans = avant
1232
-                            $InfoFieldList[4] = preg_replace('#([^=])(\([^)^(]*(' . $word . ')[^)^(]*\))#', '$1 $3 ', $InfoFieldList[4], -1, $nbPregRepl);
1232
+                            $InfoFieldList[4] = preg_replace('#([^=])(\([^)^(]*('.$word.')[^)^(]*\))#', '$1 $3 ', $InfoFieldList[4], -1, $nbPregRepl);
1233 1233
                             // On retire les espaces autour des = et parenthèses
1234 1234
                             $InfoFieldList[4] = preg_replace('# *(=|\(|\)) *#', '$1', $InfoFieldList[4]);
1235 1235
                             // On retire toutes les parenthèses avec = avant
1236
-                            $InfoFieldList[4] = preg_replace('#\b[a-zA-Z0-9-\.-_]+\b=\([^)^(]*(' . $word . ')[^)^(]*\)#', '$1 ', $InfoFieldList[4], -1, $nbPregSel);
1236
+                            $InfoFieldList[4] = preg_replace('#\b[a-zA-Z0-9-\.-_]+\b=\([^)^(]*('.$word.')[^)^(]*\)#', '$1 ', $InfoFieldList[4], -1, $nbPregSel);
1237 1237
                             // On retire les espaces autour des = et parenthèses
1238 1238
                             $InfoFieldList[4] = preg_replace('# *(=|\(|\)) *#', '$1', $InfoFieldList[4]);
1239 1239
 
@@ -1242,7 +1242,7 @@  discard block
 block discarded – undo
1242 1242
                         }
1243 1243
 
1244 1244
                         // Si l'on a un AND ou un OR, avant ou après
1245
-                        preg_match('#(AND|OR|) *(' . $word . ') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
1245
+                        preg_match('#(AND|OR|) *('.$word.') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
1246 1246
                         while (!empty($matchCondition[0])) {
1247 1247
                             // If the two sides differ but are not empty
1248 1248
                             if (!empty($matchCondition[1]) && !empty($matchCondition[3]) && $matchCondition[1] != $matchCondition[3]) {
@@ -1250,10 +1250,10 @@  discard block
 block discarded – undo
1250 1250
                                 $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
1251 1251
                             } else {
1252 1252
                                 if (!empty($matchCondition[1])) {
1253
-                                    $boolCond = (( $matchCondition[1] == "AND" ) ? ' AND 1 ' : ' OR 0 ');
1254
-                                    $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond . $matchCondition[3], $InfoFieldList[4]);
1253
+                                    $boolCond = (($matchCondition[1] == "AND") ? ' AND 1 ' : ' OR 0 ');
1254
+                                    $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond.$matchCondition[3], $InfoFieldList[4]);
1255 1255
                                 } else if (!empty($matchCondition[3])) {
1256
-                                    $boolCond = (( $matchCondition[3] == "AND" ) ? ' 1 AND ' : ' 0 OR');
1256
+                                    $boolCond = (($matchCondition[3] == "AND") ? ' 1 AND ' : ' 0 OR');
1257 1257
                                     $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond, $InfoFieldList[4]);
1258 1258
                                 } else {
1259 1259
                                     $InfoFieldList[4] = 1;
@@ -1261,7 +1261,7 @@  discard block
 block discarded – undo
1261 1261
                             }
1262 1262
 
1263 1263
                             // Si l'on a un AND ou un OR, avant ou après
1264
-                            preg_match('#(AND|OR|) *(' . $word . ') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
1264
+                            preg_match('#(AND|OR|) *('.$word.') *(AND|OR|)#', $InfoFieldList[4], $matchCondition);
1265 1265
                         }
1266 1266
                     } else {
1267 1267
                         $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
@@ -1269,23 +1269,23 @@  discard block
 block discarded – undo
1269 1269
 
1270 1270
                     // We have to join on extrafield table
1271 1271
                     if (strpos($InfoFieldList[4], 'extra') !== false) {
1272
-                        $sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList[0] . '_extrafields as extra';
1273
-                        $sqlwhere .= ' WHERE extra.fk_object=main.' . $InfoFieldList[2] . ' AND ' . $InfoFieldList[4];
1272
+                        $sql .= ' as main, '.MAIN_DB_PREFIX.$InfoFieldList[0].'_extrafields as extra';
1273
+                        $sqlwhere .= ' WHERE extra.fk_object=main.'.$InfoFieldList[2].' AND '.$InfoFieldList[4];
1274 1274
                     } else {
1275
-                        $sqlwhere .= ' WHERE ' . $InfoFieldList[4];
1275
+                        $sqlwhere .= ' WHERE '.$InfoFieldList[4];
1276 1276
                     }
1277 1277
                 } else {
1278 1278
                     $sqlwhere .= ' WHERE 1=1';
1279 1279
                 }
1280 1280
                 // Some tables may have field, some other not. For the moment we disable it.
1281 1281
                 if (in_array($InfoFieldList[0], array('tablewithentity'))) {
1282
-                    $sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
1282
+                    $sqlwhere .= ' AND entity = '.Globals::$conf->entity;
1283 1283
                 }
1284 1284
                 // $sql.=preg_replace('/^ AND /','',$sqlwhere);
1285 1285
                 // print $sql;
1286 1286
 
1287 1287
                 $sql .= $sqlwhere;
1288
-                AlDolUtils::dol_syslog(get_class($this) . '::showInputField type=chkbxlst', LOG_DEBUG);
1288
+                AlDolUtils::dol_syslog(get_class($this).'::showInputField type=chkbxlst', LOG_DEBUG);
1289 1289
                 $resql = Config::$dbEngine->query($sql);
1290 1290
                 if ($resql) {
1291 1291
                     $num = Config::$dbEngine->num_rows($resql);
@@ -1303,7 +1303,7 @@  discard block
 block discarded – undo
1303 1303
                         if (is_array($fields_label)) {
1304 1304
                             $notrans = true;
1305 1305
                             foreach ($fields_label as $field_toshow) {
1306
-                                $labeltoshow .= $obj->$field_toshow . ' ';
1306
+                                $labeltoshow .= $obj->$field_toshow.' ';
1307 1307
                             }
1308 1308
                         } else {
1309 1309
                             $labeltoshow = $obj->{$InfoFieldList[1]};
@@ -1314,9 +1314,9 @@  discard block
 block discarded – undo
1314 1314
                             foreach ($fields_label as $field_toshow) {
1315 1315
                                 $translabel = Globals::$langs->trans($obj->$field_toshow);
1316 1316
                                 if ($translabel != $obj->$field_toshow) {
1317
-                                    $labeltoshow = dol_trunc($translabel, 18) . ' ';
1317
+                                    $labeltoshow = dol_trunc($translabel, 18).' ';
1318 1318
                                 } else {
1319
-                                    $labeltoshow = dol_trunc($obj->$field_toshow, 18) . ' ';
1319
+                                    $labeltoshow = dol_trunc($obj->$field_toshow, 18).' ';
1320 1320
                                 }
1321 1321
                             }
1322 1322
 
@@ -1338,32 +1338,32 @@  discard block
 block discarded – undo
1338 1338
                             }
1339 1339
 
1340 1340
                             if (!empty($InfoFieldList[3]) && $parentField) {
1341
-                                $parent = $parentName . ':' . $obj->{$parentField};
1341
+                                $parent = $parentName.':'.$obj->{$parentField};
1342 1342
                             }
1343 1343
 
1344 1344
                             $data[$obj->rowid] = $labeltoshow;
1345 1345
                         }
1346 1346
 
1347
-                        $i ++;
1347
+                        $i++;
1348 1348
                     }
1349 1349
                     Config::$dbEngine->free($resql);
1350 1350
 
1351
-                    $out = $form->multiselectarray($keyprefix . $key . $keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
1351
+                    $out = $form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
1352 1352
                 } else {
1353
-                    print 'Error in request ' . $sql . ' ' . Config::$dbEngine->lasterror() . '. Check setup of extra parameters.<br>';
1353
+                    print 'Error in request '.$sql.' '.Config::$dbEngine->lasterror().'. Check setup of extra parameters.<br>';
1354 1354
                 }
1355 1355
             }
1356 1356
         } elseif ($type == 'link') {
1357
-            $param_list = array_keys($param['options']);    // $param_list='ObjectName:classPath'
1357
+            $param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
1358 1358
             $showempty = (($required && $default != '') ? 0 : 1);
1359
-            $out = $form->selectForForms($param_list[0], $keyprefix . $key . $keysuffix, $value, $showempty);
1359
+            $out = $form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
1360 1360
         } elseif ($type == 'password') {
1361 1361
             // If prefix is 'search_', field is used as a filter, we use a common text field.
1362 1362
             $out = '<input style="display:none" type="text" name="fakeusernameremembered">'; // Hidden field to reduce impact of evil Google Chrome autopopulate bug.
1363
-            $out .= '<input autocomplete="new-password" type="' . ($keyprefix == 'search_' ? 'text' : 'password') . '" class="flat ' . $morecss . '" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '>';
1363
+            $out .= '<input autocomplete="new-password" type="'.($keyprefix == 'search_' ? 'text' : 'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'>';
1364 1364
         }
1365 1365
         if (!empty($hidden)) {
1366
-            $out = '<input type="hidden" value="' . $value . '" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '"/>';
1366
+            $out = '<input type="hidden" value="'.$value.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'"/>';
1367 1367
         }
1368 1368
         /* Add comments
1369 1369
           if ($type == 'date') $out.=' (YYYY-MM-DD)';
@@ -1398,7 +1398,7 @@  discard block
 block discarded – undo
1398 1398
             $langfile = $this->attributes[$extrafieldsobjectkey]['langfile'][$key];
1399 1399
             $list = dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1);
1400 1400
             $help = $this->attributes[$extrafieldsobjectkey]['help'][$key];
1401
-            $hidden = (empty($list) ? 1 : 0);  // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
1401
+            $hidden = (empty($list) ? 1 : 0); // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
1402 1402
         } else { // Old usage
1403 1403
             $label = $this->attribute_label[$key];
1404 1404
             $type = $this->attribute_type[$key];
@@ -1412,11 +1412,11 @@  discard block
 block discarded – undo
1412 1412
             $langfile = $this->attribute_langfile[$key];
1413 1413
             $list = dol_eval($this->attribute_list[$key], 1);
1414 1414
             $help = ''; // Not supported with old syntax
1415
-            $hidden = (empty($list) ? 1 : 0);  // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
1415
+            $hidden = (empty($list) ? 1 : 0); // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
1416 1416
         }
1417 1417
 
1418 1418
         if ($hidden)
1419
-            return '';  // This is a protection. If field is hidden, we should just not call this method.
1419
+            return ''; // This is a protection. If field is hidden, we should just not call this method.
1420 1420
 
1421 1421
 
1422 1422
 
@@ -1447,7 +1447,7 @@  discard block
 block discarded – undo
1447 1447
             if (!empty($value)) {
1448 1448
                 $checked = ' checked ';
1449 1449
             }
1450
-            $value = '<input type="checkbox" ' . $checked . ' ' . ($moreparam ? $moreparam : '') . ' readonly disabled>';
1450
+            $value = '<input type="checkbox" '.$checked.' '.($moreparam ? $moreparam : '').' readonly disabled>';
1451 1451
         } elseif ($type == 'mail') {
1452 1452
             $value = dol_print_email($value, 0, 0, 0, 64, 1, 1);
1453 1453
         } elseif ($type == 'url') {
@@ -1471,7 +1471,7 @@  discard block
 block discarded – undo
1471 1471
 
1472 1472
             if (count($InfoFieldList) >= 3) {
1473 1473
                 $selectkey = $InfoFieldList[2];
1474
-                $keyList = $InfoFieldList[2] . ' as rowid';
1474
+                $keyList = $InfoFieldList[2].' as rowid';
1475 1475
             }
1476 1476
 
1477 1477
             $fields_label = explode('|', $InfoFieldList[1]);
@@ -1480,22 +1480,22 @@  discard block
 block discarded – undo
1480 1480
                 $keyList .= implode(', ', $fields_label);
1481 1481
             }
1482 1482
 
1483
-            $sql = 'SELECT ' . $keyList;
1484
-            $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
1483
+            $sql = 'SELECT '.$keyList;
1484
+            $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
1485 1485
             if (strpos($InfoFieldList[4], 'extra') !== false) {
1486 1486
                 $sql .= ' as main';
1487 1487
             }
1488 1488
             if ($selectkey == 'rowid' && empty($value)) {
1489
-                $sql .= " WHERE " . $selectkey . "=0";
1489
+                $sql .= " WHERE ".$selectkey."=0";
1490 1490
             } elseif ($selectkey == 'rowid') {
1491
-                $sql .= " WHERE " . $selectkey . "=" . Config::$dbEngine->escape($value);
1491
+                $sql .= " WHERE ".$selectkey."=".Config::$dbEngine->escape($value);
1492 1492
             } else {
1493
-                $sql .= " WHERE " . $selectkey . "='" . Config::$dbEngine->escape($value) . "'";
1493
+                $sql .= " WHERE ".$selectkey."='".Config::$dbEngine->escape($value)."'";
1494 1494
             }
1495 1495
 
1496 1496
             //$sql.= ' AND entity = '.Globals::$conf->entity;
1497 1497
 
1498
-            AlDolUtils::dol_syslog(get_class($this) . ':showOutputField:$type=sellist', LOG_DEBUG);
1498
+            AlDolUtils::dol_syslog(get_class($this).':showOutputField:$type=sellist', LOG_DEBUG);
1499 1499
             $resql = Config::$dbEngine->query($sql);
1500 1500
             if ($resql) {
1501 1501
                 $value = ''; // value was used, so now we reste it to use it to build final output
@@ -1512,9 +1512,9 @@  discard block
 block discarded – undo
1512 1512
                             $translabel = Globals::$langs->trans($obj->$field_toshow);
1513 1513
                         }
1514 1514
                         if ($translabel != $field_toshow) {
1515
-                            $value .= dol_trunc($translabel, 18) . ' ';
1515
+                            $value .= dol_trunc($translabel, 18).' ';
1516 1516
                         } else {
1517
-                            $value .= $obj->$field_toshow . ' ';
1517
+                            $value .= $obj->$field_toshow.' ';
1518 1518
                         }
1519 1519
                     }
1520 1520
                 } else {
@@ -1529,7 +1529,7 @@  discard block
 block discarded – undo
1529 1529
                     }
1530 1530
                 }
1531 1531
             } else
1532
-                AlDolUtils::dol_syslog(get_class($this) . '::showOutputField error ' . Config::$dbEngine->lasterror(), LOG_WARNING);
1532
+                AlDolUtils::dol_syslog(get_class($this).'::showOutputField error '.Config::$dbEngine->lasterror(), LOG_WARNING);
1533 1533
         }
1534 1534
         elseif ($type == 'radio') {
1535 1535
             $value = $param['options'][$value];
@@ -1539,10 +1539,10 @@  discard block
 block discarded – undo
1539 1539
             $toprint = array();
1540 1540
             if (is_array($value_arr)) {
1541 1541
                 foreach ($value_arr as $keyval => $valueval) {
1542
-                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . $param['options'][$valueval] . '</li>';
1542
+                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$param['options'][$valueval].'</li>';
1543 1543
                 }
1544 1544
             }
1545
-            $value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
1545
+            $value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
1546 1546
         } elseif ($type == 'chkbxlst') {
1547 1547
             $value_arr = explode(',', $value);
1548 1548
 
@@ -1554,7 +1554,7 @@  discard block
 block discarded – undo
1554 1554
 
1555 1555
             if (count($InfoFieldList) >= 3) {
1556 1556
                 $selectkey = $InfoFieldList[2];
1557
-                $keyList = $InfoFieldList[2] . ' as rowid';
1557
+                $keyList = $InfoFieldList[2].' as rowid';
1558 1558
             }
1559 1559
 
1560 1560
             $fields_label = explode('|', $InfoFieldList[1]);
@@ -1563,15 +1563,15 @@  discard block
 block discarded – undo
1563 1563
                 $keyList .= implode(', ', $fields_label);
1564 1564
             }
1565 1565
 
1566
-            $sql = 'SELECT ' . $keyList;
1567
-            $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
1566
+            $sql = 'SELECT '.$keyList;
1567
+            $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
1568 1568
             if (strpos($InfoFieldList[4], 'extra') !== false) {
1569 1569
                 $sql .= ' as main';
1570 1570
             }
1571 1571
             // $sql.= " WHERE ".$selectkey."='".Config::$dbEngine->escape($value)."'";
1572 1572
             // $sql.= ' AND entity = '.Globals::$conf->entity;
1573 1573
 
1574
-            AlDolUtils::dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst', LOG_DEBUG);
1574
+            AlDolUtils::dol_syslog(get_class($this).':showOutputField:$type=chkbxlst', LOG_DEBUG);
1575 1575
             $resql = Config::$dbEngine->query($sql);
1576 1576
             if ($resql) {
1577 1577
                 $value = ''; // value was used, so now we reste it to use it to build final output
@@ -1588,9 +1588,9 @@  discard block
 block discarded – undo
1588 1588
                                     $translabel = Globals::$langs->trans($obj->$field_toshow);
1589 1589
                                 }
1590 1590
                                 if ($translabel != $field_toshow) {
1591
-                                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . dol_trunc($translabel, 18) . '</li>';
1591
+                                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
1592 1592
                                 } else {
1593
-                                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . $obj->$field_toshow . '</li>';
1593
+                                    $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
1594 1594
                                 }
1595 1595
                             }
1596 1596
                         } else {
@@ -1599,23 +1599,23 @@  discard block
 block discarded – undo
1599 1599
                                 $translabel = Globals::$langs->trans($obj->{$InfoFieldList[1]});
1600 1600
                             }
1601 1601
                             if ($translabel != $obj->{$InfoFieldList[1]}) {
1602
-                                $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . dol_trunc($translabel, 18) . '</li>';
1602
+                                $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
1603 1603
                             } else {
1604
-                                $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . $obj->{$InfoFieldList[1]} . '</li>';
1604
+                                $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>';
1605 1605
                             }
1606 1606
                         }
1607 1607
                     }
1608 1608
                 }
1609
-                $value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
1609
+                $value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
1610 1610
             } else {
1611
-                AlDolUtils::dol_syslog(get_class($this) . '::showOutputField error ' . Config::$dbEngine->lasterror(), LOG_WARNING);
1611
+                AlDolUtils::dol_syslog(get_class($this).'::showOutputField error '.Config::$dbEngine->lasterror(), LOG_WARNING);
1612 1612
             }
1613 1613
         } elseif ($type == 'link') {
1614 1614
             $out = '';
1615 1615
 
1616 1616
             // Only if something to display (perf)
1617 1617
             if ($value) {  // If we have -1 here, pb is into sert, not into ouptu
1618
-                $param_list = array_keys($param['options']);    // $param_list='ObjectName:classPath'
1618
+                $param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
1619 1619
 
1620 1620
                 $InfoFieldList = explode(":", $param_list[0]);
1621 1621
                 $classname = $InfoFieldList[0];
@@ -1700,7 +1700,7 @@  discard block
 block discarded – undo
1700 1700
     {
1701 1701
         // global $langs;
1702 1702
 
1703
-        $out = '<tr class="trextrafieldseparator trextrafieldseparator' . $key . '"><td colspan="2"><strong>';
1703
+        $out = '<tr class="trextrafieldseparator trextrafieldseparator'.$key.'"><td colspan="2"><strong>';
1704 1704
         $out .= Globals::$langs->trans($this->attributes[$object->table_element]['label'][$key]);
1705 1705
         $out .= '</strong></td></tr>';
1706 1706
         return $out;
@@ -1748,7 +1748,7 @@  discard block
 block discarded – undo
1748 1748
 
1749 1749
                 if ($this->attributes[$object->table_element]['required'][$key]) { // Value is required
1750 1750
                     // Check if empty without using GETPOST, value can be alpha, int, array, etc...
1751
-                    if ((!is_array($_POST["options_" . $key]) && empty($_POST["options_" . $key]) && $_POST["options_" . $key] != '0') || (is_array($_POST["options_" . $key]) && empty($_POST["options_" . $key]))) {
1751
+                    if ((!is_array($_POST["options_".$key]) && empty($_POST["options_".$key]) && $_POST["options_".$key] != '0') || (is_array($_POST["options_".$key]) && empty($_POST["options_".$key]))) {
1752 1752
                         //print 'ccc'.$value.'-'.$this->attributes[$object->table_element]['required'][$key];
1753 1753
                         $nofillrequired++;
1754 1754
                         $error_field_required[] = Globals::$langs->transnoentitiesnoconv($value);
@@ -1758,31 +1758,31 @@  discard block
 block discarded – undo
1758 1758
                 if (in_array($key_type, array('date'))) {
1759 1759
                     // Clean parameters
1760 1760
                     // TODO GMT date in memory must be GMT so we should add gm=true in parameters
1761
-                    $value_key = dol_mktime(0, 0, 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]);
1761
+                    $value_key = dol_mktime(0, 0, 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
1762 1762
                 } elseif (in_array($key_type, array('datetime'))) {
1763 1763
                     // Clean parameters
1764 1764
                     // TODO GMT date in memory must be GMT so we should add gm=true in parameters
1765
-                    $value_key = dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]);
1765
+                    $value_key = dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
1766 1766
                 } else if (in_array($key_type, array('checkbox', 'chkbxlst'))) {
1767
-                    $value_arr = GETPOST("options_" . $key, 'array'); // check if an array
1767
+                    $value_arr = GETPOST("options_".$key, 'array'); // check if an array
1768 1768
                     if (!empty($value_arr)) {
1769 1769
                         $value_key = implode($value_arr, ',');
1770 1770
                     } else {
1771 1771
                         $value_key = '';
1772 1772
                     }
1773 1773
                 } else if (in_array($key_type, array('price', 'double'))) {
1774
-                    $value_arr = GETPOST("options_" . $key, 'alpha');
1774
+                    $value_arr = GETPOST("options_".$key, 'alpha');
1775 1775
                     $value_key = price2num($value_arr);
1776 1776
                 } else {
1777
-                    $value_key = GETPOST("options_" . $key);
1777
+                    $value_key = GETPOST("options_".$key);
1778 1778
                 }
1779 1779
 
1780
-                $object->array_options["options_" . $key] = $value_key;
1780
+                $object->array_options["options_".$key] = $value_key;
1781 1781
             }
1782 1782
 
1783 1783
             if ($nofillrequired) {
1784 1784
                 Globals::$langs->load('errors');
1785
-                setEventMessages(Globals::$langs->trans('ErrorFieldsRequired') . ' : ' . implode(', ', $error_field_required), null, 'errors');
1785
+                setEventMessages(Globals::$langs->trans('ErrorFieldsRequired').' : '.implode(', ', $error_field_required), null, 'errors');
1786 1786
                 return -1;
1787 1787
             } else {
1788 1788
                 return 1;
@@ -1822,20 +1822,20 @@  discard block
 block discarded – undo
1822 1822
 
1823 1823
                 if (in_array($key_type, array('date', 'datetime'))) {
1824 1824
                     // Clean parameters
1825
-                    $value_key = dol_mktime($_POST[$keysuffix . "options_" . $key . $keyprefix . "hour"], $_POST[$keysuffix . "options_" . $key . $keyprefix . "min"], 0, $_POST[$keysuffix . "options_" . $key . $keyprefix . "month"], $_POST[$keysuffix . "options_" . $key . $keyprefix . "day"], $_POST[$keysuffix . "options_" . $key . $keyprefix . "year"]);
1825
+                    $value_key = dol_mktime($_POST[$keysuffix."options_".$key.$keyprefix."hour"], $_POST[$keysuffix."options_".$key.$keyprefix."min"], 0, $_POST[$keysuffix."options_".$key.$keyprefix."month"], $_POST[$keysuffix."options_".$key.$keyprefix."day"], $_POST[$keysuffix."options_".$key.$keyprefix."year"]);
1826 1826
                 } else if (in_array($key_type, array('checkbox', 'chkbxlst'))) {
1827
-                    $value_arr = GETPOST($keysuffix . "options_" . $key . $keyprefix);
1827
+                    $value_arr = GETPOST($keysuffix."options_".$key.$keyprefix);
1828 1828
                     // Make sure we get an array even if there's only one checkbox
1829 1829
                     $value_arr = (array) $value_arr;
1830 1830
                     $value_key = implode(',', $value_arr);
1831 1831
                 } else if (in_array($key_type, array('price', 'double'))) {
1832
-                    $value_arr = GETPOST($keysuffix . "options_" . $key . $keyprefix);
1832
+                    $value_arr = GETPOST($keysuffix."options_".$key.$keyprefix);
1833 1833
                     $value_key = price2num($value_arr);
1834 1834
                 } else {
1835
-                    $value_key = GETPOST($keysuffix . "options_" . $key . $keyprefix);
1835
+                    $value_key = GETPOST($keysuffix."options_".$key.$keyprefix);
1836 1836
                 }
1837 1837
 
1838
-                $array_options[$keysuffix . "options_" . $key] = $value_key; // No keyprefix here. keyprefix is used only for read.
1838
+                $array_options[$keysuffix."options_".$key] = $value_key; // No keyprefix here. keyprefix is used only for read.
1839 1839
             }
1840 1840
 
1841 1841
             return $array_options;
Please login to merge, or discard this patch.
Braces   +176 added lines, -126 removed lines patch added patch discarded remove patch
@@ -172,15 +172,19 @@  discard block
 block discarded – undo
172 172
      */
173 173
     function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique = 0, $required = 0, $default_value = '', $param = '', $alwayseditable = 0, $perms = '', $list = '-1', $help = '', $computed = '', $entity = '', $langfile = '', $enabled = '1')
174 174
     {
175
-        if (empty($attrname))
176
-            return -1;
177
-        if (empty($label))
178
-            return -1;
179
-
180
-        if ($elementtype == 'thirdparty')
181
-            $elementtype = 'societe';
182
-        if ($elementtype == 'contact')
183
-            $elementtype = 'socpeople';
175
+        if (empty($attrname)) {
176
+                    return -1;
177
+        }
178
+        if (empty($label)) {
179
+                    return -1;
180
+        }
181
+
182
+        if ($elementtype == 'thirdparty') {
183
+                    $elementtype = 'societe';
184
+        }
185
+        if ($elementtype == 'contact') {
186
+                    $elementtype = 'socpeople';
187
+        }
184 188
 
185 189
         // Create field into database except for separator type which is not stored in database
186 190
         if ($type != 'separate') {
@@ -195,10 +199,10 @@  discard block
 block discarded – undo
195 199
                 $this->error = '';
196 200
                 $this->errno = 0;
197 201
                 return 1;
198
-            } else
199
-                return -2;
200
-        }
201
-        else {
202
+            } else {
203
+                            return -2;
204
+            }
205
+        } else {
202 206
             return -1;
203 207
         }
204 208
     }
@@ -222,14 +226,17 @@  discard block
 block discarded – undo
222 226
      */
223 227
     private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '')
224 228
     {
225
-        if ($elementtype == 'thirdparty')
226
-            $elementtype = 'societe';
227
-        if ($elementtype == 'contact')
228
-            $elementtype = 'socpeople';
229
+        if ($elementtype == 'thirdparty') {
230
+                    $elementtype = 'societe';
231
+        }
232
+        if ($elementtype == 'contact') {
233
+                    $elementtype = 'socpeople';
234
+        }
229 235
 
230 236
         $table = $elementtype . '_extrafields';
231
-        if ($elementtype == 'categorie')
232
-            $table = 'categories_extrafields';
237
+        if ($elementtype == 'categorie') {
238
+                    $table = 'categories_extrafields';
239
+        }
233 240
 
234 241
         if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9_]*$/", $attrname) && !is_numeric($attrname)) {
235 242
             if ($type == 'boolean') {
@@ -262,8 +269,9 @@  discard block
 block discarded – undo
262 269
             } else {
263 270
                 $typedb = $type;
264 271
                 $lengthdb = $length;
265
-                if ($type == 'varchar' && empty($lengthdb))
266
-                    $lengthdb = '255';
272
+                if ($type == 'varchar' && empty($lengthdb)) {
273
+                                    $lengthdb = '255';
274
+                }
267 275
             }
268 276
             $field_desc = array(
269 277
                 'type' => $typedb,
@@ -318,22 +326,29 @@  discard block
 block discarded – undo
318 326
         // phpcs:enable
319 327
         // global $conf, $user;
320 328
 
321
-        if ($elementtype == 'thirdparty')
322
-            $elementtype = 'societe';
323
-        if ($elementtype == 'contact')
324
-            $elementtype = 'socpeople';
329
+        if ($elementtype == 'thirdparty') {
330
+                    $elementtype = 'societe';
331
+        }
332
+        if ($elementtype == 'contact') {
333
+                    $elementtype = 'socpeople';
334
+        }
325 335
 
326 336
         // Clean parameters
327
-        if (empty($pos))
328
-            $pos = 0;
329
-        if (empty($list))
330
-            $list = '0';
331
-        if (empty($required))
332
-            $required = 0;
333
-        if (empty($unique))
334
-            $unique = 0;
335
-        if (empty($alwayseditable))
336
-            $alwayseditable = 0;
337
+        if (empty($pos)) {
338
+                    $pos = 0;
339
+        }
340
+        if (empty($list)) {
341
+                    $list = '0';
342
+        }
343
+        if (empty($required)) {
344
+                    $required = 0;
345
+        }
346
+        if (empty($unique)) {
347
+                    $unique = 0;
348
+        }
349
+        if (empty($alwayseditable)) {
350
+                    $alwayseditable = 0;
351
+        }
337 352
 
338 353
         if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname) && !is_numeric($attrname)) {
339 354
             if (is_array($param) && count($param) > 0) {
@@ -410,14 +425,17 @@  discard block
 block discarded – undo
410 425
      */
411 426
     function delete($attrname, $elementtype = 'member')
412 427
     {
413
-        if ($elementtype == 'thirdparty')
414
-            $elementtype = 'societe';
415
-        if ($elementtype == 'contact')
416
-            $elementtype = 'socpeople';
428
+        if ($elementtype == 'thirdparty') {
429
+                    $elementtype = 'societe';
430
+        }
431
+        if ($elementtype == 'contact') {
432
+                    $elementtype = 'socpeople';
433
+        }
417 434
 
418 435
         $table = $elementtype . '_extrafields';
419
-        if ($elementtype == 'categorie')
420
-            $table = 'categories_extrafields';
436
+        if ($elementtype == 'categorie') {
437
+                    $table = 'categories_extrafields';
438
+        }
421 439
 
422 440
         $error = 0;
423 441
 
@@ -466,10 +484,12 @@  discard block
 block discarded – undo
466 484
         // phpcs:enable
467 485
         // global $conf;
468 486
 
469
-        if ($elementtype == 'thirdparty')
470
-            $elementtype = 'societe';
471
-        if ($elementtype == 'contact')
472
-            $elementtype = 'socpeople';
487
+        if ($elementtype == 'thirdparty') {
488
+                    $elementtype = 'societe';
489
+        }
490
+        if ($elementtype == 'contact') {
491
+                    $elementtype = 'socpeople';
492
+        }
473 493
 
474 494
         if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) {
475 495
             $sql = "DELETE FROM " . MAIN_DB_PREFIX . "extrafields";
@@ -516,14 +536,17 @@  discard block
 block discarded – undo
516 536
      */
517 537
     function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0)
518 538
     {
519
-        if ($elementtype == 'thirdparty')
520
-            $elementtype = 'societe';
521
-        if ($elementtype == 'contact')
522
-            $elementtype = 'socpeople';
539
+        if ($elementtype == 'thirdparty') {
540
+                    $elementtype = 'societe';
541
+        }
542
+        if ($elementtype == 'contact') {
543
+                    $elementtype = 'socpeople';
544
+        }
523 545
 
524 546
         $table = $elementtype . '_extrafields';
525
-        if ($elementtype == 'categorie')
526
-            $table = 'categories_extrafields';
547
+        if ($elementtype == 'categorie') {
548
+                    $table = 'categories_extrafields';
549
+        }
527 550
 
528 551
         if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) {
529 552
             if ($type == 'boolean') {
@@ -620,24 +643,31 @@  discard block
 block discarded – undo
620 643
         AlDolUtils::dol_syslog(get_class($this) . "::update_label " . $attrname . ", " . $label . ", " . $type . ", " . $size . ", " . $elementtype . ", " . $unique . ", " . $required . ", " . $pos . ", " . $alwayseditable . ", " . $perms . ", " . $list . ", " . $default . ", " . $computed . ", " . $entity . ", " . $langfile . ", " . $enabled . ", " . $totalizable);
621 644
 
622 645
         // Clean parameters
623
-        if ($elementtype == 'thirdparty')
624
-            $elementtype = 'societe';
625
-        if ($elementtype == 'contact')
626
-            $elementtype = 'socpeople';
627
-
628
-        if (empty($pos))
629
-            $pos = 0;
630
-        if (empty($list))
631
-            $list = '0';
646
+        if ($elementtype == 'thirdparty') {
647
+                    $elementtype = 'societe';
648
+        }
649
+        if ($elementtype == 'contact') {
650
+                    $elementtype = 'socpeople';
651
+        }
652
+
653
+        if (empty($pos)) {
654
+                    $pos = 0;
655
+        }
656
+        if (empty($list)) {
657
+                    $list = '0';
658
+        }
632 659
         if (empty($totalizable)) {
633 660
             $totalizable = 0;
634 661
         }
635
-        if (empty($required))
636
-            $required = 0;
637
-        if (empty($unique))
638
-            $unique = 0;
639
-        if (empty($alwayseditable))
640
-            $alwayseditable = 0;
662
+        if (empty($required)) {
663
+                    $required = 0;
664
+        }
665
+        if (empty($unique)) {
666
+                    $unique = 0;
667
+        }
668
+        if (empty($alwayseditable)) {
669
+                    $alwayseditable = 0;
670
+        }
641 671
 
642 672
         if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname)) {
643 673
             Config::$dbEngine->begin();
@@ -741,21 +771,26 @@  discard block
 block discarded – undo
741 771
         // phpcs:enable
742 772
         // global $conf;
743 773
 
744
-        if (empty($elementtype))
745
-            return array();
774
+        if (empty($elementtype)) {
775
+                    return array();
776
+        }
746 777
 
747
-        if ($elementtype == 'thirdparty')
748
-            $elementtype = 'societe';
749
-        if ($elementtype == 'contact')
750
-            $elementtype = 'socpeople';
751
-        if ($elementtype == 'order_supplier')
752
-            $elementtype = 'commande_fournisseur';
778
+        if ($elementtype == 'thirdparty') {
779
+                    $elementtype = 'societe';
780
+        }
781
+        if ($elementtype == 'contact') {
782
+                    $elementtype = 'socpeople';
783
+        }
784
+        if ($elementtype == 'order_supplier') {
785
+                    $elementtype = 'commande_fournisseur';
786
+        }
753 787
 
754 788
         $array_name_label = array();
755 789
 
756 790
         // To avoid conflicts with external modules. TODO Remove this.
757
-        if (!$forceload &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
758
-        return $array_name_label;
791
+        if (!$forceload &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
792
+                return $array_name_label;
793
+        }
759 794
 
760 795
         // Set array of label of entity
761 796
         // TODO Remove completely loading of label. This should be done by presentation.
@@ -776,8 +811,10 @@  discard block
 block discarded – undo
776 811
         $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,totalizable,fielddefault,fieldcomputed,entity,enabled,help";
777 812
         $sql .= " FROM " . MAIN_DB_PREFIX . "extrafields";
778 813
         $sql .= " WHERE entity IN (0," . Globals::$conf->entity . ")";
779
-        if ($elementtype)
780
-            $sql .= " AND elementtype = '" . $elementtype . "'"; // Filed with object->table_element
814
+        if ($elementtype) {
815
+                    $sql .= " AND elementtype = '" . $elementtype . "'";
816
+        }
817
+        // Filed with object->table_element
781 818
         $sql .= " ORDER BY pos";
782 819
 
783 820
         $resql = Config::$dbEngine->select($sql);
@@ -901,10 +938,11 @@  discard block
 block discarded – undo
901 938
         }
902 939
 
903 940
         if ($computed) {
904
-            if (!preg_match('/^search_/', $keyprefix))
905
-                return '<span class="opacitymedium">' . Globals::$langs->trans("AutomaticallyCalculated") . '</span>';
906
-            else
907
-                return '';
941
+            if (!preg_match('/^search_/', $keyprefix)) {
942
+                            return '<span class="opacitymedium">' . Globals::$langs->trans("AutomaticallyCalculated") . '</span>';
943
+            } else {
944
+                            return '';
945
+            }
908 946
         }
909 947
 
910 948
         if (empty($morecss)) {
@@ -938,13 +976,13 @@  discard block
 block discarded – undo
938 976
             $showtime = in_array($type, array('datetime')) ? 1 : 0;
939 977
 
940 978
             // Do not show current date when field not required (see selectDate() method)
941
-            if (!$required && $value == '')
942
-                $value = '-1';
979
+            if (!$required && $value == '') {
980
+                            $value = '-1';
981
+            }
943 982
 
944 983
             // TODO Must also support $moreparam
945 984
             $out = $form->selectDate($value, $keyprefix . $key . $keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
946
-        }
947
-        elseif (in_array($type, array('int', 'integer'))) {
985
+        } elseif (in_array($type, array('int', 'integer'))) {
948 986
             $tmp = explode(',', $size);
949 987
             $newsize = $tmp[0];
950 988
             $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" maxlength="' . $newsize . '" value="' . dol_escape_htmltag($value) . '"' . ($moreparam ? $moreparam : '') . '>';
@@ -996,22 +1034,23 @@  discard block
 block discarded – undo
996 1034
             $out .= '<select class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" ' . ($moreparam ? $moreparam : '') . '>';
997 1035
             $out .= '<option value="0">&nbsp;</option>';
998 1036
             foreach ($param['options'] as $key => $val) {
999
-                if ((string) $key == '')
1000
-                    continue;
1037
+                if ((string) $key == '') {
1038
+                                    continue;
1039
+                }
1001 1040
                 list($val, $parent) = explode('|', $val);
1002 1041
                 $out .= '<option value="' . $key . '"';
1003 1042
                 $out .= (((string) $value == (string) $key) ? ' selected' : '');
1004 1043
                 $out .= (!empty($parent) ? ' parent="' . $parent . '"' : '');
1005 1044
                 $out .= '>';
1006
-                if ($langfile && $val)
1007
-                    $out .= Globals::$langs->trans($val);
1008
-                else
1009
-                    $out .= $val;
1045
+                if ($langfile && $val) {
1046
+                                    $out .= Globals::$langs->trans($val);
1047
+                } else {
1048
+                                    $out .= $val;
1049
+                }
1010 1050
                 $out .= '</option>';
1011 1051
             }
1012 1052
             $out .= '</select>';
1013
-        }
1014
-        elseif ($type == 'sellist') {
1053
+        } elseif ($type == 'sellist') {
1015 1054
             $out = '';
1016 1055
             if (!empty(Globals::$conf->use_javascript_ajax) &&!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
1017 1056
                 include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
@@ -1130,8 +1169,9 @@  discard block
 block discarded – undo
1130 1169
                                     $labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
1131 1170
                                 }
1132 1171
                             }
1133
-                            if (empty($labeltoshow))
1134
-                                $labeltoshow = '(not defined)';
1172
+                            if (empty($labeltoshow)) {
1173
+                                                            $labeltoshow = '(not defined)';
1174
+                            }
1135 1175
                             if ($value == $obj->rowid) {
1136 1176
                                 $out .= '<option value="' . $obj->rowid . '" selected>' . $labeltoshow . '</option>';
1137 1177
                             }
@@ -1330,8 +1370,9 @@  discard block
 block discarded – undo
1330 1370
                                     $labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
1331 1371
                                 }
1332 1372
                             }
1333
-                            if (empty($labeltoshow))
1334
-                                $labeltoshow = '(not defined)';
1373
+                            if (empty($labeltoshow)) {
1374
+                                                            $labeltoshow = '(not defined)';
1375
+                            }
1335 1376
 
1336 1377
                             if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
1337 1378
                                 $data[$obj->rowid] = $labeltoshow;
@@ -1415,8 +1456,10 @@  discard block
 block discarded – undo
1415 1456
             $hidden = (empty($list) ? 1 : 0);  // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
1416 1457
         }
1417 1458
 
1418
-        if ($hidden)
1419
-            return '';  // This is a protection. If field is hidden, we should just not call this method.
1459
+        if ($hidden) {
1460
+                    return '';
1461
+        }
1462
+        // This is a protection. If field is hidden, we should just not call this method.
1420 1463
 
1421 1464
 
1422 1465
 
@@ -1457,12 +1500,12 @@  discard block
 block discarded – undo
1457 1500
         } elseif ($type == 'price') {
1458 1501
             $value = price($value, 0, Globals::$langs, 0, 0, -1, Globals::$conf->currency);
1459 1502
         } elseif ($type == 'select') {
1460
-            if ($langfile && $param['options'][$value])
1461
-                $value = Globals::$langs->trans($param['options'][$value]);
1462
-            else
1463
-                $value = $param['options'][$value];
1464
-        }
1465
-        elseif ($type == 'sellist') {
1503
+            if ($langfile && $param['options'][$value]) {
1504
+                            $value = Globals::$langs->trans($param['options'][$value]);
1505
+            } else {
1506
+                            $value = $param['options'][$value];
1507
+            }
1508
+        } elseif ($type == 'sellist') {
1466 1509
             $param_list = array_keys($param['options']);
1467 1510
             $InfoFieldList = explode(":", $param_list[0]);
1468 1511
 
@@ -1528,10 +1571,10 @@  discard block
 block discarded – undo
1528 1571
                         $value = $obj->{$InfoFieldList[1]};
1529 1572
                     }
1530 1573
                 }
1531
-            } else
1532
-                AlDolUtils::dol_syslog(get_class($this) . '::showOutputField error ' . Config::$dbEngine->lasterror(), LOG_WARNING);
1533
-        }
1534
-        elseif ($type == 'radio') {
1574
+            } else {
1575
+                            AlDolUtils::dol_syslog(get_class($this) . '::showOutputField error ' . Config::$dbEngine->lasterror(), LOG_WARNING);
1576
+            }
1577
+        } elseif ($type == 'radio') {
1535 1578
             $value = $param['options'][$value];
1536 1579
         } elseif ($type == 'checkbox') {
1537 1580
             $value_arr = explode(',', $value);
@@ -1640,8 +1683,9 @@  discard block
 block discarded – undo
1640 1683
             $value = dol_trunc(preg_replace('/./i', '*', $value), 8, 'right', 'UTF-8', 1);
1641 1684
         } else {
1642 1685
             $showsize = round($size);
1643
-            if ($showsize > 48)
1644
-                $showsize = 48;
1686
+            if ($showsize > 48) {
1687
+                            $showsize = 48;
1688
+            }
1645 1689
         }
1646 1690
 
1647 1691
         //print $type.'-'.$size;
@@ -1661,10 +1705,11 @@  discard block
 block discarded – undo
1661 1705
     {
1662 1706
         // global $conf, $langs;
1663 1707
 
1664
-        if (!empty($extrafieldsobjectkey))
1665
-            $type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
1666
-        else
1667
-            $type = $this->attribute_type[$key];
1708
+        if (!empty($extrafieldsobjectkey)) {
1709
+                    $type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
1710
+        } else {
1711
+                    $type = $this->attribute_type[$key];
1712
+        }
1668 1713
 
1669 1714
         $align = '';
1670 1715
 
@@ -1720,18 +1765,21 @@  discard block
 block discarded – undo
1720 1765
         $nofillrequired = ''; // For error when required field left blank
1721 1766
         $error_field_required = array();
1722 1767
 
1723
-        if (is_array($this->attributes[$object->table_element]['label']))
1724
-            $extralabels = $this->attributes[$object->table_element]['label'];
1768
+        if (is_array($this->attributes[$object->table_element]['label'])) {
1769
+                    $extralabels = $this->attributes[$object->table_element]['label'];
1770
+        }
1725 1771
 
1726 1772
         if (is_array($extralabels)) {
1727 1773
             // Get extra fields
1728 1774
             foreach ($extralabels as $key => $value) {
1729
-                if (!empty($onlykey) && $key != $onlykey)
1730
-                    continue;
1775
+                if (!empty($onlykey) && $key != $onlykey) {
1776
+                                    continue;
1777
+                }
1731 1778
 
1732 1779
                 $key_type = $this->attributes[$object->table_element]['type'][$key];
1733
-                if ($key_type == 'separate')
1734
-                    continue;
1780
+                if ($key_type == 'separate') {
1781
+                                    continue;
1782
+                }
1735 1783
 
1736 1784
                 $enabled = 1;
1737 1785
                 if (isset($this->attributes[$object->table_element]['list'][$key])) {
@@ -1741,10 +1789,12 @@  discard block
 block discarded – undo
1741 1789
                 if (isset($this->attributes[$object->table_element]['perms'][$key])) {
1742 1790
                     $perms = dol_eval($this->attributes[$object->table_element]['perms'][$key], 1);
1743 1791
                 }
1744
-                if (empty($enabled))
1745
-                    continue;
1746
-                if (empty($perms))
1747
-                    continue;
1792
+                if (empty($enabled)) {
1793
+                                    continue;
1794
+                }
1795
+                if (empty($perms)) {
1796
+                                    continue;
1797
+                }
1748 1798
 
1749 1799
                 if ($this->attributes[$object->table_element]['required'][$key]) { // Value is required
1750 1800
                     // Check if empty without using GETPOST, value can be alpha, int, array, etc...
Please login to merge, or discard this patch.
Base/User.php 1 patch
Spacing   +336 added lines, -336 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
     public $skype;
56 56
     public $twitter;
57 57
     public $facebook;
58
-    public $job;   // job position
58
+    public $job; // job position
59 59
     public $signature;
60 60
 
61 61
     /**
@@ -64,7 +64,7 @@  discard block
 block discarded – undo
64 64
     public $address;
65 65
     public $zip;
66 66
     public $town;
67
-    public $state_id;  // The state/department
67
+    public $state_id; // The state/department
68 68
     public $state_code;
69 69
     public $state;
70 70
     public $office_phone;
@@ -118,26 +118,26 @@  discard block
 block discarded – undo
118 118
     public $datepreviouslogin;
119 119
     public $photo;
120 120
     public $lang;
121
-    public $rights;                        // Array of permissions user->rights->permx
122
-    public $all_permissions_are_loaded;    // All permission are loaded
123
-    public $nb_rights;              // Number of rights granted to the user
124
-    private $_tab_loaded = array();     // Cache array of already loaded permissions
125
-    public $conf;             // To store personal config
126
-    public $default_values;         // To store default values for user
127
-    public $lastsearch_values_tmp;  // To store current search criterias for user
128
-    public $lastsearch_values;      // To store last saved search criterias for user
129
-    public $users = array();  // To store all tree of users hierarchy
130
-    public $parentof;    // To store an array of all parents for all ids.
121
+    public $rights; // Array of permissions user->rights->permx
122
+    public $all_permissions_are_loaded; // All permission are loaded
123
+    public $nb_rights; // Number of rights granted to the user
124
+    private $_tab_loaded = array(); // Cache array of already loaded permissions
125
+    public $conf; // To store personal config
126
+    public $default_values; // To store default values for user
127
+    public $lastsearch_values_tmp; // To store current search criterias for user
128
+    public $lastsearch_values; // To store last saved search criterias for user
129
+    public $users = array(); // To store all tree of users hierarchy
130
+    public $parentof; // To store an array of all parents for all ids.
131 131
     private $cache_childids;
132
-    public $accountancy_code;   // Accountancy code in prevision of the complete accountancy module
133
-    public $thm;     // Average cost of employee - Used for valuation of time spent
134
-    public $tjm;     // Average cost of employee
135
-    public $salary;     // Monthly salary       - Denormalized value from llx_user_employment
136
-    public $salaryextra;    // Monthly salary extra - Denormalized value from llx_user_employment
137
-    public $weeklyhours;    // Weekly hours         - Denormalized value from llx_user_employment
138
-    public $color;      // Define background color for user in agenda
139
-    public $dateemployment;   // Define date of employment by company
140
-    public $dateemploymentend;  // Define date of employment end by company
132
+    public $accountancy_code; // Accountancy code in prevision of the complete accountancy module
133
+    public $thm; // Average cost of employee - Used for valuation of time spent
134
+    public $tjm; // Average cost of employee
135
+    public $salary; // Monthly salary       - Denormalized value from llx_user_employment
136
+    public $salaryextra; // Monthly salary extra - Denormalized value from llx_user_employment
137
+    public $weeklyhours; // Weekly hours         - Denormalized value from llx_user_employment
138
+    public $color; // Define background color for user in agenda
139
+    public $dateemployment; // Define date of employment by company
140
+    public $dateemploymentend; // Define date of employment end by company
141 141
     public $default_c_exp_tax_cat;
142 142
     public $default_range;
143 143
     public $fields = array(
@@ -212,37 +212,37 @@  discard block
 block discarded – undo
212 212
         $sql .= " u.color,";
213 213
         $sql .= " u.dateemployment, u.dateemploymentend,";
214 214
         $sql .= " u.ref_int, u.ref_ext,";
215
-        $sql .= " u.default_range, u.default_c_exp_tax_cat,";   // Expense report default mode
215
+        $sql .= " u.default_range, u.default_c_exp_tax_cat,"; // Expense report default mode
216 216
         $sql .= " c.code as country_code, c.label as country,";
217 217
         $sql .= " d.code_departement as state_code, d.nom as state";
218
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user as u";
219
-        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as c ON u.fk_country = c.rowid";
220
-        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_departements as d ON u.fk_state = d.rowid";
218
+        $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
219
+        $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON u.fk_country = c.rowid";
220
+        $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as d ON u.fk_state = d.rowid";
221 221
 
222 222
         if ($entity < 0) {
223 223
             if ((empty(Globals::$conf->multicompany->enabled) || empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) && (!empty(Globals::$user->entity))) {
224
-                $sql .= " WHERE u.entity IN (0," . Globals::$conf->entity . ")";
224
+                $sql .= " WHERE u.entity IN (0,".Globals::$conf->entity.")";
225 225
             } else {
226
-                $sql .= " WHERE u.entity IS NOT NULL";    // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database
226
+                $sql .= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database
227 227
             }
228 228
         } else {  // The fetch was forced on an entity
229 229
             if (!empty(Globals::$conf->multicompany->enabled) && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
230
-                $sql .= " WHERE u.entity IS NOT NULL";    // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database
230
+                $sql .= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database
231 231
             } else {
232
-                $sql .= " WHERE u.entity IN (0, " . (($entity != '' && $entity >= 0) ? $entity : Globals::$conf->entity) . ")";   // search in entity provided in parameter
232
+                $sql .= " WHERE u.entity IN (0, ".(($entity != '' && $entity >= 0) ? $entity : Globals::$conf->entity).")"; // search in entity provided in parameter
233 233
             }
234 234
         }
235 235
 
236 236
         if ($sid) {    // permet une recherche du user par son SID ActiveDirectory ou Samba
237 237
 //$sql .= " AND (u.ldap_sid = '" . Config::$dbEngine->escape($sid) . "' OR u.login = '" . Config::$dbEngine->escape($login) . "') LIMIT 1";
238
-            $sql .= " AND (u.ldap_sid = '" . $sid . "' OR u.login = '" . Config::$dbEngine->escape($login) . "') LIMIT 1";
238
+            $sql .= " AND (u.ldap_sid = '".$sid."' OR u.login = '".Config::$dbEngine->escape($login)."') LIMIT 1";
239 239
         } else if ($login) {
240 240
 // $sql .= " AND u.login = '" . Config::$dbEngine->escape($login) . "'";
241
-            $sql .= " AND u.login = '" . $login . "'";
241
+            $sql .= " AND u.login = '".$login."'";
242 242
         } else {
243
-            $sql .= " AND u.rowid = " . $id;
243
+            $sql .= " AND u.rowid = ".$id;
244 244
         }
245
-        $sql .= " ORDER BY u.entity ASC";    // Avoid random result when there is 2 login in 2 different entities
245
+        $sql .= " ORDER BY u.entity ASC"; // Avoid random result when there is 2 login in 2 different entities
246 246
 
247 247
         $result = Config::$dbEngine->select($sql);
248 248
 // echo "<p>SQL in 2477 of User: '$sql'</p>";
@@ -328,7 +328,7 @@  discard block
 block discarded – undo
328 328
                 $this->datelastlogin = $obj->datel;
329 329
                 $this->datepreviouslogin = $obj->datep;
330 330
 
331
-                $this->societe_id = $obj->fk_soc;  // deprecated
331
+                $this->societe_id = $obj->fk_soc; // deprecated
332 332
                 $this->contact_id = $obj->fk_socpeople; // deprecated
333 333
                 $this->socid = $obj->fk_soc;
334 334
                 $this->contactid = $obj->fk_socpeople;
@@ -349,7 +349,7 @@  discard block
 block discarded – undo
349 349
                 $this->fetch_optionals();
350 350
             } else {
351 351
                 $this->error = "USERNOTFOUND";
352
-                AlDolUtils::dol_syslog(get_class($this) . "::fetch user not found", LOG_DEBUG);
352
+                AlDolUtils::dol_syslog(get_class($this)."::fetch user not found", LOG_DEBUG);
353 353
                 return 0;
354 354
             }
355 355
         } else {
@@ -360,9 +360,9 @@  discard block
 block discarded – undo
360 360
 // To get back the global configuration unique to the user
361 361
         if ($loadpersonalconf) {
362 362
 // Load user->conf for user
363
-            $sql = "SELECT param, value FROM " . MAIN_DB_PREFIX . "user_param";
364
-            $sql .= " WHERE fk_user = " . $this->id;
365
-            $sql .= " AND entity = " . Globals::$conf->entity;
363
+            $sql = "SELECT param, value FROM ".MAIN_DB_PREFIX."user_param";
364
+            $sql .= " WHERE fk_user = ".$this->id;
365
+            $sql .= " AND entity = ".Globals::$conf->entity;
366 366
 //DolUtils::dol_syslog(get_class($this).'::fetch load personalized conf', LOG_DEBUG);
367 367
             $resql = Config::$dbEngine->select($sql);
368 368
             if (is_array($resql)) {
@@ -400,9 +400,9 @@  discard block
 block discarded – undo
400 400
 // global $conf;
401 401
 // Load user->default_values for user. TODO Save this in memcached ?
402 402
         $sql = "SELECT rowid, entity, type, page, param, value";
403
-        $sql .= " FROM " . MAIN_DB_PREFIX . "default_values";
404
-        $sql .= " WHERE entity IN (" . ($this->entity > 0 ? $this->entity . ", " : "") . Globals::$conf->entity . ")"; // Entity of user (if defined) + current entity
405
-        $sql .= " AND user_id IN (0" . ($this->id > 0 ? ", " . $this->id : "") . ")";       // User 0 (all) + me (if defined)
403
+        $sql .= " FROM ".MAIN_DB_PREFIX."default_values";
404
+        $sql .= " WHERE entity IN (".($this->entity > 0 ? $this->entity.", " : "").Globals::$conf->entity.")"; // Entity of user (if defined) + current entity
405
+        $sql .= " AND user_id IN (0".($this->id > 0 ? ", ".$this->id : "").")"; // User 0 (all) + me (if defined)
406 406
         $resql = Config::$dbEngine->select($sql);
407 407
         if (is_array($resql)) {
408 408
             foreach ($resql as $array) {
@@ -450,7 +450,7 @@  discard block
 block discarded – undo
450 450
 
451 451
         $entity = (!empty($entity) ? $entity : Globals::$conf->entity);
452 452
 
453
-        AlDolUtils::dol_syslog(get_class($this) . "::addrights $rid, $allmodule, $allperms, $entity");
453
+        AlDolUtils::dol_syslog(get_class($this)."::addrights $rid, $allmodule, $allperms, $entity");
454 454
         $error = 0;
455 455
         $whereforadd = '';
456 456
 
@@ -460,9 +460,9 @@  discard block
 block discarded – undo
460 460
 // Si on a demande ajout d'un droit en particulier, on recupere
461 461
 // les caracteristiques (module, perms et subperms) de ce droit.
462 462
             $sql = "SELECT module, perms, subperms";
463
-            $sql .= " FROM " . MAIN_DB_PREFIX . "rights_def";
464
-            $sql .= " WHERE id = '" . Config::$dbEngine->escape($rid) . "'";
465
-            $sql .= " AND entity = " . $entity;
463
+            $sql .= " FROM ".MAIN_DB_PREFIX."rights_def";
464
+            $sql .= " WHERE id = '".Config::$dbEngine->escape($rid)."'";
465
+            $sql .= " AND entity = ".$entity;
466 466
 
467 467
             $result = Config::$dbEngine->query($sql);
468 468
             if ($result) {
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
             }
477 477
 
478 478
 // Where pour la liste des droits a ajouter
479
-            $whereforadd = "id=" . Config::$dbEngine->escape($rid);
479
+            $whereforadd = "id=".Config::$dbEngine->escape($rid);
480 480
 // Ajout des droits induits
481 481
             if (!empty($subperms)) {
482 482
                 $whereforadd .= " OR (module='$module' AND perms='$perms' AND (subperms='lire' OR subperms='read'))";
@@ -493,9 +493,9 @@  discard block
 block discarded – undo
493 493
                 if ($allmodule == 'allmodules') {
494 494
                     $whereforadd = 'allmodules';
495 495
                 } else {
496
-                    $whereforadd = "module='" . Config::$dbEngine->escape($allmodule) . "'";
496
+                    $whereforadd = "module='".Config::$dbEngine->escape($allmodule)."'";
497 497
                     if (!empty($allperms)) {
498
-                        $whereforadd .= " AND perms='" . Config::$dbEngine->escape($allperms) . "'";
498
+                        $whereforadd .= " AND perms='".Config::$dbEngine->escape($allperms)."'";
499 499
                     }
500 500
                 }
501 501
             }
@@ -505,10 +505,10 @@  discard block
 block discarded – undo
505 505
         if (!empty($whereforadd)) {
506 506
 //print "$module-$perms-$subperms";
507 507
             $sql = "SELECT id";
508
-            $sql .= " FROM " . MAIN_DB_PREFIX . "rights_def";
509
-            $sql .= " WHERE entity = " . $entity;
508
+            $sql .= " FROM ".MAIN_DB_PREFIX."rights_def";
509
+            $sql .= " WHERE entity = ".$entity;
510 510
             if (!empty($whereforadd) && $whereforadd != 'allmodules') {
511
-                $sql .= " AND " . $whereforadd;
511
+                $sql .= " AND ".$whereforadd;
512 512
             }
513 513
 
514 514
             $result = Config::$dbEngine->query($sql);
@@ -519,10 +519,10 @@  discard block
 block discarded – undo
519 519
                     $obj = Config::$dbEngine->fetch_object($result);
520 520
                     $nid = $obj->id;
521 521
 
522
-                    $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user_rights WHERE fk_user = " . $this->id . " AND fk_id=" . $nid . " AND entity = " . $entity;
522
+                    $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_rights WHERE fk_user = ".$this->id." AND fk_id=".$nid." AND entity = ".$entity;
523 523
                     if (!Config::$dbEngine->query($sql))
524 524
                         $error++;
525
-                    $sql = "INSERT INTO " . MAIN_DB_PREFIX . "user_rights (entity, fk_user, fk_id) VALUES (" . $entity . ", " . $this->id . ", " . $nid . ")";
525
+                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_rights (entity, fk_user, fk_id) VALUES (".$entity.", ".$this->id.", ".$nid.")";
526 526
                     if (!Config::$dbEngine->query($sql))
527 527
                         $error++;
528 528
 
@@ -537,7 +537,7 @@  discard block
 block discarded – undo
537 537
 
538 538
         if (!$error && !$notrigger) {
539 539
             Globals::$langs->load("other");
540
-            $this->context = array('audit' => Globals::$langs->trans("PermissionsAdd") . ($rid ? ' (id=' . $rid . ')' : ''));
540
+            $this->context = array('audit' => Globals::$langs->trans("PermissionsAdd").($rid ? ' (id='.$rid.')' : ''));
541 541
 
542 542
 // Call trigger
543 543
             $result = $this->call_trigger('USER_MODIFY', Globals::$user);
@@ -581,9 +581,9 @@  discard block
 block discarded – undo
581 581
 // Si on a demande supression d'un droit en particulier, on recupere
582 582
 // les caracteristiques module, perms et subperms de ce droit.
583 583
             $sql = "SELECT module, perms, subperms";
584
-            $sql .= " FROM " . MAIN_DB_PREFIX . "rights_def";
585
-            $sql .= " WHERE id = '" . Config::$dbEngine->escape($rid) . "'";
586
-            $sql .= " AND entity = " . $entity;
584
+            $sql .= " FROM ".MAIN_DB_PREFIX."rights_def";
585
+            $sql .= " WHERE id = '".Config::$dbEngine->escape($rid)."'";
586
+            $sql .= " AND entity = ".$entity;
587 587
 
588 588
             $result = Config::$dbEngine->query($sql);
589 589
             if ($result) {
@@ -597,7 +597,7 @@  discard block
 block discarded – undo
597 597
             }
598 598
 
599 599
 // Where pour la liste des droits a supprimer
600
-            $wherefordel = "id=" . Config::$dbEngine->escape($rid);
600
+            $wherefordel = "id=".Config::$dbEngine->escape($rid);
601 601
 // Suppression des droits induits
602 602
             if ($subperms == 'lire' || $subperms == 'read') {
603 603
                 $wherefordel .= " OR (module='$module' AND perms='$perms' AND subperms IS NOT NULL)";
@@ -612,9 +612,9 @@  discard block
 block discarded – undo
612 612
                 if ($allmodule == 'allmodules') {
613 613
                     $wherefordel = 'allmodules';
614 614
                 } else {
615
-                    $wherefordel = "module='" . Config::$dbEngine->escape($allmodule) . "'";
615
+                    $wherefordel = "module='".Config::$dbEngine->escape($allmodule)."'";
616 616
                     if (!empty($allperms)) {
617
-                        $whereforadd .= " AND perms='" . Config::$dbEngine->escape($allperms) . "'";
617
+                        $whereforadd .= " AND perms='".Config::$dbEngine->escape($allperms)."'";
618 618
                     }
619 619
                 }
620 620
             }
@@ -624,10 +624,10 @@  discard block
 block discarded – undo
624 624
         if (!empty($wherefordel)) {
625 625
 //print "$module-$perms-$subperms";
626 626
             $sql = "SELECT id";
627
-            $sql .= " FROM " . MAIN_DB_PREFIX . "rights_def";
628
-            $sql .= " WHERE entity = " . $entity;
627
+            $sql .= " FROM ".MAIN_DB_PREFIX."rights_def";
628
+            $sql .= " WHERE entity = ".$entity;
629 629
             if (!empty($wherefordel) && $wherefordel != 'allmodules') {
630
-                $sql .= " AND " . $wherefordel;
630
+                $sql .= " AND ".$wherefordel;
631 631
             }
632 632
 
633 633
             $result = Config::$dbEngine->query($sql);
@@ -638,9 +638,9 @@  discard block
 block discarded – undo
638 638
                     $obj = Config::$dbEngine->fetch_object($result);
639 639
                     $nid = $obj->id;
640 640
 
641
-                    $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user_rights";
642
-                    $sql .= " WHERE fk_user = " . $this->id . " AND fk_id=" . $nid;
643
-                    $sql .= " AND entity = " . $entity;
641
+                    $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_rights";
642
+                    $sql .= " WHERE fk_user = ".$this->id." AND fk_id=".$nid;
643
+                    $sql .= " AND entity = ".$entity;
644 644
                     if (!Config::$dbEngine->query($sql)) {
645 645
                         $error++;
646 646
                     }
@@ -655,7 +655,7 @@  discard block
 block discarded – undo
655 655
 
656 656
         if (!$error && !$notrigger) {
657 657
             Globals::$langs->load("other");
658
-            $this->context = array('audit' => Globals::$langs->trans("PermissionsDelete") . ($rid ? ' (id=' . $rid . ')' : ''));
658
+            $this->context = array('audit' => Globals::$langs->trans("PermissionsDelete").($rid ? ' (id='.$rid.')' : ''));
659 659
 
660 660
 // Call trigger
661 661
             $result = $this->call_trigger('USER_MODIFY', Globals::$user);
@@ -682,7 +682,7 @@  discard block
 block discarded – undo
682 682
      */
683 683
     function clearrights()
684 684
     {
685
-        AlDolUtils::dol_syslog(get_class($this) . "::clearrights reset user->rights");
685
+        AlDolUtils::dol_syslog(get_class($this)."::clearrights reset user->rights");
686 686
         $this->rights = '';
687 687
         $this->all_permissions_are_loaded = false;
688 688
         $this->_tab_loaded = array();
@@ -715,19 +715,19 @@  discard block
 block discarded – undo
715 715
 // Recuperation des droits utilisateurs + recuperation des droits groupes
716 716
 // D'abord les droits utilisateurs
717 717
         $sql = "SELECT DISTINCT r.module, r.perms, r.subperms";
718
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user_rights as ur";
719
-        $sql .= ", " . MAIN_DB_PREFIX . "rights_def as r";
718
+        $sql .= " FROM ".MAIN_DB_PREFIX."user_rights as ur";
719
+        $sql .= ", ".MAIN_DB_PREFIX."rights_def as r";
720 720
         $sql .= " WHERE r.id = ur.fk_id";
721 721
         if (!empty(Globals::$conf->global->MULTICOMPANY_BACKWARD_COMPATIBILITY)) {
722
-            $sql .= " AND r.entity IN (0," . (!empty(Globals::$conf->multicompany->enabled) && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE) ? "1," : "") . Globals::$conf->entity . ")";
722
+            $sql .= " AND r.entity IN (0,".(!empty(Globals::$conf->multicompany->enabled) && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE) ? "1," : "").Globals::$conf->entity.")";
723 723
         } else {
724
-            $sql .= " AND ur.entity = " . Globals::$conf->entity;
724
+            $sql .= " AND ur.entity = ".Globals::$conf->entity;
725 725
         }
726
-        $sql .= " AND ur.fk_user= " . $this->id;
726
+        $sql .= " AND ur.fk_user= ".$this->id;
727 727
         $sql .= " AND r.perms IS NOT NULL";
728 728
         if ($moduletag) {
729 729
 // $sql .= " AND r.module = '" . Config::$dbEngine->escape($moduletag) . "'";
730
-            $sql .= " AND r.module = '" . $moduletag . "'";
730
+            $sql .= " AND r.module = '".$moduletag."'";
731 731
         }
732 732
 
733 733
         $resql = Config::$dbEngine->select($sql);
@@ -768,25 +768,25 @@  discard block
 block discarded – undo
768 768
 
769 769
 // Maintenant les droits groupes
770 770
         $sql = "SELECT DISTINCT r.module, r.perms, r.subperms";
771
-        $sql .= " FROM " . MAIN_DB_PREFIX . "usergroup_rights as gr,";
772
-        $sql .= " " . MAIN_DB_PREFIX . "usergroup_user as gu,";
773
-        $sql .= " " . MAIN_DB_PREFIX . "rights_def as r";
771
+        $sql .= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr,";
772
+        $sql .= " ".MAIN_DB_PREFIX."usergroup_user as gu,";
773
+        $sql .= " ".MAIN_DB_PREFIX."rights_def as r";
774 774
         $sql .= " WHERE r.id = gr.fk_id";
775 775
         if (!empty(Globals::$conf->global->MULTICOMPANY_BACKWARD_COMPATIBILITY)) {
776 776
             if (!empty(Globals::$conf->multicompany->enabled) && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
777
-                $sql .= " AND gu.entity IN (0," . Globals::$conf->entity . ")";
777
+                $sql .= " AND gu.entity IN (0,".Globals::$conf->entity.")";
778 778
             } else {
779
-                $sql .= " AND r.entity = " . Globals::$conf->entity;
779
+                $sql .= " AND r.entity = ".Globals::$conf->entity;
780 780
             }
781 781
         } else {
782
-            $sql .= " AND gr.entity = " . Globals::$conf->entity;
783
-            $sql .= " AND r.entity = " . Globals::$conf->entity;
782
+            $sql .= " AND gr.entity = ".Globals::$conf->entity;
783
+            $sql .= " AND r.entity = ".Globals::$conf->entity;
784 784
         }
785 785
         $sql .= " AND gr.fk_usergroup = gu.fk_usergroup";
786
-        $sql .= " AND gu.fk_user = " . $this->id;
786
+        $sql .= " AND gu.fk_user = ".$this->id;
787 787
         $sql .= " AND r.perms IS NOT NULL";
788 788
         if ($moduletag) {
789
-            $sql .= " AND r.module = '" . $moduletag . "'";
789
+            $sql .= " AND r.module = '".$moduletag."'";
790 790
         }
791 791
 
792 792
         $resql = Config::$dbEngine->select($sql);
@@ -866,12 +866,12 @@  discard block
 block discarded – undo
866 866
         Config::$dbEngine->begin();
867 867
 
868 868
 // Deactivate user
869
-        $sql = "UPDATE " . MAIN_DB_PREFIX . "user";
870
-        $sql .= " SET statut = " . $this->statut;
871
-        $sql .= " WHERE rowid = " . $this->id;
869
+        $sql = "UPDATE ".MAIN_DB_PREFIX."user";
870
+        $sql .= " SET statut = ".$this->statut;
871
+        $sql .= " WHERE rowid = ".$this->id;
872 872
         $result = Config::$dbEngine->query($sql);
873 873
 
874
-        AlDolUtils::dol_syslog(get_class($this) . "::setstatus", LOG_DEBUG);
874
+        AlDolUtils::dol_syslog(get_class($this)."::setstatus", LOG_DEBUG);
875 875
         if ($result) {
876 876
 // Call trigger
877 877
             $result = $this->call_trigger('USER_ENABLEDISABLE', Globals::$user);
@@ -908,7 +908,7 @@  discard block
 block discarded – undo
908 908
         }
909 909
 
910 910
 // Get current categories
911
-        require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
911
+        require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
912 912
         $c = new Categorie(Config::$dbEngine);
913 913
         $existing = $c->containing($this->id, Categorie::TYPE_USER, 'id');
914 914
 
@@ -951,10 +951,10 @@  discard block
 block discarded – undo
951 951
 
952 952
         $this->fetch($this->id);
953 953
 
954
-        AlDolUtils::dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
954
+        AlDolUtils::dol_syslog(get_class($this)."::delete", LOG_DEBUG);
955 955
 
956 956
 // Remove rights
957
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user_rights WHERE fk_user = " . $this->id;
957
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_rights WHERE fk_user = ".$this->id;
958 958
 
959 959
         if (!$error && !Config::$dbEngine->query($sql)) {
960 960
             $error++;
@@ -962,7 +962,7 @@  discard block
 block discarded – undo
962 962
         }
963 963
 
964 964
 // Remove group
965
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "usergroup_user WHERE fk_user  = " . $this->id;
965
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_user WHERE fk_user  = ".$this->id;
966 966
         if (!$error && !Config::$dbEngine->query($sql)) {
967 967
             $error++;
968 968
             $this->error = Config::$dbEngine->lasterror();
@@ -970,7 +970,7 @@  discard block
 block discarded – undo
970 970
 
971 971
 // If contact, remove link
972 972
         if ($this->contact_id) {
973
-            $sql = "UPDATE " . MAIN_DB_PREFIX . "socpeople SET fk_user_creat = null WHERE rowid = " . $this->contact_id;
973
+            $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET fk_user_creat = null WHERE rowid = ".$this->contact_id;
974 974
             if (!$error && !Config::$dbEngine->query($sql)) {
975 975
                 $error++;
976 976
                 $this->error = Config::$dbEngine->lasterror();
@@ -982,14 +982,14 @@  discard block
 block discarded – undo
982 982
             $result = $this->deleteExtraFields();
983 983
             if ($result < 0) {
984 984
                 $error++;
985
-                AlDolUtils::dol_syslog(get_class($this) . "::delete error -4 " . $this->error, LOG_ERR);
985
+                AlDolUtils::dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
986 986
             }
987 987
         }
988 988
 
989 989
 // Remove user
990 990
         if (!$error) {
991
-            $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user WHERE rowid = " . $this->id;
992
-            AlDolUtils::dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
991
+            $sql = "DELETE FROM ".MAIN_DB_PREFIX."user WHERE rowid = ".$this->id;
992
+            AlDolUtils::dol_syslog(get_class($this)."::delete", LOG_DEBUG);
993 993
             if (!Config::$dbEngine->query($sql)) {
994 994
                 $error++;
995 995
                 $this->error = Config::$dbEngine->lasterror();
@@ -1030,7 +1030,7 @@  discard block
 block discarded – undo
1030 1030
         if (!isset($this->entity)) {
1031 1031
             $this->entity = Globals::$conf->entity; // If not defined, we use default value
1032 1032
         }
1033
-        AlDolUtils::dol_syslog(get_class($this) . "::create login=" . $this->login . ", user=" . (is_object(Globals::$user) ? Globals::$user->id : ''), LOG_DEBUG);
1033
+        AlDolUtils::dol_syslog(get_class($this)."::create login=".$this->login.", user=".(is_object(Globals::$user) ? Globals::$user->id : ''), LOG_DEBUG);
1034 1034
 
1035 1035
 // Check parameters
1036 1036
         if (!empty(Globals::$conf->global->USER_MAIL_REQUIRED) && !isValidEMail($this->email)) {
@@ -1049,11 +1049,11 @@  discard block
 block discarded – undo
1049 1049
         $error = 0;
1050 1050
         Config::$dbEngine->begin();
1051 1051
 
1052
-        $sql = "SELECT login FROM " . MAIN_DB_PREFIX . "user";
1053
-        $sql .= " WHERE login ='" . Config::$dbEngine->escape($this->login) . "'";
1054
-        $sql .= " AND entity IN (0," . Config::$dbEngine->escape(Globals::$conf->entity) . ")";
1052
+        $sql = "SELECT login FROM ".MAIN_DB_PREFIX."user";
1053
+        $sql .= " WHERE login ='".Config::$dbEngine->escape($this->login)."'";
1054
+        $sql .= " AND entity IN (0,".Config::$dbEngine->escape(Globals::$conf->entity).")";
1055 1055
 
1056
-        AlDolUtils::dol_syslog(get_class($this) . "::create", LOG_DEBUG);
1056
+        AlDolUtils::dol_syslog(get_class($this)."::create", LOG_DEBUG);
1057 1057
         $resql = Config::$dbEngine->query($sql);
1058 1058
         if ($resql) {
1059 1059
             $num = Config::$dbEngine->num_rows($resql);
@@ -1061,17 +1061,17 @@  discard block
 block discarded – undo
1061 1061
 
1062 1062
             if ($num) {
1063 1063
                 $this->error = 'ErrorLoginAlreadyExists';
1064
-                AlDolUtils::dol_syslog(get_class($this) . "::create " . $this->error, LOG_WARNING);
1064
+                AlDolUtils::dol_syslog(get_class($this)."::create ".$this->error, LOG_WARNING);
1065 1065
                 Config::$dbEngine->rollback();
1066 1066
                 return -6;
1067 1067
             } else {
1068
-                $sql = "INSERT INTO " . MAIN_DB_PREFIX . "user (datec,login,ldap_sid,entity)";
1069
-                $sql .= " VALUES('" . Config::$dbEngine->idate($this->datec) . "','" . Config::$dbEngine->escape($this->login) . "','" . Config::$dbEngine->escape($this->ldap_sid) . "'," . Config::$dbEngine->escape($this->entity) . ")";
1068
+                $sql = "INSERT INTO ".MAIN_DB_PREFIX."user (datec,login,ldap_sid,entity)";
1069
+                $sql .= " VALUES('".Config::$dbEngine->idate($this->datec)."','".Config::$dbEngine->escape($this->login)."','".Config::$dbEngine->escape($this->ldap_sid)."',".Config::$dbEngine->escape($this->entity).")";
1070 1070
                 $result = Config::$dbEngine->query($sql);
1071 1071
 
1072
-                AlDolUtils::dol_syslog(get_class($this) . "::create", LOG_DEBUG);
1072
+                AlDolUtils::dol_syslog(get_class($this)."::create", LOG_DEBUG);
1073 1073
                 if ($result) {
1074
-                    $this->id = Config::$dbEngine->last_insert_id(MAIN_DB_PREFIX . "user");
1074
+                    $this->id = Config::$dbEngine->last_insert_id(MAIN_DB_PREFIX."user");
1075 1075
 
1076 1076
 // Set default rights
1077 1077
                     if ($this->set_default_rights() < 0) {
@@ -1088,7 +1088,7 @@  discard block
 block discarded – undo
1088 1088
                     }
1089 1089
 
1090 1090
                     if (!empty(Globals::$conf->global->STOCK_USERSTOCK_AUTOCREATE)) {
1091
-                        require_once DOL_DOCUMENT_ROOT . '/product/stock/class/entrepot.class.php';
1091
+                        require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
1092 1092
                         Globals::$langs->load("stocks");
1093 1093
                         $entrepot = new Entrepot(Config::$dbEngine);
1094 1094
                         $entrepot->libelle = Globals::$langs->trans("PersonalStock", $this->getFullName(Globals::$langs));
@@ -1112,7 +1112,7 @@  discard block
 block discarded – undo
1112 1112
                         return $this->id;
1113 1113
                     } else {
1114 1114
 //$this->error=$interface->error;
1115
-                        AlDolUtils::dol_syslog(get_class($this) . "::create " . $this->error, LOG_ERR);
1115
+                        AlDolUtils::dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR);
1116 1116
                         Config::$dbEngine->rollback();
1117 1117
                         return -3;
1118 1118
                     }
@@ -1165,7 +1165,7 @@  discard block
 block discarded – undo
1165 1165
         $this->employee = 0;
1166 1166
 
1167 1167
         if (empty($login)) {
1168
-            $login = strtolower(substr($contact->firstname, 0, 4)) . strtolower(substr($contact->lastname, 0, 4));
1168
+            $login = strtolower(substr($contact->firstname, 0, 4)).strtolower(substr($contact->lastname, 0, 4));
1169 1169
         }
1170 1170
         $this->login = $login;
1171 1171
 
@@ -1174,15 +1174,15 @@  discard block
 block discarded – undo
1174 1174
 // Cree et positionne $this->id
1175 1175
         $result = $this->create(Globals::$user);
1176 1176
         if ($result > 0) {
1177
-            $sql = "UPDATE " . MAIN_DB_PREFIX . "user";
1178
-            $sql .= " SET fk_socpeople=" . $contact->id;
1177
+            $sql = "UPDATE ".MAIN_DB_PREFIX."user";
1178
+            $sql .= " SET fk_socpeople=".$contact->id;
1179 1179
             if ($contact->socid) {
1180
-                $sql .= ", fk_soc=" . $contact->socid;
1180
+                $sql .= ", fk_soc=".$contact->socid;
1181 1181
             }
1182
-            $sql .= " WHERE rowid=" . $this->id;
1182
+            $sql .= " WHERE rowid=".$this->id;
1183 1183
             $resql = Config::$dbEngine->query($sql);
1184 1184
 
1185
-            AlDolUtils::dol_syslog(get_class($this) . "::create_from_contact", LOG_DEBUG);
1185
+            AlDolUtils::dol_syslog(get_class($this)."::create_from_contact", LOG_DEBUG);
1186 1186
             if ($resql) {
1187 1187
                 $this->context['createfromcontact'] = 'createfromcontact';
1188 1188
 
@@ -1205,7 +1205,7 @@  discard block
 block discarded – undo
1205 1205
             }
1206 1206
         } else {
1207 1207
 // $this->error deja positionne
1208
-            AlDolUtils::dol_syslog(get_class($this) . "::create_from_contact - 0");
1208
+            AlDolUtils::dol_syslog(get_class($this)."::create_from_contact - 0");
1209 1209
 
1210 1210
             Config::$dbEngine->rollback();
1211 1211
             return $result;
@@ -1239,7 +1239,7 @@  discard block
 block discarded – undo
1239 1239
         $this->country_id = $member->country_id;
1240 1240
 
1241 1241
         if (empty($login)) {
1242
-            $login = strtolower(substr($member->firstname, 0, 4)) . strtolower(substr($member->lastname, 0, 4));
1242
+            $login = strtolower(substr($member->firstname, 0, 4)).strtolower(substr($member->lastname, 0, 4));
1243 1243
         }
1244 1244
         $this->login = $login;
1245 1245
 
@@ -1254,11 +1254,11 @@  discard block
 block discarded – undo
1254 1254
             }
1255 1255
 
1256 1256
             if ($result > 0 && $member->fk_soc) { // If member is linked to a thirdparty
1257
-                $sql = "UPDATE " . MAIN_DB_PREFIX . "user";
1258
-                $sql .= " SET fk_soc=" . $member->fk_soc;
1259
-                $sql .= " WHERE rowid=" . $this->id;
1257
+                $sql = "UPDATE ".MAIN_DB_PREFIX."user";
1258
+                $sql .= " SET fk_soc=".$member->fk_soc;
1259
+                $sql .= " WHERE rowid=".$this->id;
1260 1260
 
1261
-                AlDolUtils::dol_syslog(get_class($this) . "::create_from_member", LOG_DEBUG);
1261
+                AlDolUtils::dol_syslog(get_class($this)."::create_from_member", LOG_DEBUG);
1262 1262
                 $resql = Config::$dbEngine->query($sql);
1263 1263
                 if ($resql) {
1264 1264
                     Config::$dbEngine->commit();
@@ -1293,9 +1293,9 @@  discard block
 block discarded – undo
1293 1293
 // phpcs:enable
1294 1294
         global $conf;
1295 1295
 
1296
-        $sql = "SELECT id FROM " . MAIN_DB_PREFIX . "rights_def";
1296
+        $sql = "SELECT id FROM ".MAIN_DB_PREFIX."rights_def";
1297 1297
         $sql .= " WHERE bydefault = 1";
1298
-        $sql .= " AND entity = " . Globals::$conf->entity;
1298
+        $sql .= " AND entity = ".Globals::$conf->entity;
1299 1299
 
1300 1300
         $resql = Config::$dbEngine->query($sql);
1301 1301
         if ($resql) {
@@ -1312,10 +1312,10 @@  discard block
 block discarded – undo
1312 1312
         $i = 0;
1313 1313
         while ($i < $num) {
1314 1314
 
1315
-            $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user_rights WHERE fk_user = $this->id AND fk_id=$rd[$i]";
1315
+            $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_rights WHERE fk_user = $this->id AND fk_id=$rd[$i]";
1316 1316
             $result = Config::$dbEngine->query($sql);
1317 1317
 
1318
-            $sql = "INSERT INTO " . MAIN_DB_PREFIX . "user_rights (fk_user, fk_id) VALUES ($this->id, $rd[$i])";
1318
+            $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_rights (fk_user, fk_id) VALUES ($this->id, $rd[$i])";
1319 1319
             $result = Config::$dbEngine->query($sql);
1320 1320
             if (!$result) {
1321 1321
                 return -1;
@@ -1343,7 +1343,7 @@  discard block
 block discarded – undo
1343 1343
         $nbrowsaffected = 0;
1344 1344
         $error = 0;
1345 1345
 
1346
-        AlDolUtils::dol_syslog(get_class($this) . "::update notrigger=" . $notrigger . ", nosyncmember=" . $nosyncmember . ", nosyncmemberpass=" . $nosyncmemberpass);
1346
+        AlDolUtils::dol_syslog(get_class($this)."::update notrigger=".$notrigger.", nosyncmember=".$nosyncmember.", nosyncmemberpass=".$nosyncmemberpass);
1347 1347
 
1348 1348
 // Clean parameters
1349 1349
         $this->lastname = trim($this->lastname);
@@ -1371,7 +1371,7 @@  discard block
 block discarded – undo
1371 1371
         $this->job = trim($this->job);
1372 1372
         $this->signature = trim($this->signature);
1373 1373
         $this->note = trim($this->note);
1374
-        $this->openid = trim(empty($this->openid) ? '' : $this->openid);    // Avoid warning
1374
+        $this->openid = trim(empty($this->openid) ? '' : $this->openid); // Avoid warning
1375 1375
         $this->admin = $this->admin ? $this->admin : 0;
1376 1376
         $this->address = empty($this->address) ? '' : $this->address;
1377 1377
         $this->zip = empty($this->zip) ? '' : $this->zip;
@@ -1396,59 +1396,59 @@  discard block
 block discarded – undo
1396 1396
         Config::$dbEngine->begin();
1397 1397
 
1398 1398
 // Update datas
1399
-        $sql = "UPDATE " . MAIN_DB_PREFIX . "user SET";
1400
-        $sql .= " lastname = '" . Config::$dbEngine->escape($this->lastname) . "'";
1401
-        $sql .= ", firstname = '" . Config::$dbEngine->escape($this->firstname) . "'";
1402
-        $sql .= ", employee = " . $this->employee;
1403
-        $sql .= ", login = '" . Config::$dbEngine->escape($this->login) . "'";
1404
-        $sql .= ", api_key = " . ($this->api_key ? "'" . Config::$dbEngine->escape($this->api_key) . "'" : "null");
1405
-        $sql .= ", gender = " . ($this->gender != -1 ? "'" . Config::$dbEngine->escape($this->gender) . "'" : "null"); // 'man' or 'woman'
1406
-        $sql .= ", birth=" . (strval($this->birth) != '' ? "'" . Config::$dbEngine->idate($this->birth) . "'" : 'null');
1399
+        $sql = "UPDATE ".MAIN_DB_PREFIX."user SET";
1400
+        $sql .= " lastname = '".Config::$dbEngine->escape($this->lastname)."'";
1401
+        $sql .= ", firstname = '".Config::$dbEngine->escape($this->firstname)."'";
1402
+        $sql .= ", employee = ".$this->employee;
1403
+        $sql .= ", login = '".Config::$dbEngine->escape($this->login)."'";
1404
+        $sql .= ", api_key = ".($this->api_key ? "'".Config::$dbEngine->escape($this->api_key)."'" : "null");
1405
+        $sql .= ", gender = ".($this->gender != -1 ? "'".Config::$dbEngine->escape($this->gender)."'" : "null"); // 'man' or 'woman'
1406
+        $sql .= ", birth=".(strval($this->birth) != '' ? "'".Config::$dbEngine->idate($this->birth)."'" : 'null');
1407 1407
         if (!empty(Globals::$user->admin)) {
1408
-            $sql .= ", admin = " . $this->admin; // admin flag can be set/unset only by an admin user
1409
-        }
1410
-        $sql .= ", address = '" . Config::$dbEngine->escape($this->address) . "'";
1411
-        $sql .= ", zip = '" . Config::$dbEngine->escape($this->zip) . "'";
1412
-        $sql .= ", town = '" . Config::$dbEngine->escape($this->town) . "'";
1413
-        $sql .= ", fk_state = " . ((!empty($this->state_id) && $this->state_id > 0) ? "'" . Config::$dbEngine->escape($this->state_id) . "'" : "null");
1414
-        $sql .= ", fk_country = " . ((!empty($this->country_id) && $this->country_id > 0) ? "'" . Config::$dbEngine->escape($this->country_id) . "'" : "null");
1415
-        $sql .= ", office_phone = '" . Config::$dbEngine->escape($this->office_phone) . "'";
1416
-        $sql .= ", office_fax = '" . Config::$dbEngine->escape($this->office_fax) . "'";
1417
-        $sql .= ", user_mobile = '" . Config::$dbEngine->escape($this->user_mobile) . "'";
1418
-        $sql .= ", email = '" . Config::$dbEngine->escape($this->email) . "'";
1419
-        $sql .= ", skype = '" . Config::$dbEngine->escape($this->skype) . "'";
1420
-        $sql .= ", twitter = '" . Config::$dbEngine->escape($this->twitter) . "'";
1421
-        $sql .= ", facebook = '" . Config::$dbEngine->escape($this->facebook) . "'";
1422
-        $sql .= ", job = '" . Config::$dbEngine->escape($this->job) . "'";
1423
-        $sql .= ", signature = '" . Config::$dbEngine->escape($this->signature) . "'";
1424
-        $sql .= ", accountancy_code = '" . Config::$dbEngine->escape($this->accountancy_code) . "'";
1425
-        $sql .= ", color = '" . Config::$dbEngine->escape($this->color) . "'";
1426
-        $sql .= ", dateemployment=" . (strval($this->dateemployment) != '' ? "'" . Config::$dbEngine->idate($this->dateemployment) . "'" : 'null');
1427
-        $sql .= ", dateemploymentend=" . (strval($this->dateemploymentend) != '' ? "'" . Config::$dbEngine->idate($this->dateemploymentend) . "'" : 'null');
1428
-        $sql .= ", note = '" . Config::$dbEngine->escape($this->note) . "'";
1429
-        $sql .= ", photo = " . ($this->photo ? "'" . Config::$dbEngine->escape($this->photo) . "'" : "null");
1430
-        $sql .= ", openid = " . ($this->openid ? "'" . Config::$dbEngine->escape($this->openid) . "'" : "null");
1431
-        $sql .= ", fk_user = " . ($this->fk_user > 0 ? "'" . Config::$dbEngine->escape($this->fk_user) . "'" : "null");
1408
+            $sql .= ", admin = ".$this->admin; // admin flag can be set/unset only by an admin user
1409
+        }
1410
+        $sql .= ", address = '".Config::$dbEngine->escape($this->address)."'";
1411
+        $sql .= ", zip = '".Config::$dbEngine->escape($this->zip)."'";
1412
+        $sql .= ", town = '".Config::$dbEngine->escape($this->town)."'";
1413
+        $sql .= ", fk_state = ".((!empty($this->state_id) && $this->state_id > 0) ? "'".Config::$dbEngine->escape($this->state_id)."'" : "null");
1414
+        $sql .= ", fk_country = ".((!empty($this->country_id) && $this->country_id > 0) ? "'".Config::$dbEngine->escape($this->country_id)."'" : "null");
1415
+        $sql .= ", office_phone = '".Config::$dbEngine->escape($this->office_phone)."'";
1416
+        $sql .= ", office_fax = '".Config::$dbEngine->escape($this->office_fax)."'";
1417
+        $sql .= ", user_mobile = '".Config::$dbEngine->escape($this->user_mobile)."'";
1418
+        $sql .= ", email = '".Config::$dbEngine->escape($this->email)."'";
1419
+        $sql .= ", skype = '".Config::$dbEngine->escape($this->skype)."'";
1420
+        $sql .= ", twitter = '".Config::$dbEngine->escape($this->twitter)."'";
1421
+        $sql .= ", facebook = '".Config::$dbEngine->escape($this->facebook)."'";
1422
+        $sql .= ", job = '".Config::$dbEngine->escape($this->job)."'";
1423
+        $sql .= ", signature = '".Config::$dbEngine->escape($this->signature)."'";
1424
+        $sql .= ", accountancy_code = '".Config::$dbEngine->escape($this->accountancy_code)."'";
1425
+        $sql .= ", color = '".Config::$dbEngine->escape($this->color)."'";
1426
+        $sql .= ", dateemployment=".(strval($this->dateemployment) != '' ? "'".Config::$dbEngine->idate($this->dateemployment)."'" : 'null');
1427
+        $sql .= ", dateemploymentend=".(strval($this->dateemploymentend) != '' ? "'".Config::$dbEngine->idate($this->dateemploymentend)."'" : 'null');
1428
+        $sql .= ", note = '".Config::$dbEngine->escape($this->note)."'";
1429
+        $sql .= ", photo = ".($this->photo ? "'".Config::$dbEngine->escape($this->photo)."'" : "null");
1430
+        $sql .= ", openid = ".($this->openid ? "'".Config::$dbEngine->escape($this->openid)."'" : "null");
1431
+        $sql .= ", fk_user = ".($this->fk_user > 0 ? "'".Config::$dbEngine->escape($this->fk_user)."'" : "null");
1432 1432
         if (isset($this->thm) || $this->thm != '') {
1433
-            $sql .= ", thm= " . ($this->thm != '' ? "'" . Config::$dbEngine->escape($this->thm) . "'" : "null");
1433
+            $sql .= ", thm= ".($this->thm != '' ? "'".Config::$dbEngine->escape($this->thm)."'" : "null");
1434 1434
         }
1435 1435
         if (isset($this->tjm) || $this->tjm != '') {
1436
-            $sql .= ", tjm= " . ($this->tjm != '' ? "'" . Config::$dbEngine->escape($this->tjm) . "'" : "null");
1436
+            $sql .= ", tjm= ".($this->tjm != '' ? "'".Config::$dbEngine->escape($this->tjm)."'" : "null");
1437 1437
         }
1438 1438
         if (isset($this->salary) || $this->salary != '') {
1439
-            $sql .= ", salary= " . ($this->salary != '' ? "'" . Config::$dbEngine->escape($this->salary) . "'" : "null");
1439
+            $sql .= ", salary= ".($this->salary != '' ? "'".Config::$dbEngine->escape($this->salary)."'" : "null");
1440 1440
         }
1441 1441
         if (isset($this->salaryextra) || $this->salaryextra != '') {
1442
-            $sql .= ", salaryextra= " . ($this->salaryextra != '' ? "'" . Config::$dbEngine->escape($this->salaryextra) . "'" : "null");
1442
+            $sql .= ", salaryextra= ".($this->salaryextra != '' ? "'".Config::$dbEngine->escape($this->salaryextra)."'" : "null");
1443 1443
         }
1444
-        $sql .= ", weeklyhours= " . ($this->weeklyhours != '' ? "'" . Config::$dbEngine->escape($this->weeklyhours) . "'" : "null");
1445
-        $sql .= ", entity = '" . Config::$dbEngine->escape($this->entity) . "'";
1446
-        $sql .= ", default_range = " . ($this->default_range > 0 ? $this->default_range : 'null');
1447
-        $sql .= ", default_c_exp_tax_cat = " . ($this->default_c_exp_tax_cat > 0 ? $this->default_c_exp_tax_cat : 'null');
1444
+        $sql .= ", weeklyhours= ".($this->weeklyhours != '' ? "'".Config::$dbEngine->escape($this->weeklyhours)."'" : "null");
1445
+        $sql .= ", entity = '".Config::$dbEngine->escape($this->entity)."'";
1446
+        $sql .= ", default_range = ".($this->default_range > 0 ? $this->default_range : 'null');
1447
+        $sql .= ", default_c_exp_tax_cat = ".($this->default_c_exp_tax_cat > 0 ? $this->default_c_exp_tax_cat : 'null');
1448 1448
 
1449
-        $sql .= " WHERE rowid = " . $this->id;
1449
+        $sql .= " WHERE rowid = ".$this->id;
1450 1450
 
1451
-        AlDolUtils::dol_syslog(get_class($this) . "::update", LOG_DEBUG);
1451
+        AlDolUtils::dol_syslog(get_class($this)."::update", LOG_DEBUG);
1452 1452
         $resql = Config::$dbEngine->query($sql);
1453 1453
         if ($resql) {
1454 1454
             $nbrowsaffected += Config::$dbEngine->affected_rows($resql);
@@ -1466,8 +1466,8 @@  discard block
 block discarded – undo
1466 1466
 
1467 1467
 // If user is linked to a member, remove old link to this member
1468 1468
             if ($this->fk_member > 0) {
1469
-                AlDolUtils::dol_syslog(get_class($this) . "::update remove link with member. We will recreate it later", LOG_DEBUG);
1470
-                $sql = "UPDATE " . MAIN_DB_PREFIX . "user SET fk_member = NULL where fk_member = " . $this->fk_member;
1469
+                AlDolUtils::dol_syslog(get_class($this)."::update remove link with member. We will recreate it later", LOG_DEBUG);
1470
+                $sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member = NULL where fk_member = ".$this->fk_member;
1471 1471
                 $resql = Config::$dbEngine->query($sql);
1472 1472
                 if (!$resql) {
1473 1473
                     $this->error = Config::$dbEngine->error();
@@ -1476,8 +1476,8 @@  discard block
 block discarded – undo
1476 1476
                 }
1477 1477
             }
1478 1478
 // Set link to user
1479
-            AlDolUtils::dol_syslog(get_class($this) . "::update set link with member", LOG_DEBUG);
1480
-            $sql = "UPDATE " . MAIN_DB_PREFIX . "user SET fk_member =" . ($this->fk_member > 0 ? $this->fk_member : 'null') . " where rowid = " . $this->id;
1479
+            AlDolUtils::dol_syslog(get_class($this)."::update set link with member", LOG_DEBUG);
1480
+            $sql = "UPDATE ".MAIN_DB_PREFIX."user SET fk_member =".($this->fk_member > 0 ? $this->fk_member : 'null')." where rowid = ".$this->id;
1481 1481
             $resql = Config::$dbEngine->query($sql);
1482 1482
             if (!$resql) {
1483 1483
                 $this->error = Config::$dbEngine->error();
@@ -1487,9 +1487,9 @@  discard block
 block discarded – undo
1487 1487
 
1488 1488
             if ($nbrowsaffected) { // If something has changed in data
1489 1489
                 if ($this->fk_member > 0 && !$nosyncmember) {
1490
-                    AlDolUtils::dol_syslog(get_class($this) . "::update user is linked with a member. We try to update member too.", LOG_DEBUG);
1490
+                    AlDolUtils::dol_syslog(get_class($this)."::update user is linked with a member. We try to update member too.", LOG_DEBUG);
1491 1491
 
1492
-                    require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
1492
+                    require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
1493 1493
 
1494 1494
 // This user is linked with a member, so we also update member information
1495 1495
 // if this is an update.
@@ -1529,7 +1529,7 @@  discard block
 block discarded – undo
1529 1529
                         if ($result < 0) {
1530 1530
                             $this->error = $adh->error;
1531 1531
                             $this->errors = $adh->errors;
1532
-                            AlDolUtils::dol_syslog(get_class($this) . "::update error after calling adh->update to sync it with user: " . $this->error, LOG_ERR);
1532
+                            AlDolUtils::dol_syslog(get_class($this)."::update error after calling adh->update to sync it with user: ".$this->error, LOG_ERR);
1533 1533
                             $error++;
1534 1534
                         }
1535 1535
                     } else {
@@ -1540,9 +1540,9 @@  discard block
 block discarded – undo
1540 1540
                 }
1541 1541
 
1542 1542
                 if ($this->contact_id > 0 && !$nosynccontact) {
1543
-                    AlDolUtils::dol_syslog(get_class($this) . "::update user is linked with a contact. We try to update contact too.", LOG_DEBUG);
1543
+                    AlDolUtils::dol_syslog(get_class($this)."::update user is linked with a contact. We try to update contact too.", LOG_DEBUG);
1544 1544
 
1545
-                    require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
1545
+                    require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
1546 1546
 
1547 1547
 // This user is linked with a contact, so we also update contact information
1548 1548
 // if this is an update.
@@ -1582,7 +1582,7 @@  discard block
 block discarded – undo
1582 1582
                         if ($result < 0) {
1583 1583
                             $this->error = $tmpobj->error;
1584 1584
                             $this->errors = $tmpobj->errors;
1585
-                            AlDolUtils::dol_syslog(get_class($this) . "::update error after calling adh->update to sync it with user: " . $this->error, LOG_ERR);
1585
+                            AlDolUtils::dol_syslog(get_class($this)."::update error after calling adh->update to sync it with user: ".$this->error, LOG_ERR);
1586 1586
                             $error++;
1587 1587
                         }
1588 1588
                     } else {
@@ -1616,7 +1616,7 @@  discard block
 block discarded – undo
1616 1616
                 Config::$dbEngine->commit();
1617 1617
                 return $nbrowsaffected;
1618 1618
             } else {
1619
-                AlDolUtils::dol_syslog(get_class($this) . "::update error=" . $this->error, LOG_ERR);
1619
+                AlDolUtils::dol_syslog(get_class($this)."::update error=".$this->error, LOG_ERR);
1620 1620
                 Config::$dbEngine->rollback();
1621 1621
                 return -1;
1622 1622
             }
@@ -1640,21 +1640,21 @@  discard block
 block discarded – undo
1640 1640
         // $now = AlDolUtils::dol_now();
1641 1641
         $now = date("Y-m-d H:i:s");
1642 1642
 
1643
-        $sql = "UPDATE " . MAIN_DB_PREFIX . "user SET";
1643
+        $sql = "UPDATE ".MAIN_DB_PREFIX."user SET";
1644 1644
         $sql .= " datepreviouslogin = datelastlogin,";
1645 1645
         // $sql .= " datelastlogin = '" . Config::$dbEngine->idate($now) . "',";
1646 1646
         $sql .= " datelastlogin = '{$now}',";
1647
-        $sql .= " tms = tms";    // La date de derniere modif doit changer sauf pour la mise a jour de date de derniere connexion
1648
-        $sql .= " WHERE rowid = " . $this->id;
1647
+        $sql .= " tms = tms"; // La date de derniere modif doit changer sauf pour la mise a jour de date de derniere connexion
1648
+        $sql .= " WHERE rowid = ".$this->id;
1649 1649
 
1650
-        AlDolUtils::dol_syslog(get_class($this) . "::update_last_login_date user->id=" . $this->id . " " . $sql, LOG_DEBUG);
1650
+        AlDolUtils::dol_syslog(get_class($this)."::update_last_login_date user->id=".$this->id." ".$sql, LOG_DEBUG);
1651 1651
         $resql = Config::$dbEngine->exec($sql);
1652 1652
         if ($resql) {
1653 1653
             $this->datepreviouslogin = $this->datelastlogin;
1654 1654
             $this->datelastlogin = $now;
1655 1655
             return 1;
1656 1656
         } else {
1657
-            $this->error = Config::$dbEngine->lasterror() . ' sql=' . $sql;
1657
+            $this->error = Config::$dbEngine->lasterror().' sql='.$sql;
1658 1658
             return -1;
1659 1659
         }
1660 1660
     }
@@ -1672,11 +1672,11 @@  discard block
 block discarded – undo
1672 1672
     function setPassword($user, $password = '', $changelater = 0, $notrigger = 0, $nosyncmember = 0)
1673 1673
     {
1674 1674
 //global $conf, Globals::$langs;
1675
-        require_once DOL_DOCUMENT_ROOT . '/core/lib/security2.lib.php';
1675
+        require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
1676 1676
 
1677 1677
         $error = 0;
1678 1678
 
1679
-        AlDolUtils::dol_syslog(get_class($this) . "::setPassword user=" . Globals::$user->id . " password=" . preg_replace('/./i', '*', $password) . " changelater=" . $changelater . " notrigger=" . $notrigger . " nosyncmember=" . $nosyncmember, LOG_DEBUG);
1679
+        AlDolUtils::dol_syslog(get_class($this)."::setPassword user=".Globals::$user->id." password=".preg_replace('/./i', '*', $password)." changelater=".$changelater." notrigger=".$notrigger." nosyncmember=".$nosyncmember, LOG_DEBUG);
1680 1680
 
1681 1681
 // If new password not provided, we generate one
1682 1682
         if (!$password) {
@@ -1694,17 +1694,17 @@  discard block
 block discarded – undo
1694 1694
 
1695 1695
             Config::$dbEngine->begin();
1696 1696
 
1697
-            $sql = "UPDATE " . MAIN_DB_PREFIX . "user";
1698
-            $sql .= " SET pass_crypted = '" . Config::$dbEngine->escape($password_crypted) . "',";
1697
+            $sql = "UPDATE ".MAIN_DB_PREFIX."user";
1698
+            $sql .= " SET pass_crypted = '".Config::$dbEngine->escape($password_crypted)."',";
1699 1699
             $sql .= " pass_temp = null";
1700 1700
             if (!empty(Globals::$conf->global->DATABASE_PWD_ENCRYPTED)) {
1701 1701
                 $sql .= ", pass = null";
1702 1702
             } else {
1703
-                $sql .= ", pass = '" . Config::$dbEngine->escape($password) . "'";
1703
+                $sql .= ", pass = '".Config::$dbEngine->escape($password)."'";
1704 1704
             }
1705
-            $sql .= " WHERE rowid = " . $this->id;
1705
+            $sql .= " WHERE rowid = ".$this->id;
1706 1706
 
1707
-            AlDolUtils::dol_syslog(get_class($this) . "::setPassword", LOG_DEBUG);
1707
+            AlDolUtils::dol_syslog(get_class($this)."::setPassword", LOG_DEBUG);
1708 1708
             $result = Config::$dbEngine->query($sql);
1709 1709
             if ($result) {
1710 1710
                 if (Config::$dbEngine->affected_rows($result)) {
@@ -1713,7 +1713,7 @@  discard block
 block discarded – undo
1713 1713
                     $this->pass_indatabase_crypted = $password_crypted;
1714 1714
 
1715 1715
                     if ($this->fk_member && !$nosyncmember) {
1716
-                        require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
1716
+                        require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
1717 1717
 
1718 1718
 // This user is linked with a member, so we also update members informations
1719 1719
 // if this is an update.
@@ -1724,7 +1724,7 @@  discard block
 block discarded – undo
1724 1724
                             $result = $adh->setPassword(Globals::$user, $this->pass, (empty(Globals::$conf->global->DATABASE_PWD_ENCRYPTED) ? 0 : 1), 1); // Cryptage non gere dans module adherent
1725 1725
                             if ($result < 0) {
1726 1726
                                 $this->error = $adh->error;
1727
-                                AlDolUtils::dol_syslog(get_class($this) . "::setPassword " . $this->error, LOG_ERR);
1727
+                                AlDolUtils::dol_syslog(get_class($this)."::setPassword ".$this->error, LOG_ERR);
1728 1728
                                 $error++;
1729 1729
                             }
1730 1730
                         } else {
@@ -1733,7 +1733,7 @@  discard block
 block discarded – undo
1733 1733
                         }
1734 1734
                     }
1735 1735
 
1736
-                    AlDolUtils::dol_syslog(get_class($this) . "::setPassword notrigger=" . $notrigger . " error=" . $error, LOG_DEBUG);
1736
+                    AlDolUtils::dol_syslog(get_class($this)."::setPassword notrigger=".$notrigger." error=".$error, LOG_DEBUG);
1737 1737
 
1738 1738
                     if (!$error && !$notrigger) {
1739 1739
 // Call trigger
@@ -1760,11 +1760,11 @@  discard block
 block discarded – undo
1760 1760
         } else {
1761 1761
 // We store clear password in password temporary field.
1762 1762
 // After receiving confirmation link, we will crypt it and store it in pass_crypted
1763
-            $sql = "UPDATE " . MAIN_DB_PREFIX . "user";
1764
-            $sql .= " SET pass_temp = '" . Config::$dbEngine->escape($password) . "'";
1765
-            $sql .= " WHERE rowid = " . $this->id;
1763
+            $sql = "UPDATE ".MAIN_DB_PREFIX."user";
1764
+            $sql .= " SET pass_temp = '".Config::$dbEngine->escape($password)."'";
1765
+            $sql .= " WHERE rowid = ".$this->id;
1766 1766
 
1767
-            AlDolUtils::dol_syslog(get_class($this) . "::setPassword", LOG_DEBUG); // No log
1767
+            AlDolUtils::dol_syslog(get_class($this)."::setPassword", LOG_DEBUG); // No log
1768 1768
             $result = Config::$dbEngine->query($sql);
1769 1769
             if ($result) {
1770 1770
                 return $password;
@@ -1790,7 +1790,7 @@  discard block
 block discarded – undo
1790 1790
 //global $conf, Globals::$langs;
1791 1791
 //global $dolibarr_main_url_root;
1792 1792
 
1793
-        require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
1793
+        require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
1794 1794
 
1795 1795
         $msgishtml = 0;
1796 1796
 
@@ -1815,36 +1815,36 @@  discard block
 block discarded – undo
1815 1815
         $subject = $outputlangs->transnoentitiesnoconv("SubjectNewPassword", $appli);
1816 1816
 
1817 1817
 // Define $urlwithroot
1818
-        $urlwithouturlroot = preg_replace('/' . preg_quote(DOL_URL_ROOT, '/') . '$/i', '', trim($dolibarr_main_url_root));
1819
-        $urlwithroot = $urlwithouturlroot . DOL_URL_ROOT;  // This is to use external domain name found into config file
1818
+        $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
1819
+        $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
1820 1820
 
1821 1821
         if (!$changelater) {
1822
-            $url = $urlwithroot . '/';
1822
+            $url = $urlwithroot.'/';
1823 1823
 
1824
-            $mesg .= $outputlangs->transnoentitiesnoconv("RequestToResetPasswordReceived") . ".\n";
1825
-            $mesg .= $outputlangs->transnoentitiesnoconv("NewKeyIs") . " :\n\n";
1826
-            $mesg .= $outputlangs->transnoentitiesnoconv("Login") . " = " . $this->login . "\n";
1827
-            $mesg .= $outputlangs->transnoentitiesnoconv("Password") . " = " . $password . "\n\n";
1824
+            $mesg .= $outputlangs->transnoentitiesnoconv("RequestToResetPasswordReceived").".\n";
1825
+            $mesg .= $outputlangs->transnoentitiesnoconv("NewKeyIs")." :\n\n";
1826
+            $mesg .= $outputlangs->transnoentitiesnoconv("Login")." = ".$this->login."\n";
1827
+            $mesg .= $outputlangs->transnoentitiesnoconv("Password")." = ".$password."\n\n";
1828 1828
             $mesg .= "\n";
1829 1829
 
1830
-            $mesg .= $outputlangs->transnoentitiesnoconv("ClickHereToGoTo", $appli) . ': ' . $url . "\n\n";
1830
+            $mesg .= $outputlangs->transnoentitiesnoconv("ClickHereToGoTo", $appli).': '.$url."\n\n";
1831 1831
             $mesg .= "--\n";
1832 1832
             $mesg .= Globals::$user->getFullName($outputlangs); // Username that make then sending
1833 1833
 
1834
-            AlDolUtils::dol_syslog(get_class($this) . "::send_password changelater is off, url=" . $url);
1834
+            AlDolUtils::dol_syslog(get_class($this)."::send_password changelater is off, url=".$url);
1835 1835
         } else {
1836
-            $url = $urlwithroot . '/user/passwordforgotten.php?action=validatenewpassword&username=' . $this->login . "&passwordhash=" . dol_hash($password);
1836
+            $url = $urlwithroot.'/user/passwordforgotten.php?action=validatenewpassword&username='.$this->login."&passwordhash=".dol_hash($password);
1837 1837
 
1838
-            $mesg .= $outputlangs->transnoentitiesnoconv("RequestToResetPasswordReceived") . "\n";
1839
-            $mesg .= $outputlangs->transnoentitiesnoconv("NewKeyWillBe") . " :\n\n";
1840
-            $mesg .= $outputlangs->transnoentitiesnoconv("Login") . " = " . $this->login . "\n";
1841
-            $mesg .= $outputlangs->transnoentitiesnoconv("Password") . " = " . $password . "\n\n";
1838
+            $mesg .= $outputlangs->transnoentitiesnoconv("RequestToResetPasswordReceived")."\n";
1839
+            $mesg .= $outputlangs->transnoentitiesnoconv("NewKeyWillBe")." :\n\n";
1840
+            $mesg .= $outputlangs->transnoentitiesnoconv("Login")." = ".$this->login."\n";
1841
+            $mesg .= $outputlangs->transnoentitiesnoconv("Password")." = ".$password."\n\n";
1842 1842
             $mesg .= "\n";
1843
-            $mesg .= $outputlangs->transnoentitiesnoconv("YouMustClickToChange") . " :\n";
1844
-            $mesg .= $url . "\n\n";
1845
-            $mesg .= $outputlangs->transnoentitiesnoconv("ForgetIfNothing") . "\n\n";
1843
+            $mesg .= $outputlangs->transnoentitiesnoconv("YouMustClickToChange")." :\n";
1844
+            $mesg .= $url."\n\n";
1845
+            $mesg .= $outputlangs->transnoentitiesnoconv("ForgetIfNothing")."\n\n";
1846 1846
 
1847
-            AlDolUtils::dol_syslog(get_class($this) . "::send_password changelater is on, url=" . $url);
1847
+            AlDolUtils::dol_syslog(get_class($this)."::send_password changelater is on, url=".$url);
1848 1848
         }
1849 1849
 
1850 1850
         $mailfile = new CMailFile(
@@ -1855,7 +1855,7 @@  discard block
 block discarded – undo
1855 1855
             return 1;
1856 1856
         } else {
1857 1857
             Globals::$langs->trans("errors");
1858
-            $this->error = Globals::$langs->trans("ErrorFailedToSendPassword") . ' ' . $mailfile->error;
1858
+            $this->error = Globals::$langs->trans("ErrorFailedToSendPassword").' '.$mailfile->error;
1859 1859
             return -1;
1860 1860
         }
1861 1861
     }
@@ -1880,8 +1880,8 @@  discard block
 block discarded – undo
1880 1880
     {
1881 1881
 // phpcs:enable
1882 1882
         $sql = "SELECT url, login, pass, poste ";
1883
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user_clicktodial as u";
1884
-        $sql .= " WHERE u.fk_user = " . $this->id;
1883
+        $sql .= " FROM ".MAIN_DB_PREFIX."user_clicktodial as u";
1884
+        $sql .= " WHERE u.fk_user = ".$this->id;
1885 1885
 
1886 1886
         $resql = Config::$dbEngine->query($sql);
1887 1887
         if ($resql) {
@@ -1915,21 +1915,21 @@  discard block
 block discarded – undo
1915 1915
 // phpcs:enable
1916 1916
         Config::$dbEngine->begin();
1917 1917
 
1918
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "user_clicktodial";
1919
-        $sql .= " WHERE fk_user = " . $this->id;
1918
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_clicktodial";
1919
+        $sql .= " WHERE fk_user = ".$this->id;
1920 1920
 
1921
-        AlDolUtils::dol_syslog(get_class($this) . '::update_clicktodial', LOG_DEBUG);
1921
+        AlDolUtils::dol_syslog(get_class($this).'::update_clicktodial', LOG_DEBUG);
1922 1922
         $result = Config::$dbEngine->query($sql);
1923 1923
 
1924
-        $sql = "INSERT INTO " . MAIN_DB_PREFIX . "user_clicktodial";
1924
+        $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_clicktodial";
1925 1925
         $sql .= " (fk_user,url,login,pass,poste)";
1926
-        $sql .= " VALUES (" . $this->id;
1927
-        $sql .= ", '" . Config::$dbEngine->escape($this->clicktodial_url) . "'";
1928
-        $sql .= ", '" . Config::$dbEngine->escape($this->clicktodial_login) . "'";
1929
-        $sql .= ", '" . Config::$dbEngine->escape($this->clicktodial_password) . "'";
1930
-        $sql .= ", '" . Config::$dbEngine->escape($this->clicktodial_poste) . "')";
1926
+        $sql .= " VALUES (".$this->id;
1927
+        $sql .= ", '".Config::$dbEngine->escape($this->clicktodial_url)."'";
1928
+        $sql .= ", '".Config::$dbEngine->escape($this->clicktodial_login)."'";
1929
+        $sql .= ", '".Config::$dbEngine->escape($this->clicktodial_password)."'";
1930
+        $sql .= ", '".Config::$dbEngine->escape($this->clicktodial_poste)."')";
1931 1931
 
1932
-        AlDolUtils::dol_syslog(get_class($this) . '::update_clicktodial', LOG_DEBUG);
1932
+        AlDolUtils::dol_syslog(get_class($this).'::update_clicktodial', LOG_DEBUG);
1933 1933
         $result = Config::$dbEngine->query($sql);
1934 1934
         if ($result) {
1935 1935
             Config::$dbEngine->commit();
@@ -1959,20 +1959,20 @@  discard block
 block discarded – undo
1959 1959
 
1960 1960
         Config::$dbEngine->begin();
1961 1961
 
1962
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "usergroup_user";
1963
-        $sql .= " WHERE fk_user  = " . $this->id;
1964
-        $sql .= " AND fk_usergroup = " . $group;
1965
-        $sql .= " AND entity = " . $entity;
1962
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_user";
1963
+        $sql .= " WHERE fk_user  = ".$this->id;
1964
+        $sql .= " AND fk_usergroup = ".$group;
1965
+        $sql .= " AND entity = ".$entity;
1966 1966
 
1967 1967
         $result = Config::$dbEngine->query($sql);
1968 1968
 
1969
-        $sql = "INSERT INTO " . MAIN_DB_PREFIX . "usergroup_user (entity, fk_user, fk_usergroup)";
1970
-        $sql .= " VALUES (" . $entity . "," . $this->id . "," . $group . ")";
1969
+        $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_user (entity, fk_user, fk_usergroup)";
1970
+        $sql .= " VALUES (".$entity.",".$this->id.",".$group.")";
1971 1971
 
1972 1972
         $result = Config::$dbEngine->query($sql);
1973 1973
         if ($result) {
1974 1974
             if (!$error && !$notrigger) {
1975
-                $this->newgroupid = $group;    // deprecated. Remove this.
1975
+                $this->newgroupid = $group; // deprecated. Remove this.
1976 1976
                 $this->context = array('audit' => Globals::$langs->trans("UserSetInGroup"), 'newgroupid' => $group);
1977 1977
 
1978 1978
 // Call trigger
@@ -1987,7 +1987,7 @@  discard block
 block discarded – undo
1987 1987
                 Config::$dbEngine->commit();
1988 1988
                 return 1;
1989 1989
             } else {
1990
-                AlDolUtils::dol_syslog(get_class($this) . "::SetInGroup " . $this->error, LOG_ERR);
1990
+                AlDolUtils::dol_syslog(get_class($this)."::SetInGroup ".$this->error, LOG_ERR);
1991 1991
                 Config::$dbEngine->rollback();
1992 1992
                 return -2;
1993 1993
             }
@@ -2016,15 +2016,15 @@  discard block
 block discarded – undo
2016 2016
 
2017 2017
         Config::$dbEngine->begin();
2018 2018
 
2019
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "usergroup_user";
2020
-        $sql .= " WHERE fk_user  = " . $this->id;
2021
-        $sql .= " AND fk_usergroup = " . $group;
2022
-        $sql .= " AND entity = " . $entity;
2019
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_user";
2020
+        $sql .= " WHERE fk_user  = ".$this->id;
2021
+        $sql .= " AND fk_usergroup = ".$group;
2022
+        $sql .= " AND entity = ".$entity;
2023 2023
 
2024 2024
         $result = Config::$dbEngine->query($sql);
2025 2025
         if ($result) {
2026 2026
             if (!$error && !$notrigger) {
2027
-                $this->oldgroupid = $group;    // deprecated. Remove this.
2027
+                $this->oldgroupid = $group; // deprecated. Remove this.
2028 2028
                 $this->context = array('audit' => Globals::$langs->trans("UserRemovedFromGroup"), 'oldgroupid' => $group);
2029 2029
 
2030 2030
 // Call trigger
@@ -2040,7 +2040,7 @@  discard block
 block discarded – undo
2040 2040
                 return 1;
2041 2041
             } else {
2042 2042
                 $this->error = $interface->error;
2043
-                AlDolUtils::dol_syslog(get_class($this) . "::RemoveFromGroup " . $this->error, LOG_ERR);
2043
+                AlDolUtils::dol_syslog(get_class($this)."::RemoveFromGroup ".$this->error, LOG_ERR);
2044 2044
                 Config::$dbEngine->rollback();
2045 2045
                 return -2;
2046 2046
             }
@@ -2064,7 +2064,7 @@  discard block
 block discarded – undo
2064 2064
     function getPhotoUrl($width, $height, $cssclass = '', $imagesize = '')
2065 2065
     {
2066 2066
 // $result = '<a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $this->id . '">';
2067
-        $result = '<a href="' . BASE_URI . '?controller=user&method=card&id=' . $this->id . '">';
2067
+        $result = '<a href="'.BASE_URI.'?controller=user&method=card&id='.$this->id.'">';
2068 2068
         $result .= AlForm::showphoto('userphoto', $this, $width, $height, 0, $cssclass, $imagesize);
2069 2069
         $result .= '</a>';
2070 2070
 
@@ -2114,49 +2114,49 @@  discard block
 block discarded – undo
2114 2114
 
2115 2115
 // Info Login
2116 2116
         $label .= '<div class="centpercent">';
2117
-        $label .= '<u>' . Globals::$langs->trans("User") . '</u><br>';
2118
-        $label .= '<b>' . Globals::$langs->trans('Name') . ':</b> ' . $this->getFullName(Globals::$langs, '');
2117
+        $label .= '<u>'.Globals::$langs->trans("User").'</u><br>';
2118
+        $label .= '<b>'.Globals::$langs->trans('Name').':</b> '.$this->getFullName(Globals::$langs, '');
2119 2119
         if (!empty($this->login)) {
2120
-            $label .= '<br><b>' . Globals::$langs->trans('Login') . ':</b> ' . $this->login;
2120
+            $label .= '<br><b>'.Globals::$langs->trans('Login').':</b> '.$this->login;
2121 2121
         }
2122
-        $label .= '<br><b>' . Globals::$langs->trans("EMail") . ':</b> ' . $this->email;
2122
+        $label .= '<br><b>'.Globals::$langs->trans("EMail").':</b> '.$this->email;
2123 2123
         if (!empty($this->admin)) {
2124
-            $label .= '<br><b>' . Globals::$langs->trans("Administrator") . '</b>: ' . AlDolUtils::yn($this->admin);
2124
+            $label .= '<br><b>'.Globals::$langs->trans("Administrator").'</b>: '.AlDolUtils::yn($this->admin);
2125 2125
         }
2126 2126
         if (!empty($this->socid)) { // Add thirdparty for external users
2127 2127
             $thirdpartystatic = new Societe($db);
2128 2128
             $thirdpartystatic->fetch($this->socid);
2129 2129
             if (empty($hidethirdpartylogo)) {
2130
-                $companylink = ' ' . $thirdpartystatic->getNomUrl(2, (($option == 'nolink') ? 'nolink' : '')); // picto only of company
2130
+                $companylink = ' '.$thirdpartystatic->getNomUrl(2, (($option == 'nolink') ? 'nolink' : '')); // picto only of company
2131 2131
             }
2132
-            $company = ' (' . Globals::$langs->trans("Company") . ': ' . $thirdpartystatic->name . ')';
2132
+            $company = ' ('.Globals::$langs->trans("Company").': '.$thirdpartystatic->name.')';
2133 2133
         }
2134
-        $type = ($this->socid ? Globals::$langs->trans("External") . $company : Globals::$langs->trans("Internal"));
2135
-        $label .= '<br><b>' . Globals::$langs->trans("Type") . ':</b> ' . $type;
2136
-        $label .= '<br><b>' . Globals::$langs->trans("Status") . '</b>: ' . $this->getLibStatut(0);
2134
+        $type = ($this->socid ? Globals::$langs->trans("External").$company : Globals::$langs->trans("Internal"));
2135
+        $label .= '<br><b>'.Globals::$langs->trans("Type").':</b> '.$type;
2136
+        $label .= '<br><b>'.Globals::$langs->trans("Status").'</b>: '.$this->getLibStatut(0);
2137 2137
         $label .= '</div>';
2138 2138
         if ($infologin > 0) {
2139 2139
             $label .= '<br>';
2140
-            $label .= '<br><u>' . Globals::$langs->trans("Connection") . '</u>';
2141
-            $label .= '<br><b>' . Globals::$langs->trans("IPAddress") . '</b>: ' . $_SERVER["REMOTE_ADDR"];
2140
+            $label .= '<br><u>'.Globals::$langs->trans("Connection").'</u>';
2141
+            $label .= '<br><b>'.Globals::$langs->trans("IPAddress").'</b>: '.$_SERVER["REMOTE_ADDR"];
2142 2142
             if (!empty(Globals::$conf->global->MAIN_MODULE_MULTICOMPANY)) {
2143
-                $label .= '<br><b>' . Globals::$langs->trans("ConnectedOnMultiCompany") . ':</b> ' . Globals::$conf->entity . ' (user entity ' . $this->entity . ')';
2143
+                $label .= '<br><b>'.Globals::$langs->trans("ConnectedOnMultiCompany").':</b> '.Globals::$conf->entity.' (user entity '.$this->entity.')';
2144 2144
             }
2145
-            $label .= '<br><b>' . Globals::$langs->trans("AuthenticationMode") . ':</b> ' . $_SESSION["dol_authmode"] . (empty($dolibarr_main_demo) ? '' : ' (demo)');
2146
-            $label .= '<br><b>' . Globals::$langs->trans("ConnectedSince") . ':</b> ' . AlDolUtils::dol_print_date($this->datelastlogin, "dayhour", 'tzuser');
2147
-            $label .= '<br><b>' . Globals::$langs->trans("PreviousConnexion") . ':</b> ' . AlDolUtils::dol_print_date($this->datepreviouslogin, "dayhour", 'tzuser');
2148
-            $label .= '<br><b>' . Globals::$langs->trans("CurrentTheme") . ':</b> ' . Globals::$conf->theme;
2149
-            $label .= '<br><b>' . Globals::$langs->trans("CurrentMenuManager") . ':</b> ' . Globals::$menuManager->name;
2145
+            $label .= '<br><b>'.Globals::$langs->trans("AuthenticationMode").':</b> '.$_SESSION["dol_authmode"].(empty($dolibarr_main_demo) ? '' : ' (demo)');
2146
+            $label .= '<br><b>'.Globals::$langs->trans("ConnectedSince").':</b> '.AlDolUtils::dol_print_date($this->datelastlogin, "dayhour", 'tzuser');
2147
+            $label .= '<br><b>'.Globals::$langs->trans("PreviousConnexion").':</b> '.AlDolUtils::dol_print_date($this->datepreviouslogin, "dayhour", 'tzuser');
2148
+            $label .= '<br><b>'.Globals::$langs->trans("CurrentTheme").':</b> '.Globals::$conf->theme;
2149
+            $label .= '<br><b>'.Globals::$langs->trans("CurrentMenuManager").':</b> '.Globals::$menuManager->name;
2150 2150
             $s = AlDolUtils::picto_from_langcode(Globals::$langs->getDefaultLang());
2151
-            $label .= '<br><b>' . Globals::$langs->trans("CurrentUserLanguage") . ':</b> ' . ($s ? $s . ' ' : '') . Globals::$langs->getDefaultLang();
2152
-            $label .= '<br><b>' . Globals::$langs->trans("Browser") . ':</b> ' . Globals::$conf->browser->name . (Globals::$conf->browser->version ? ' ' . Globals::$conf->browser->version : '') . ' (' . $_SERVER['HTTP_USER_AGENT'] . ')';
2153
-            $label .= '<br><b>' . Globals::$langs->trans("Layout") . ':</b> ' . Globals::$conf->browser->layout;
2154
-            $label .= '<br><b>' . Globals::$langs->trans("Screen") . ':</b> ' . $_SESSION['dol_screenwidth'] . ' x ' . $_SESSION['dol_screenheight'];
2151
+            $label .= '<br><b>'.Globals::$langs->trans("CurrentUserLanguage").':</b> '.($s ? $s.' ' : '').Globals::$langs->getDefaultLang();
2152
+            $label .= '<br><b>'.Globals::$langs->trans("Browser").':</b> '.Globals::$conf->browser->name.(Globals::$conf->browser->version ? ' '.Globals::$conf->browser->version : '').' ('.$_SERVER['HTTP_USER_AGENT'].')';
2153
+            $label .= '<br><b>'.Globals::$langs->trans("Layout").':</b> '.Globals::$conf->browser->layout;
2154
+            $label .= '<br><b>'.Globals::$langs->trans("Screen").':</b> '.$_SESSION['dol_screenwidth'].' x '.$_SESSION['dol_screenheight'];
2155 2155
             if (Globals::$conf->browser->layout == 'phone') {
2156
-                $label .= '<br><b>' . Globals::$langs->trans("Phone") . ':</b> ' . Globals::$langs->trans("Yes");
2156
+                $label .= '<br><b>'.Globals::$langs->trans("Phone").':</b> '.Globals::$langs->trans("Yes");
2157 2157
             }
2158 2158
             if (!empty($_SESSION["disablemodules"])) {
2159
-                $label .= '<br><b>' . Globals::$langs->trans("DisabledModules") . ':</b> <br>' . join(', ', explode(',', $_SESSION["disablemodules"]));
2159
+                $label .= '<br><b>'.Globals::$langs->trans("DisabledModules").':</b> <br>'.join(', ', explode(',', $_SESSION["disablemodules"]));
2160 2160
             }
2161 2161
         }
2162 2162
         if ($infologin < 0) {
@@ -2164,10 +2164,10 @@  discard block
 block discarded – undo
2164 2164
         }
2165 2165
 
2166 2166
 // $url = DOL_URL_ROOT . '/user/card.php?id=' . $this->id;
2167
-        $url = BASE_URI . '?controller=user&method=card&id=' . $this->id;
2167
+        $url = BASE_URI.'?controller=user&method=card&id='.$this->id;
2168 2168
         if ($option == 'leave') {
2169 2169
 //$url = DOL_URL_ROOT . '/holiday/list.php?id=' . $this->id;
2170
-            $url = BASE_URI . '?controller=holiday&method=list&id=' . $this->id;
2170
+            $url = BASE_URI.'?controller=holiday&method=list&id='.$this->id;
2171 2171
         }
2172 2172
         if ($option != 'nolink') {
2173 2173
 // Add param to save lastsearch_values or not
@@ -2180,16 +2180,16 @@  discard block
 block discarded – undo
2180 2180
             }
2181 2181
         }
2182 2182
 
2183
-        $linkstart = '<a href="' . $url . '"';
2183
+        $linkstart = '<a href="'.$url.'"';
2184 2184
         $linkclose = "";
2185 2185
         if (empty($notooltip)) {
2186 2186
             if (!empty(Globals::$conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
2187 2187
                 Globals::$langs->load("users");
2188 2188
                 $label = Globals::$langs->trans("ShowUser");
2189
-                $linkclose .= ' alt="' . AlDolUtils::dol_escape_htmltag($label, 1) . '"';
2189
+                $linkclose .= ' alt="'.AlDolUtils::dol_escape_htmltag($label, 1).'"';
2190 2190
             }
2191
-            $linkclose .= ' title="' . AlDolUtils::dol_escape_htmltag($label, 1) . '"';
2192
-            $linkclose .= ' class="classfortooltip' . ($morecss ? ' ' . $morecss : '') . '"';
2191
+            $linkclose .= ' title="'.AlDolUtils::dol_escape_htmltag($label, 1).'"';
2192
+            $linkclose .= ' class="classfortooltip'.($morecss ? ' '.$morecss : '').'"';
2193 2193
 
2194 2194
             /*
2195 2195
               Globals::$hookManager->initHooks(array('userdao'));
@@ -2199,7 +2199,7 @@  discard block
 block discarded – undo
2199 2199
              */
2200 2200
         }
2201 2201
 
2202
-        $linkstart .= $linkclose . '>';
2202
+        $linkstart .= $linkclose.'>';
2203 2203
         $linkend = '</a>';
2204 2204
 
2205 2205
 //if ($withpictoimg == -1) $result.='<div class="nowrap">';
@@ -2211,15 +2211,15 @@  discard block
 block discarded – undo
2211 2211
             }
2212 2212
 // Only picto
2213 2213
             if ($withpictoimg > 0) {
2214
-                $picto = '<!-- picto user --><div class="inline-block nopadding userimg' . ($morecss ? ' ' . $morecss : '') . '">' . img_object('', 'user', $paddafterimage . ' ' . ($notooltip ? '' : 'class="classfortooltip"'), 0, 0, $notooltip ? 0 : 1) . '</div>';
2214
+                $picto = '<!-- picto user --><div class="inline-block nopadding userimg'.($morecss ? ' '.$morecss : '').'">'.img_object('', 'user', $paddafterimage.' '.($notooltip ? '' : 'class="classfortooltip"'), 0, 0, $notooltip ? 0 : 1).'</div>';
2215 2215
             } else { // Picto must be a photo
2216
-                $picto = '<!-- picto photo user --><div class="inline-block nopadding userimg' . ($morecss ? ' ' . $morecss : '') . '"' . ($paddafterimage ? ' ' . $paddafterimage : '') . '>' . AlForm::showphoto('userphoto', $this, 0, 0, 0, 'userphoto' . ($withpictoimg == -3 ? 'small' : ''), 'mini', 0, 1) . '</div>';
2216
+                $picto = '<!-- picto photo user --><div class="inline-block nopadding userimg'.($morecss ? ' '.$morecss : '').'"'.($paddafterimage ? ' '.$paddafterimage : '').'>'.AlForm::showphoto('userphoto', $this, 0, 0, 0, 'userphoto'.($withpictoimg == -3 ? 'small' : ''), 'mini', 0, 1).'</div>';
2217 2217
             }
2218 2218
             $result .= $picto;
2219 2219
         }
2220 2220
         if ($withpictoimg > -2 && $withpictoimg != 2) {
2221 2221
             if (empty(Globals::$conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
2222
-                $result .= '<div class="inline-block nopadding valignmiddle usertext' . ((!isset($this->statut) || $this->statut) ? '' : ' strikefordisabled') . ($morecss ? ' ' . $morecss : '') . '">';
2222
+                $result .= '<div class="inline-block nopadding valignmiddle usertext'.((!isset($this->statut) || $this->statut) ? '' : ' strikefordisabled').($morecss ? ' '.$morecss : '').'">';
2223 2223
             }
2224 2224
             if ($mode == 'login') {
2225 2225
                 $result .= dol_trunc($this->login, $maxlen);
@@ -2239,7 +2239,7 @@  discard block
 block discarded – undo
2239 2239
         global $action;
2240 2240
         Globals::$hookManager->initHooks(array('userdao'));
2241 2241
         $parameters = array('id' => $this->id, 'getnomurl' => $result);
2242
-        $reshook = Globals::$hookManager->executeHooks('getNomUrl', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
2242
+        $reshook = Globals::$hookManager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
2243 2243
         if ($reshook > 0) {
2244 2244
             $result = Globals::$hookManager->resPrint;
2245 2245
         } else {
@@ -2263,7 +2263,7 @@  discard block
 block discarded – undo
2263 2263
         $result = '';
2264 2264
 
2265 2265
 // $linkstart = '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
2266
-        $linkstart = '<a href="' . BASE_URI . '?controller=user&method=card&id=' . $this->id . '">';
2266
+        $linkstart = '<a href="'.BASE_URI.'?controller=user&method=card&id='.$this->id.'">';
2267 2267
         $linkend = '</a>';
2268 2268
 
2269 2269
 //Check user's rights to see an other user
@@ -2273,7 +2273,7 @@  discard block
 block discarded – undo
2273 2273
 
2274 2274
         if ($option == 'xxx') {
2275 2275
 //$linkstart = '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
2276
-            $linkstart = '<a href="' . BASE_URI . '?controller=user&method=card.php&id=' . $this->id . '">';
2276
+            $linkstart = '<a href="'.BASE_URI.'?controller=user&method=card.php&id='.$this->id.'">';
2277 2277
             $linkend = '</a>';
2278 2278
         }
2279 2279
 
@@ -2330,9 +2330,9 @@  discard block
 block discarded – undo
2330 2330
             }
2331 2331
         } elseif ($mode == 2) {
2332 2332
             if ($statut == 1) {
2333
-                return img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"') . ' ' . Globals::$langs->trans('Enabled');
2333
+                return img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"').' '.Globals::$langs->trans('Enabled');
2334 2334
             } elseif ($statut == 0) {
2335
-                return img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"') . ' ' . Globals::$langs->trans('Disabled');
2335
+                return img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"').' '.Globals::$langs->trans('Disabled');
2336 2336
             }
2337 2337
         } elseif ($mode == 3) {
2338 2338
             if ($statut == 1) {
@@ -2342,15 +2342,15 @@  discard block
 block discarded – undo
2342 2342
             }
2343 2343
         } elseif ($mode == 4) {
2344 2344
             if ($statut == 1) {
2345
-                return img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"') . ' ' . Globals::$langs->trans('Enabled');
2345
+                return img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"').' '.Globals::$langs->trans('Enabled');
2346 2346
             } elseif ($statut == 0) {
2347
-                return img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"') . ' ' . Globals::$langs->trans('Disabled');
2347
+                return img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"').' '.Globals::$langs->trans('Disabled');
2348 2348
             }
2349 2349
         } elseif ($mode == 5) {
2350 2350
             if ($statut == 1) {
2351
-                return Globals::$langs->trans('Enabled') . ' ' . img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"');
2351
+                return Globals::$langs->trans('Enabled').' '.img_picto(Globals::$langs->trans('Enabled'), 'statut4', 'class="pictostatus"');
2352 2352
             } elseif ($statut == 0) {
2353
-                return Globals::$langs->trans('Disabled') . ' ' . img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"');
2353
+                return Globals::$langs->trans('Disabled').' '.img_picto(Globals::$langs->trans('Disabled'), 'statut5', 'class="pictostatus"');
2354 2354
             }
2355 2355
         }
2356 2356
     }
@@ -2371,11 +2371,11 @@  discard block
 block discarded – undo
2371 2371
         global $conf;
2372 2372
         $dn = '';
2373 2373
         if ($mode == 0) {
2374
-            $dn = Globals::$conf->global->LDAP_KEY_USERS . "=" . $info[Globals::$conf->global->LDAP_KEY_USERS] . "," . Globals::$conf->global->LDAP_USER_DN;
2374
+            $dn = Globals::$conf->global->LDAP_KEY_USERS."=".$info[Globals::$conf->global->LDAP_KEY_USERS].",".Globals::$conf->global->LDAP_USER_DN;
2375 2375
         } elseif ($mode == 1) {
2376 2376
             $dn = Globals::$conf->global->LDAP_USER_DN;
2377 2377
         } elseif ($mode == 2) {
2378
-            $dn = Globals::$conf->global->LDAP_KEY_USERS . "=" . $info[Globals::$conf->global->LDAP_KEY_USERS];
2378
+            $dn = Globals::$conf->global->LDAP_KEY_USERS."=".$info[Globals::$conf->global->LDAP_KEY_USERS];
2379 2379
         }
2380 2380
         return $dn;
2381 2381
     }
@@ -2573,8 +2573,8 @@  discard block
 block discarded – undo
2573 2573
     {
2574 2574
         $sql = "SELECT u.rowid, u.login as ref, u.datec,";
2575 2575
         $sql .= " u.tms as date_modification, u.entity";
2576
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user as u";
2577
-        $sql .= " WHERE u.rowid = " . $id;
2576
+        $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
2577
+        $sql .= " WHERE u.rowid = ".$id;
2578 2578
 
2579 2579
         $result = Config::$dbEngine->query($sql);
2580 2580
         if ($result) {
@@ -2603,9 +2603,9 @@  discard block
 block discarded – undo
2603 2603
     function getNbOfEMailings()
2604 2604
     {
2605 2605
         $sql = "SELECT count(mc.email) as nb";
2606
-        $sql .= " FROM " . MAIN_DB_PREFIX . "mailing_cibles as mc";
2607
-        $sql .= " WHERE mc.email = '" . Config::$dbEngine->escape($this->email) . "'";
2608
-        $sql .= " AND mc.statut NOT IN (-1,0)";      // -1 erreur, 0 non envoye, 1 envoye avec succes
2606
+        $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
2607
+        $sql .= " WHERE mc.email = '".Config::$dbEngine->escape($this->email)."'";
2608
+        $sql .= " AND mc.statut NOT IN (-1,0)"; // -1 erreur, 0 non envoye, 1 envoye avec succes
2609 2609
 
2610 2610
         $resql = Config::$dbEngine->query($sql);
2611 2611
         if ($resql) {
@@ -2633,19 +2633,19 @@  discard block
 block discarded – undo
2633 2633
         global $conf;
2634 2634
 
2635 2635
         $sql = "SELECT count(rowid) as nb";
2636
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user";
2636
+        $sql .= " FROM ".MAIN_DB_PREFIX."user";
2637 2637
         if ($option == 'superadmin') {
2638 2638
             $sql .= " WHERE entity = 0";
2639 2639
             if ($admin >= 0) {
2640
-                $sql .= " AND admin = " . $admin;
2640
+                $sql .= " AND admin = ".$admin;
2641 2641
             }
2642 2642
         } else {
2643
-            $sql .= " WHERE entity IN (" . getEntity('user', 0) . ")";
2643
+            $sql .= " WHERE entity IN (".getEntity('user', 0).")";
2644 2644
             if ($limitTo == 'active') {
2645 2645
                 $sql .= " AND statut = 1";
2646 2646
             }
2647 2647
             if ($admin >= 0) {
2648
-                $sql .= " AND admin = " . $admin;
2648
+                $sql .= " AND admin = ".$admin;
2649 2649
             }
2650 2650
         }
2651 2651
 
@@ -2696,7 +2696,7 @@  discard block
 block discarded – undo
2696 2696
 
2697 2697
         $result = $this->update(Globals::$user);
2698 2698
 
2699
-        AlDolUtils::dol_syslog(get_class($this) . "::update_ldap2dolibarr result=" . $result, LOG_DEBUG);
2699
+        AlDolUtils::dol_syslog(get_class($this)."::update_ldap2dolibarr result=".$result, LOG_DEBUG);
2700 2700
 
2701 2701
         return $result;
2702 2702
     }
@@ -2711,10 +2711,10 @@  discard block
 block discarded – undo
2711 2711
     function get_children()
2712 2712
     {
2713 2713
 // phpcs:enable
2714
-        $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "user";
2715
-        $sql .= " WHERE fk_user = " . $this->id;
2714
+        $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."user";
2715
+        $sql .= " WHERE fk_user = ".$this->id;
2716 2716
 
2717
-        AlDolUtils::dol_syslog(get_class($this) . "::get_children result=" . $result, LOG_DEBUG);
2717
+        AlDolUtils::dol_syslog(get_class($this)."::get_children result=".$result, LOG_DEBUG);
2718 2718
         $res = Config::$dbEngine->query($sql);
2719 2719
         if ($res) {
2720 2720
             $this->users = array();
@@ -2743,11 +2743,11 @@  discard block
 block discarded – undo
2743 2743
 
2744 2744
 // Load array[child]=parent
2745 2745
         $sql = "SELECT fk_user as id_parent, rowid as id_son";
2746
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user";
2746
+        $sql .= " FROM ".MAIN_DB_PREFIX."user";
2747 2747
         $sql .= " WHERE fk_user <> 0";
2748
-        $sql .= " AND entity IN (" . getEntity('user') . ")";
2748
+        $sql .= " AND entity IN (".getEntity('user').")";
2749 2749
 
2750
-        AlDolUtils::dol_syslog(get_class($this) . "::loadParentOf", LOG_DEBUG);
2750
+        AlDolUtils::dol_syslog(get_class($this)."::loadParentOf", LOG_DEBUG);
2751 2751
         $resql = Config::$dbEngine->query($sql);
2752 2752
         if ($resql) {
2753 2753
             while ($obj = Config::$dbEngine->fetch_object($resql)) {
@@ -2789,20 +2789,20 @@  discard block
 block discarded – undo
2789 2789
 
2790 2790
 // Init $this->users array
2791 2791
         $sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.fk_soc, u.login, u.email, u.gender, u.admin, u.statut, u.photo, u.entity"; // Distinct reduce pb with old tables with duplicates
2792
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user as u";
2792
+        $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
2793 2793
 // Add fields from hooks
2794 2794
         $parameters = array();
2795
-        $reshook = Globals::$hookManager->executeHooks('printUserListWhere', $parameters);    // Note that $action and $object may have been modified by hook
2795
+        $reshook = Globals::$hookManager->executeHooks('printUserListWhere', $parameters); // Note that $action and $object may have been modified by hook
2796 2796
         if ($reshook > 0) {
2797 2797
             $sql .= Globals::$hookManager->resPrint;
2798 2798
         } else {
2799
-            $sql .= " WHERE u.entity IN (" . getEntity('user') . ")";
2799
+            $sql .= " WHERE u.entity IN (".getEntity('user').")";
2800 2800
         }
2801 2801
         if ($filter) {
2802
-            $sql .= " AND " . $filter;
2802
+            $sql .= " AND ".$filter;
2803 2803
         }
2804 2804
 
2805
-        AlDolUtils::dol_syslog(get_class($this) . "::get_full_tree get user list", LOG_DEBUG);
2805
+        AlDolUtils::dol_syslog(get_class($this)."::get_full_tree get user list", LOG_DEBUG);
2806 2806
         $resql = Config::$dbEngine->query($sql);
2807 2807
         if ($resql) {
2808 2808
             $i = 0;
@@ -2828,7 +2828,7 @@  discard block
 block discarded – undo
2828 2828
         }
2829 2829
 
2830 2830
 // We add the fullpath property to each elements of first level (no parent exists)
2831
-        AlDolUtils::dol_syslog(get_class($this) . "::get_full_tree call to build_path_from_id_user", LOG_DEBUG);
2831
+        AlDolUtils::dol_syslog(get_class($this)."::get_full_tree call to build_path_from_id_user", LOG_DEBUG);
2832 2832
         foreach ($this->users as $key => $val) {
2833 2833
             $result = $this->build_path_from_id_user($key, 0); // Process a branch from the root user key (this user has no parent)
2834 2834
             if ($result < 0) {
@@ -2840,18 +2840,18 @@  discard block
 block discarded – undo
2840 2840
 // Exclude leaf including $deleteafterid from tree
2841 2841
         if ($deleteafterid) {
2842 2842
 //print "Look to discard user ".$deleteafterid."\n";
2843
-            $keyfilter1 = '^' . $deleteafterid . '$';
2844
-            $keyfilter2 = '_' . $deleteafterid . '$';
2845
-            $keyfilter3 = '^' . $deleteafterid . '_';
2846
-            $keyfilter4 = '_' . $deleteafterid . '_';
2843
+            $keyfilter1 = '^'.$deleteafterid.'$';
2844
+            $keyfilter2 = '_'.$deleteafterid.'$';
2845
+            $keyfilter3 = '^'.$deleteafterid.'_';
2846
+            $keyfilter4 = '_'.$deleteafterid.'_';
2847 2847
             foreach ($this->users as $key => $val) {
2848
-                if (preg_match('/' . $keyfilter1 . '/', $val['fullpath']) || preg_match('/' . $keyfilter2 . '/', $val['fullpath']) || preg_match('/' . $keyfilter3 . '/', $val['fullpath']) || preg_match('/' . $keyfilter4 . '/', $val['fullpath'])) {
2848
+                if (preg_match('/'.$keyfilter1.'/', $val['fullpath']) || preg_match('/'.$keyfilter2.'/', $val['fullpath']) || preg_match('/'.$keyfilter3.'/', $val['fullpath']) || preg_match('/'.$keyfilter4.'/', $val['fullpath'])) {
2849 2849
                     unset($this->users[$key]);
2850 2850
                 }
2851 2851
             }
2852 2852
         }
2853 2853
 
2854
-        AlDolUtils::dol_syslog(get_class($this) . "::get_full_tree dol_sort_array", LOG_DEBUG);
2854
+        AlDolUtils::dol_syslog(get_class($this)."::get_full_tree dol_sort_array", LOG_DEBUG);
2855 2855
         $this->users = dol_sort_array($this->users, 'fullname', 'asc', true, false);
2856 2856
 
2857 2857
 //var_dump($this->users);
@@ -2879,10 +2879,10 @@  discard block
 block discarded – undo
2879 2879
 
2880 2880
             $idtoscan = $this->id;
2881 2881
 
2882
-            AlDolUtils::dol_syslog("Build childid for id = " . $idtoscan);
2882
+            AlDolUtils::dol_syslog("Build childid for id = ".$idtoscan);
2883 2883
             foreach ($this->users as $id => $val) {
2884 2884
 //var_dump($val['fullpath']);
2885
-                if (preg_match('/_' . $idtoscan . '_/', $val['fullpath'])) {
2885
+                if (preg_match('/_'.$idtoscan.'_/', $val['fullpath'])) {
2886 2886
                     $childids[$val['id']] = $val['id'];
2887 2887
                 }
2888 2888
             }
@@ -2908,16 +2908,16 @@  discard block
 block discarded – undo
2908 2908
     function build_path_from_id_user($id_user, $protection = 0)
2909 2909
     {
2910 2910
 // phpcs:enable
2911
-        AlDolUtils::dol_syslog(get_class($this) . "::build_path_from_id_user id_user=" . $id_user . " protection=" . $protection, LOG_DEBUG);
2911
+        AlDolUtils::dol_syslog(get_class($this)."::build_path_from_id_user id_user=".$id_user." protection=".$protection, LOG_DEBUG);
2912 2912
 
2913 2913
         if (!empty($this->users[$id_user]['fullpath'])) {
2914 2914
 // Already defined
2915
-            AlDolUtils::dol_syslog(get_class($this) . "::build_path_from_id_user fullpath and fullname already defined", LOG_WARNING);
2915
+            AlDolUtils::dol_syslog(get_class($this)."::build_path_from_id_user fullpath and fullname already defined", LOG_WARNING);
2916 2916
             return 0;
2917 2917
         }
2918 2918
 
2919 2919
 // Define fullpath and fullname
2920
-        $this->users[$id_user]['fullpath'] = '_' . $id_user;
2920
+        $this->users[$id_user]['fullpath'] = '_'.$id_user;
2921 2921
         $this->users[$id_user]['fullname'] = $this->users[$id_user]['lastname'];
2922 2922
         $i = 0;
2923 2923
         $cursor_user = $id_user;
@@ -2926,11 +2926,11 @@  discard block
 block discarded – undo
2926 2926
         while (!empty($this->parentof[$cursor_user])) {
2927 2927
             if (in_array($this->parentof[$cursor_user], Globals::$useridfound)) {
2928 2928
                 AlDolUtils::dol_syslog("The hierarchy of user has a recursive loop", LOG_WARNING);
2929
-                return -1;     // Should not happen. Protection against looping hierarchy
2929
+                return -1; // Should not happen. Protection against looping hierarchy
2930 2930
             }
2931 2931
             Globals::$useridfound[] = $this->parentof[$cursor_user];
2932
-            $this->users[$id_user]['fullpath'] = '_' . $this->parentof[$cursor_user] . $this->users[$id_user]['fullpath'];
2933
-            $this->users[$id_user]['fullname'] = $this->users[$this->parentof[$cursor_user]]['lastname'] . ' >> ' . $this->users[$id_user]['fullname'];
2932
+            $this->users[$id_user]['fullpath'] = '_'.$this->parentof[$cursor_user].$this->users[$id_user]['fullpath'];
2933
+            $this->users[$id_user]['fullname'] = $this->users[$this->parentof[$cursor_user]]['lastname'].' >> '.$this->users[$id_user]['fullname'];
2934 2934
             $i++;
2935 2935
             $cursor_user = $this->parentof[$cursor_user];
2936 2936
         }
@@ -2972,10 +2972,10 @@  discard block
 block discarded – undo
2972 2972
         $this->nb = array();
2973 2973
 
2974 2974
         $sql = "SELECT count(u.rowid) as nb";
2975
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user as u";
2975
+        $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
2976 2976
         $sql .= " WHERE u.statut > 0";
2977 2977
 //$sql.= " AND employee != 0";
2978
-        $sql .= " AND u.entity IN (" . getEntity('user') . ")";
2978
+        $sql .= " AND u.entity IN (".getEntity('user').")";
2979 2979
 
2980 2980
         $resql = Config::$dbEngine->query($sql);
2981 2981
         if ($resql) {
@@ -3040,8 +3040,8 @@  discard block
 block discarded – undo
3040 3040
         }
3041 3041
 
3042 3042
         $sql = "SELECT rowid, email, user_mobile, civility, lastname, firstname";
3043
-        $sql .= " FROM " . MAIN_DB_PREFIX . "user";
3044
-        $sql .= " WHERE rowid = '" . $rowid . "'";
3043
+        $sql .= " FROM ".MAIN_DB_PREFIX."user";
3044
+        $sql .= " WHERE rowid = '".$rowid."'";
3045 3045
 
3046 3046
         $resql = Config::$dbEngine->query($sql);
3047 3047
         if ($resql) {
@@ -3051,7 +3051,7 @@  discard block
 block discarded – undo
3051 3051
                 $obj = Config::$dbEngine->fetch_object($resql);
3052 3052
 
3053 3053
                 if ($mode == 'email') {
3054
-                    $this->user_property = dolGetFirstLastname($obj->firstname, $obj->lastname) . " <" . $obj->email . ">";
3054
+                    $this->user_property = dolGetFirstLastname($obj->firstname, $obj->lastname)." <".$obj->email.">";
3055 3055
                 } else if ($mode == 'mobile') {
3056 3056
                     $this->user_property = $obj->user_mobile;
3057 3057
                 }
@@ -3078,7 +3078,7 @@  discard block
 block discarded – undo
3078 3078
         global $conf;
3079 3079
 
3080 3080
         $sql = "SELECT t.rowid";
3081
-        $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t ';
3081
+        $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t ';
3082 3082
         $sql .= " WHERE 1";
3083 3083
 
3084 3084
 // Manage filter
@@ -3086,25 +3086,25 @@  discard block
 block discarded – undo
3086 3086
         if (!empty($filter)) {
3087 3087
             foreach ($filter as $key => $value) {
3088 3088
                 if ($key == 't.rowid') {
3089
-                    $sqlwhere[] = $key . '=' . $value;
3089
+                    $sqlwhere[] = $key.'='.$value;
3090 3090
                 } elseif (strpos($key, 'date') !== false) {
3091
-                    $sqlwhere[] = $key . ' = \'' . Config::$dbEngine->idate($value) . '\'';
3091
+                    $sqlwhere[] = $key.' = \''.Config::$dbEngine->idate($value).'\'';
3092 3092
                 } elseif ($key == 'customsql') {
3093 3093
                     $sqlwhere[] = $value;
3094 3094
                 } else {
3095
-                    $sqlwhere[] = $key . ' LIKE \'%' . Config::$dbEngine->escape($value) . '%\'';
3095
+                    $sqlwhere[] = $key.' LIKE \'%'.Config::$dbEngine->escape($value).'%\'';
3096 3096
                 }
3097 3097
             }
3098 3098
         }
3099 3099
         if (count($sqlwhere) > 0) {
3100
-            $sql .= ' AND (' . implode(' ' . $filtermode . ' ', $sqlwhere) . ')';
3100
+            $sql .= ' AND ('.implode(' '.$filtermode.' ', $sqlwhere).')';
3101 3101
         }
3102 3102
         $sql .= Config::$dbEngine->order($sortfield, $sortorder);
3103 3103
         if ($limit) {
3104 3104
             $sql .= Config::$dbEngine->plimit($limit + 1, $offset);
3105 3105
         }
3106 3106
 
3107
-        AlDolUtils::dol_syslog(get_class($this) . "::" . __METHOD__, LOG_DEBUG);
3107
+        AlDolUtils::dol_syslog(get_class($this)."::".__METHOD__, LOG_DEBUG);
3108 3108
 
3109 3109
         $resql = Config::$dbEngine->query($sql);
3110 3110
         if ($resql) {
Please login to merge, or discard this patch.
Base/AlInterfaces.php 1 patch
Spacing   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -25,7 +25,7 @@  discard block
 block discarded – undo
25 25
 class AlInterfaces
26 26
 {
27 27
 
28
-    var $dir;    // Directory with all core and external triggers files
28
+    var $dir; // Directory with all core and external triggers files
29 29
 
30 30
     /**
31 31
      * @var string[] Error codes (or messages)
@@ -63,13 +63,13 @@  discard block
 block discarded – undo
63 63
         // phpcs:enable
64 64
         // Check parameters
65 65
         if (!is_object($object) || !is_object($conf)) { // Error
66
-            $this->error = 'function run_triggers called with wrong parameters action=' . $action . ' object=' . is_object($object) . ' user=' . is_object($user) . ' langs=' . is_object($langs) . ' conf=' . is_object($conf);
67
-            DolUtils::dol_syslog(get_class($this) . '::run_triggers ' . $this->error, LOG_ERR);
66
+            $this->error = 'function run_triggers called with wrong parameters action='.$action.' object='.is_object($object).' user='.is_object($user).' langs='.is_object($langs).' conf='.is_object($conf);
67
+            DolUtils::dol_syslog(get_class($this).'::run_triggers '.$this->error, LOG_ERR);
68 68
             $this->errors[] = $this->error;
69 69
             return -1;
70 70
         }
71 71
         if (!is_object($langs)) { // Warning
72
-            DolUtils::dol_syslog(get_class($this) . '::run_triggers was called with wrong parameters action=' . $action . ' object=' . is_object($object) . ' user=' . is_object($user) . ' langs=' . is_object($langs) . ' conf=' . is_object($conf), LOG_WARNING);
72
+            DolUtils::dol_syslog(get_class($this).'::run_triggers was called with wrong parameters action='.$action.' object='.is_object($object).' user='.is_object($user).' langs='.is_object($langs).' conf='.is_object($conf), LOG_WARNING);
73 73
         }
74 74
         /*
75 75
           if (!is_object($user)) {     // Warning
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
         $i = 0;
88 88
 
89 89
         // $dirtriggers = array_merge(array('/core/triggers'), Globals::$conf->modules_parts['triggers']);
90
-        $dirtriggers = array_merge(array(BASE_PATH . '/Helpers/triggers'), Globals::$conf->modules_parts['triggers']);
90
+        $dirtriggers = array_merge(array(BASE_PATH.'/Helpers/triggers'), Globals::$conf->modules_parts['triggers']);
91 91
         foreach ($dirtriggers as $reldir) {
92 92
             //$dir = DolUtils::dol_buildpath($reldir, 0);
93 93
             //$newdir = DolUtils::dol_osencode($dir);
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
             $handle = opendir($newdir);
101 101
             if (is_resource($handle)) {
102 102
                 while (($file = readdir($handle)) !== false) {
103
-                    if (is_readable($newdir . "/" . $file) && preg_match('/^interface_([0-9]+)_([^_]+)_(.+)\.class\.php$/i', $file, $reg)) {
103
+                    if (is_readable($newdir."/".$file) && preg_match('/^interface_([0-9]+)_([^_]+)_(.+)\.class\.php$/i', $file, $reg)) {
104 104
                         $part1 = $reg[1];
105 105
                         $part2 = $reg[2];
106 106
                         $part3 = $reg[3];
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
                         $qualified = true;
115 115
                         if (strtolower($reg[2]) != 'all') {
116 116
                             $module = preg_replace('/^mod/i', '', $reg[2]);
117
-                            $constparam = 'MAIN_MODULE_' . strtoupper($module);
117
+                            $constparam = 'MAIN_MODULE_'.strtoupper($module);
118 118
                             if (empty(Globals::$conf->global->$constparam))
119 119
                                 $qualified = false;
120 120
                         }
@@ -124,26 +124,26 @@  discard block
 block discarded – undo
124 124
                             continue;
125 125
                         }
126 126
 
127
-                        $modName = "Interface" . ucfirst($reg[3]);
127
+                        $modName = "Interface".ucfirst($reg[3]);
128 128
                         //print "file=$file - modName=$modName\n";
129 129
                         if (in_array($modName, $modules)) {    // $modules = list of modName already loaded
130 130
                             $langs->load("errors");
131
-                            DolUtils::dol_syslog(get_class($this) . "::run_triggers action=" . $action . " " . $langs->trans("ErrorDuplicateTrigger", $newdir . "/" . $file, $fullpathfiles[$modName]), LOG_WARNING);
131
+                            DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." ".$langs->trans("ErrorDuplicateTrigger", $newdir."/".$file, $fullpathfiles[$modName]), LOG_WARNING);
132 132
                             continue;
133 133
                         }
134 134
 
135 135
                         try {
136 136
                             //print 'Todo for '.$modName." : ".$newdir.'/'.$file."\n";
137
-                            include_once $newdir . '/' . $file;
137
+                            include_once $newdir.'/'.$file;
138 138
                             //print 'Done for '.$modName."\n";
139 139
                         } catch (Exception $e) {
140
-                            DolUtils::dol_syslog('ko for ' . $modName . " " . $e->getMessage() . "\n", LOG_ERR);
140
+                            DolUtils::dol_syslog('ko for '.$modName." ".$e->getMessage()."\n", LOG_ERR);
141 141
                         }
142 142
 
143 143
                         $modules[$i] = $modName;
144 144
                         $files[$i] = $file;
145
-                        $fullpathfiles[$modName] = $newdir . '/' . $file;
146
-                        $orders[$i] = $part1 . '_' . $part2 . '_' . $part3;   // Set sort criteria value
145
+                        $fullpathfiles[$modName] = $newdir.'/'.$file;
146
+                        $orders[$i] = $part1.'_'.$part2.'_'.$part3; // Set sort criteria value
147 147
 
148 148
                         $i++;
149 149
                     }
@@ -167,10 +167,10 @@  discard block
 block discarded – undo
167 167
                     //DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." Launch runTrigger for file '".$files[$key]."'", LOG_DEBUG);
168 168
                     $result = $objMod->runTrigger($action, $object, $user, $langs, $conf);
169 169
                 } elseif (method_exists($objMod, 'run_trigger')) { // Deprecated method
170
-                    DolUtils::dol_syslog(get_class($this) . "::run_triggers action=" . $action . " Launch old method run_trigger (rename your trigger into runTrigger) for file '" . $files[$key] . "'", LOG_WARNING);
170
+                    DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." Launch old method run_trigger (rename your trigger into runTrigger) for file '".$files[$key]."'", LOG_WARNING);
171 171
                     $result = $objMod->run_trigger($action, $object, $user, $langs, $conf);
172 172
                 } else {
173
-                    DolUtils::dol_syslog(get_class($this) . "::run_triggers action=" . $action . " A trigger was declared for class " . get_class($objMod) . " but method runTrigger was not found", LOG_ERR);
173
+                    DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." A trigger was declared for class ".get_class($objMod)." but method runTrigger was not found", LOG_ERR);
174 174
                 }
175 175
 
176 176
                 if ($result > 0) {
@@ -195,12 +195,12 @@  discard block
 block discarded – undo
195 195
                 }
196 196
             }
197 197
             else {
198
-                DolUtils::dol_syslog(get_class($this) . "::run_triggers action=" . $action . " Failed to instantiate trigger for file '" . $files[$key] . "'", LOG_ERR);
198
+                DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." Failed to instantiate trigger for file '".$files[$key]."'", LOG_ERR);
199 199
             }
200 200
         }
201 201
 
202 202
         if ($nbko) {
203
-            DolUtils::dol_syslog(get_class($this) . "::run_triggers action=" . $action . " Files found: " . $nbfile . ", Files launched: " . $nbtotal . ", Done: " . $nbok . ", Failed: " . $nbko . " - Nb of error string returned in this->errors = " . count($this->errors), LOG_ERR);
203
+            DolUtils::dol_syslog(get_class($this)."::run_triggers action=".$action." Files found: ".$nbfile.", Files launched: ".$nbtotal.", Done: ".$nbok.", Failed: ".$nbko." - Nb of error string returned in this->errors = ".count($this->errors), LOG_ERR);
204 204
             return -$nbko;
205 205
         } else {
206 206
             //DolUtils::dol_syslog(get_class($this)."::run_triggers Files found: ".$nbfile.", Files launched: ".$nbtotal.", Done: ".$nbok.", Failed: ".$nbko, LOG_DEBUG);
@@ -246,7 +246,7 @@  discard block
 block discarded – undo
246 246
             $handle = opendir($newdir);
247 247
             if (is_resource($handle)) {
248 248
                 while (($file = readdir($handle)) !== false) {
249
-                    if (is_readable($newdir . '/' . $file) && preg_match('/^interface_([0-9]+)_([^_]+)_(.+)\.class\.php/', $file, $reg)) {
249
+                    if (is_readable($newdir.'/'.$file) && preg_match('/^interface_([0-9]+)_([^_]+)_(.+)\.class\.php/', $file, $reg)) {
250 250
                         if (preg_match('/\.back$/', $file))
251 251
                             continue;
252 252
 
@@ -254,21 +254,21 @@  discard block
 block discarded – undo
254 254
                         $part2 = $reg[2];
255 255
                         $part3 = $reg[3];
256 256
 
257
-                        $modName = 'Interface' . ucfirst($reg[3]);
257
+                        $modName = 'Interface'.ucfirst($reg[3]);
258 258
                         //print "file=$file"; print "modName=$modName"; exit;
259 259
                         if (in_array($modName, $modules)) {
260 260
                             $langs->load("errors");
261
-                            print '<div class="error">' . $langs->trans("Error") . ' : ' . $langs->trans("ErrorDuplicateTrigger", $modName, "/htdocs/core/triggers/") . '</div>';
261
+                            print '<div class="error">'.$langs->trans("Error").' : '.$langs->trans("ErrorDuplicateTrigger", $modName, "/htdocs/core/triggers/").'</div>';
262 262
                         } else {
263
-                            include_once $newdir . '/' . $file;
263
+                            include_once $newdir.'/'.$file;
264 264
                         }
265 265
 
266 266
                         $files[$i] = $file;
267
-                        $fullpath[$i] = $dir . '/' . $file;
268
-                        $relpath[$i] = preg_replace('/^\//', '', $reldir) . '/' . $file;
267
+                        $fullpath[$i] = $dir.'/'.$file;
268
+                        $relpath[$i] = preg_replace('/^\//', '', $reldir).'/'.$file;
269 269
                         $iscoreorexternal[$i] = ($reldir == '/core/triggers/' ? 'internal' : 'external');
270 270
                         $modules[$i] = $modName;
271
-                        $orders[$i] = $part1 . '_' . $part2 . '_' . $part3;   // Set sort criteria value
271
+                        $orders[$i] = $part1.'_'.$part2.'_'.$part3; // Set sort criteria value
272 272
 
273 273
                         $i++;
274 274
                     }
@@ -289,7 +289,7 @@  discard block
 block discarded – undo
289 289
                 continue;
290 290
 
291 291
             if (!class_exists($modName)) {
292
-                print 'Error: A trigger file was found but its class "' . $modName . '" was not found.' . "<br>\n";
292
+                print 'Error: A trigger file was found but its class "'.$modName.'" was not found.'."<br>\n";
293 293
                 continue;
294 294
             }
295 295
 
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
             // Check if trigger file is for a particular module
307 307
             if (preg_match('/^interface_([0-9]+)_([^_]+)_(.+)\.class\.php/i', $files[$key], $reg)) {
308 308
                 $module = preg_replace('/^mod/i', '', $reg[2]);
309
-                $constparam = 'MAIN_MODULE_' . strtoupper($module);
309
+                $constparam = 'MAIN_MODULE_'.strtoupper($module);
310 310
                 if (strtolower($module) == 'all')
311 311
                     $disabledbymodule = 0;
312 312
                 else if (empty(Globals::$conf->global->$constparam))
@@ -325,21 +325,21 @@  discard block
 block discarded – undo
325 325
             if ($disabledbyname > 0 || $disabledbymodule > 1)
326 326
                 $triggers[$j]['status'] = '';
327 327
 
328
-            $text = '<b>' . $langs->trans("Description") . ':</b><br>';
329
-            $text .= $objMod->getDesc() . '<br>';
330
-            $text .= '<br><b>' . $langs->trans("Status") . ':</b><br>';
328
+            $text = '<b>'.$langs->trans("Description").':</b><br>';
329
+            $text .= $objMod->getDesc().'<br>';
330
+            $text .= '<br><b>'.$langs->trans("Status").':</b><br>';
331 331
             if ($disabledbyname == 1) {
332
-                $text .= $langs->trans("TriggerDisabledByName") . '<br>';
332
+                $text .= $langs->trans("TriggerDisabledByName").'<br>';
333 333
                 if ($disabledbymodule == 2)
334
-                    $text .= $langs->trans("TriggerDisabledAsModuleDisabled", $module) . '<br>';
334
+                    $text .= $langs->trans("TriggerDisabledAsModuleDisabled", $module).'<br>';
335 335
             }
336 336
             else {
337 337
                 if ($disabledbymodule == 0)
338
-                    $text .= $langs->trans("TriggerAlwaysActive") . '<br>';
338
+                    $text .= $langs->trans("TriggerAlwaysActive").'<br>';
339 339
                 if ($disabledbymodule == 1)
340
-                    $text .= $langs->trans("TriggerActiveAsModuleActive", $module) . '<br>';
340
+                    $text .= $langs->trans("TriggerActiveAsModuleActive", $module).'<br>';
341 341
                 if ($disabledbymodule == 2)
342
-                    $text .= $langs->trans("TriggerDisabledAsModuleDisabled", $module) . '<br>';
342
+                    $text .= $langs->trans("TriggerDisabledAsModuleDisabled", $module).'<br>';
343 343
             }
344 344
 
345 345
             $triggers[$j]['info'] = $text;
Please login to merge, or discard this patch.
Base/AlCommonObject.php 3 patches
Indentation   +7062 added lines, -7062 removed lines patch added patch discarded remove patch
@@ -21,7389 +21,7389 @@
 block discarded – undo
21 21
 
22 22
 abstract class AlCommonObject
23 23
 {
24
-	/**
24
+    /**
25 25
      * @var int The object identifier
26 26
      */
27
-	public $id;
28
-
29
-	/**
30
-	 * @var string 		Error string
31
-	 * @see             errors
32
-	 */
33
-	public $error;
34
-
35
-	/**
36
-	 * @var string[]	Array of error strings
37
-	 */
38
-	public $errors=array();
39
-
40
-	/**
41
-	 * @var string ID to identify managed object
42
-	 */
43
-	public $element;
44
-
45
-	/**
46
-	 * @var string Name of table without prefix where object is stored
47
-	 */
48
-	public $table_element;
49
-
50
-	/**
51
-	 * @var int    Name of subtable line
52
-	 */
53
-	public $table_element_line='';
54
-
55
-	/**
56
-	 * @var string		Key value used to track if data is coming from import wizard
57
-	 */
58
-	public $import_key;
59
-
60
-	/**
61
-	 * @var mixed		Contains data to manage extrafields
62
-	 */
63
-	public $array_options=array();
64
-
65
-	/**
66
-	 * @var int[][]		Array of linked objects ids. Loaded by ->fetchObjectLinked
67
-	 */
68
-	public $linkedObjectsIds;
69
-
70
-	/**
71
-	 * @var mixed		Array of linked objects. Loaded by ->fetchObjectLinked
72
-	 */
73
-	public $linkedObjects;
74
-
75
-	/**
76
-	 * @var Object      To store a cloned copy of object before to edit it and keep track of old properties
77
-	 */
78
-	public $oldcopy;
79
-
80
-	/**
81
-	 * @var string		Column name of the ref field.
82
-	 */
83
-	protected $table_ref_field = '';
84
-
85
-
86
-
87
-	// Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
88
-
89
-	/**
90
-	 * @var array<string,mixed>		Can be used to pass information when only object is provided to method
91
-	 */
92
-	public $context=array();
93
-
94
-	/**
95
-	 * @var string		Contains canvas name if record is an alternative canvas record
96
-	 */
97
-	public $canvas;
98
-
99
-	/**
100
-	 * @var Project The related project
101
-	 * @see fetch_projet()
102
-	 */
103
-	public $project;
104
-
105
-	/**
106
-	 * @var int The related project ID
107
-	 * @see setProject(), project
108
-	 */
109
-	public $fk_project;
110
-
111
-	/**
112
-	 * @deprecated
113
-	 * @see project
114
-	 */
115
-	public $projet;
116
-
117
-	/**
118
-	 * @var Contact a related contact
119
-	 * @see fetch_contact()
120
-	 */
121
-	public $contact;
122
-
123
-	/**
124
-	 * @var int The related contact ID
125
-	 * @see fetch_contact()
126
-	 */
127
-	public $contact_id;
128
-
129
-	/**
130
-	 * @var Societe A related thirdparty
131
-	 * @see fetch_thirdparty()
132
-	 */
133
-	public $thirdparty;
134
-
135
-	/**
136
-	 * @var User A related user
137
-	 * @see fetch_user()
138
-	 */
139
-	public $user;
140
-
141
-	/**
142
-	 * @var string 	The type of originating object ('commande', 'facture', ...)
143
-	 * @see fetch_origin()
144
-	 */
145
-	public $origin;
146
-
147
-	/**
148
-	 * @var int 	The id of originating object
149
-	 * @see fetch_origin()
150
-	 */
151
-	public $origin_id;
152
-
153
-	/**
154
-	 * @var string The object's reference
155
-	 */
156
-	public $ref;
157
-
158
-	/**
159
-	 * @var string The object's previous reference
160
-	 */
161
-	public $ref_previous;
162
-
163
-	/**
164
-	 * @var string The object's next reference
165
-	 */
166
-	public $ref_next;
167
-
168
-	/**
169
-	 * @var string An external reference for the object
170
-	 */
171
-	public $ref_ext;
172
-
173
-	/**
174
-	 * @var int The object's status
175
-	 * @see setStatut()
176
-	 */
177
-	public $statut;
178
-
179
-	/**
180
-	 * @var string
181
-	 * @see getFullAddress()
182
-	 */
183
-	public $country;
184
-
185
-	/**
186
-	 * @var int
187
-	 * @see getFullAddress(), country
188
-	 */
189
-	public $country_id;
190
-
191
-	/**
192
-	 * @var string
193
-	 * @see getFullAddress(), isInEEC(), country
194
-	 */
195
-    public $country_code;
27
+    public $id;
196 28
 
197 29
     /**
198
-	 * @var string
199
-	 * @see getFullAddress()
200
-	 */
201
-	public $state;
202
-
203
-	/**
204
-	 * @var int
205
-	 * @see getFullAddress(), state
206
-	 */
207
-	public $state_id;
30
+     * @var string 		Error string
31
+     * @see             errors
32
+     */
33
+    public $error;
208 34
 
209
-	/**
210
-	 * @var string
211
-	 * @see getFullAddress(), state
212
-	 */
213
-    public $state_code;
35
+    /**
36
+     * @var string[]	Array of error strings
37
+     */
38
+    public $errors=array();
214 39
 
215 40
     /**
216
-	 * @var string
217
-	 * @see getFullAddress(), region
218
-	 */
219
-	public $region;
41
+     * @var string ID to identify managed object
42
+     */
43
+    public $element;
220 44
 
221
-	/**
222
-	 * @var string
223
-	 * @see getFullAddress(), region
224
-	 */
225
-    public $region_code;
45
+    /**
46
+     * @var string Name of table without prefix where object is stored
47
+     */
48
+    public $table_element;
226 49
 
227
-	/**
228
-	 * @var int
229
-	 * @see fetch_barcode()
230
-	 */
231
-	public $barcode_type;
232
-
233
-	/**
234
-	 * @var string
235
-	 * @see fetch_barcode(), barcode_type
236
-	 */
237
-	public $barcode_type_code;
238
-
239
-	/**
240
-	 * @var string
241
-	 * @see fetch_barcode(), barcode_type
242
-	 */
243
-	public $barcode_type_label;
244
-
245
-	/**
246
-	 * @var string
247
-	 * @see fetch_barcode(), barcode_type
248
-	 */
249
-	public $barcode_type_coder;
250
-
251
-	/**
252
-	 * @var int Payment method ID (cheque, cash, ...)
253
-	 * @see setPaymentMethods()
254
-	 */
255
-	public $mode_reglement_id;
256
-
257
-	/**
258
-	 * @var int Payment terms ID
259
-	 * @see setPaymentTerms()
260
-	 */
261
-	public $cond_reglement_id;
262
-
263
-	/**
264
-	 * @var int Payment terms ID
265
-	 * @deprecated Kept for compatibility
266
-	 * @see cond_reglement_id;
267
-	 */
268
-	public $cond_reglement;
269
-
270
-	/**
271
-	 * @var int Delivery address ID
272
-	 * @deprecated
273
-	 * @see setDeliveryAddress()
274
-	 */
275
-	public $fk_delivery_address;
276
-
277
-	/**
278
-	 * @var int Shipping method ID
279
-	 * @see setShippingMethod()
280
-	 */
281
-	public $shipping_method_id;
282
-
283
-	/**
284
-	 * @var string
285
-	 * @see SetDocModel()
286
-	 */
287
-	public $modelpdf;
288
-
289
-	/**
290
-	 * @var int Bank account ID
291
-	 * @see SetBankAccount()
292
-	 */
293
-	public $fk_account;
294
-
295
-	/**
296
-	 * @var string Public note
297
-	 * @see update_note()
298
-	 */
299
-	public $note_public;
300
-
301
-	/**
302
-	 * @var string Private note
303
-	 * @see update_note()
304
-	 */
305
-	public $note_private;
306
-
307
-	/**
308
-	 * @deprecated
309
-	 * @see note_public
310
-	 */
311
-	public $note;
312
-
313
-	/**
314
-	 * @var float Total amount before taxes
315
-	 * @see update_price()
316
-	 */
317
-	public $total_ht;
318
-
319
-	/**
320
-	 * @var float Total VAT amount
321
-	 * @see update_price()
322
-	 */
323
-	public $total_tva;
324
-
325
-	/**
326
-	 * @var float Total local tax 1 amount
327
-	 * @see update_price()
328
-	 */
329
-	public $total_localtax1;
330
-
331
-	/**
332
-	 * @var float Total local tax 2 amount
333
-	 * @see update_price()
334
-	 */
335
-	public $total_localtax2;
336
-
337
-	/**
338
-	 * @var float Total amount with taxes
339
-	 * @see update_price()
340
-	 */
341
-	public $total_ttc;
342
-
343
-	/**
344
-	 * @var CommonObjectLine[]
345
-	 */
346
-	public $lines;
347
-
348
-	/**
349
-	 * @var mixed		Contains comments
350
-	 * @see fetchComments()
351
-	 */
352
-	public $comments=array();
353
-
354
-	/**
355
-	 * @var int
356
-	 * @see setIncoterms()
357
-	 */
358
-	public $fk_incoterms;
359
-
360
-	/**
361
-	 * @var string
362
-	 * @see SetIncoterms()
363
-	 */
364
-	public $libelle_incoterms;
365
-
366
-	/**
367
-	 * @var string
368
-	 * @see display_incoterms()
369
-	 */
370
-	public $location_incoterms;
371
-
372
-	public $name;
373
-	public $lastname;
374
-	public $firstname;
375
-	public $civility_id;
376
-
377
-	// Dates
378
-	public $date_creation;			// Date creation
379
-	public $date_validation;		// Date validation
380
-	public $date_modification;		// Date last change (tms field)
381
-
382
-
383
-
384
-	// No constructor as it is an abstract class
385
-
386
-	/**
387
-	 * Check an object id/ref exists
388
-	 * If you don't need/want to instantiate object and just need to know if object exists, use this method instead of fetch
389
-	 *
390
-	 *  @param	string	$element   	String of element ('product', 'facture', ...)
391
-	 *  @param	int		$id      	Id of object
392
-	 *  @param  string	$ref     	Ref of object to check
393
-	 *  @param	string	$ref_ext	Ref ext of object to check
394
-	 *  @return int     			<0 if KO, 0 if OK but not found, >0 if OK and exists
395
-	 */
396
-	static function isExistingObject($element, $id, $ref='', $ref_ext='')
397
-	{
398
-		global $db,$conf;
399
-
400
-		$sql = "SELECT rowid, ref, ref_ext";
401
-		$sql.= " FROM ".MAIN_DB_PREFIX.$element;
402
-		$sql.= " WHERE entity IN (".getEntity($element).")" ;
403
-
404
-		if ($id > 0) $sql.= " AND rowid = ".$db->escape($id);
405
-		else if ($ref) $sql.= " AND ref = '".$db->escape($ref)."'";
406
-		else if ($ref_ext) $sql.= " AND ref_ext = '".$db->escape($ref_ext)."'";
407
-		else {
408
-			$error='ErrorWrongParameters';
409
-			dol_print_error(get_class()."::isExistingObject ".$error, LOG_ERR);
410
-			return -1;
411
-		}
412
-		if ($ref || $ref_ext)
413
-            $sql .= " AND entity = " . Globals::$conf->entity;
50
+    /**
51
+     * @var int    Name of subtable line
52
+     */
53
+    public $table_element_line='';
414 54
 
415
-        dol_syslog(get_class()."::isExistingObject", LOG_DEBUG);
416
-		$resql = $db->query($sql);
417
-		if ($resql)
418
-		{
419
-			$num=$db->num_rows($resql);
420
-			if ($num > 0) return 1;
421
-			else return 0;
422
-		}
423
-		return -1;
424
-	}
425
-
426
-	/**
427
-	 * Method to output saved errors
428
-	 *
429
-	 * @return	string		String with errors
430
-	 */
431
-	function errorsToString()
432
-	{
433
-		return $this->error.(is_array($this->errors)?(($this->error!=''?', ':'').join(', ',$this->errors)):'');
434
-	}
435
-
436
-	/**
437
-	 *	Return full name (civility+' '+name+' '+lastname)
438
-	 *
439
-	 *	@param	Translate	$langs			Language object for translation of civility (used only if option is 1)
440
-	 *	@param	int			$option			0=No option, 1=Add civility
441
-	 * 	@param	int			$nameorder		-1=Auto, 0=Lastname+Firstname, 1=Firstname+Lastname, 2=Firstname
442
-	 * 	@param	int			$maxlen			Maximum length
443
-	 * 	@return	string						String with full name
444
-	 */
445
-	function getFullName($langs,$option=0,$nameorder=-1,$maxlen=0)
446
-	{
447
-		//print "lastname=".$this->lastname." name=".$this->name." nom=".$this->nom."<br>\n";
448
-		$lastname=$this->lastname;
449
-		$firstname=$this->firstname;
450
-		if (empty($lastname))  $lastname=(isset($this->lastname)?$this->lastname:(isset($this->name)?$this->name:(isset($this->nom)?$this->nom:(isset($this->societe)?$this->societe:(isset($this->company)?$this->company:'')))));
451
-
452
-		$ret='';
453
-		if ($option && $this->civility_id)
454
-		{
455
-			if ($langs->transnoentitiesnoconv("Civility".$this->civility_id)!="Civility".$this->civility_id) $ret.=$langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
456
-			else $ret.=$this->civility_id.' ';
457
-		}
458
-
459
-		$ret .= AlDolUtils::dolGetFirstLastname($firstname, $lastname, $nameorder);
55
+    /**
56
+     * @var string		Key value used to track if data is coming from import wizard
57
+     */
58
+    public $import_key;
460 59
 
461
-        return AlDolUtils::dol_trunc($ret, $maxlen);
462
-    }
60
+    /**
61
+     * @var mixed		Contains data to manage extrafields
62
+     */
63
+    public $array_options=array();
463 64
 
464
-	/**
465
-	 * 	Return full address of contact
466
-	 *
467
-	 * 	@param		int			$withcountry		1=Add country into address string
468
-	 *  @param		string		$sep				Separator to use to build string
469
-	 *  @param		int		    $withregion			1=Add region into address string
470
-	 *	@return		string							Full address string
471
-	 */
472
-	function getFullAddress($withcountry=0, $sep="\n", $withregion=0)
473
-	{
474
-		if ($withcountry && $this->country_id && (empty($this->country_code) || empty($this->country)))
475
-		{
476
-			require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
477
-			$tmparray=getCountry($this->country_id,'all');
478
-			$this->country_code=$tmparray['code'];
479
-			$this->country     =$tmparray['label'];
480
-		}
65
+    /**
66
+     * @var int[][]		Array of linked objects ids. Loaded by ->fetchObjectLinked
67
+     */
68
+    public $linkedObjectsIds;
481 69
 
482
-        if ($withregion && $this->state_id && (empty($this->state_code) || empty($this->state) || empty($this->region) || empty($this->region_cpde)))
483
-    	{
484
-    		require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
485
-    		$tmparray=getState($this->state_id,'all',0,1);
486
-			$this->state_code   =$tmparray['code'];
487
-			$this->state        =$tmparray['label'];
488
-			$this->region_code  =$tmparray['region_code'];
489
-			$this->region       =$tmparray['region'];
490
-        }
491
-
492
-		return dol_format_address($this, $withcountry, $sep);
493
-	}
494
-
495
-
496
-	/**
497
-	 * 	Return full address for banner
498
-	 *
499
-	 * 	@param		string		$htmlkey            HTML id to make banner content unique
500
-	 *  @param      Object      $object				Object (thirdparty, thirdparty of contact for contact, null for a member)
501
-	 *	@return		string							Full address string
502
-	 */
503
-	function getBannerAddress($htmlkey, $object)
504
-	{
505
-		global $conf, $langs;
506
-
507
-		$countriesusingstate=array('AU','US','IN','GB','ES','UK','TR');    // See also option MAIN_FORCE_STATE_INTO_ADDRESS
508
-
509
-		$contactid=0;
510
-		$thirdpartyid=0;
511
-		if ($this->element == 'societe')
512
-		{
513
-			$thirdpartyid=$this->id;
514
-		}
515
-		if ($this->element == 'contact')
516
-		{
517
-			$contactid=$this->id;
518
-			$thirdpartyid=$object->fk_soc;
519
-		}
520
-		if ($this->element == 'user')
521
-		{
522
-			$contactid=$this->contact_id;
523
-			$thirdpartyid=$object->fk_soc;
524
-		}
525
-
526
-		$out='<!-- BEGIN part to show address block -->';
527
-
528
-		$outdone=0;
529
-		$coords = $this->getFullAddress(1, ', ', Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT);
530
-        if ($coords)
531
-		{
532
-			if (!empty(Globals::$conf->use_javascript_ajax)) {
533
-				$namecoords = $this->getFullName($langs,1).'<br>'.$coords;
534
-				// hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile
535
-				$out.='<a href="#" class="hideonsmartphone" onclick="return copyToClipboard(\''.dol_escape_js($namecoords).'\',\''.dol_escape_js($langs->trans("HelpCopyToClipboard")).'\');">';
536
-				$out.=img_picto($langs->trans("Address"), 'object_address.png');
537
-				$out.='</a> ';
538
-			}
539
-			$out.=dol_print_address($coords, 'address_'.$htmlkey.'_'.$this->id, $this->element, $this->id, 1, ', '); $outdone++;
540
-			$outdone++;
541
-		}
542
-
543
-		if (!in_array($this->country_code, $countriesusingstate) && empty(Globals::$conf->global->MAIN_FORCE_STATE_INTO_ADDRESS)   // If MAIN_FORCE_STATE_INTO_ADDRESS is on, state is already returned previously with getFullAddress
544
-            && empty(Globals::$conf->global->SOCIETE_DISABLE_STATE) && $this->state) {
545
-            if (!empty(Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 && $this->region) {
546
-                $out.=($outdone?' - ':'').$this->region.' - '.$this->state;
547
-            }
548
-            else {
549
-                $out.=($outdone?' - ':'').$this->state;
550
-            }
551
-			$outdone++;
552
-		}
553
-
554
-		if (! empty($this->phone) || ! empty($this->phone_pro) || ! empty($this->phone_mobile) || ! empty($this->phone_perso) || ! empty($this->fax) || ! empty($this->office_phone) || ! empty($this->user_mobile) || ! empty($this->office_fax)) $out.=($outdone?'<br>':'');
555
-		if (! empty($this->phone) && empty($this->phone_pro)) {		// For objects that store pro phone into ->phone
556
-			$out.=dol_print_phone($this->phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
557
-		}
558
-		if (! empty($this->phone_pro)) {
559
-			$out.=dol_print_phone($this->phone_pro,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
560
-		}
561
-		if (! empty($this->phone_mobile)) {
562
-			$out.=dol_print_phone($this->phone_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
563
-		}
564
-		if (! empty($this->phone_perso)) {
565
-			$out.=dol_print_phone($this->phone_perso,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePerso")); $outdone++;
566
-		}
567
-		if (! empty($this->office_phone)) {
568
-			$out.=dol_print_phone($this->office_phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
569
-		}
570
-		if (! empty($this->user_mobile)) {
571
-			$out.=dol_print_phone($this->user_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
572
-		}
573
-		if (! empty($this->fax)) {
574
-			$out.=dol_print_phone($this->fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
575
-		}
576
-		if (! empty($this->office_fax)) {
577
-			$out.=dol_print_phone($this->office_fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
578
-		}
579
-
580
-		$out.='<div style="clear: both;"></div>';
581
-		$outdone=0;
582
-		if (! empty($this->email))
583
-		{
584
-			$out.=dol_print_email($this->email,$this->id,$object->id,'AC_EMAIL',0,0,1);
585
-			$outdone++;
586
-		}
587
-		if (! empty($this->url))
588
-		{
589
-			$out.=dol_print_url($this->url,'_goout',0,1);
590
-			$outdone++;
591
-		}
592
-		$out.='<div style="clear: both;">';
593
-		if (!empty(Globals::$conf->socialnetworks->enabled)) {
594
-			if ($this->skype) $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
595
-			$outdone++;
596
-			if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid,$this->id,$object->id,'jabber');
597
-			$outdone++;
598
-			if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
599
-			$outdone++;
600
-			if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
601
-			$outdone++;
602
-		}
603
-		$out.='</div>';
604
-
605
-		$out.='<!-- END Part to show address block -->';
606
-
607
-		return $out;
608
-	}
609
-
610
-	/**
611
-	 * Return the link of last main doc file for direct public download.
612
-	 *
613
-	 * @param	string	$modulepart			Module related to document
614
-	 * @param	int		$initsharekey		Init the share key if it was not yet defined
615
-	 * @param	int		$relativelink		0=Return full external link, 1=Return link relative to root of file
616
-	 * @return	string						Link or empty string if there is no download link
617
-	 */
618
-	function getLastMainDocLink($modulepart, $initsharekey=0, $relativelink=0)
619
-	{
620
-		global $user, $dolibarr_main_url_root;
621
-
622
-		if (empty($this->last_main_doc))
623
-		{
624
-			return '';		// No way to known which document name to use
625
-		}
626
-
627
-		include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
628
-		$ecmfile=new EcmFiles($this->db);
629
-		$result = $ecmfile->fetch(0, '', $this->last_main_doc);
630
-		if ($result < 0)
631
-		{
632
-			$this->error = $ecmfile->error;
633
-			$this->errors = $ecmfile->errors;
634
-			return -1;
635
-		}
636
-
637
-		if (empty($ecmfile->id))
638
-		{
639
-			// Add entry into index
640
-			if ($initsharekey)
641
-			{
642
-				require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
643
-				// TODO We can't, we dont' have full path of file, only last_main_doc adn ->element, so we must rebuild full path first
644
-				/*
645
-				$ecmfile->filepath = $rel_dir;
646
-				$ecmfile->filename = $filename;
647
-				$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
648
-				$ecmfile->fullpath_orig = '';
649
-				$ecmfile->gen_or_uploaded = 'generated';
650
-				$ecmfile->description = '';    // indexed content
651
-				$ecmfile->keyword = '';        // keyword content
652
-				$ecmfile->share = getRandomPassword(true);
653
-				$result = $ecmfile->create($user);
654
-				if ($result < 0)
655
-				{
656
-					$this->error = $ecmfile->error;
657
-					$this->errors = $ecmfile->errors;
658
-				}
659
-				*/
660
-			}
661
-			else return '';
662
-		}
663
-		elseif (empty($ecmfile->share))
664
-		{
665
-			// Add entry into index
666
-			if ($initsharekey)
667
-			{
668
-				require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
669
-				$ecmfile->share = getRandomPassword(true);
670
-				$ecmfile->update($user);
671
-			}
672
-			else return '';
673
-		}
674
-
675
-		// Define $urlwithroot
676
-		$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
677
-		$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
678
-		//$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
679
-
680
-		$forcedownload=0;
681
-
682
-		$paramlink='';
683
-		//if (! empty($modulepart)) $paramlink.=($paramlink?'&':'').'modulepart='.$modulepart;		// For sharing with hash (so public files), modulepart is not required.
684
-		//if (! empty($ecmfile->entity)) $paramlink.='&entity='.$ecmfile->entity; 					// For sharing with hash (so public files), entity is not required.
685
-		//$paramlink.=($paramlink?'&':'').'file='.urlencode($filepath);								// No need of name of file for public link, we will use the hash
686
-		if (! empty($ecmfile->share)) $paramlink.=($paramlink?'&':'').'hashp='.$ecmfile->share;			// Hash for public share
687
-		if ($forcedownload) $paramlink.=($paramlink?'&':'').'attachment=1';
688
-
689
-		if ($relativelink)
690
-		{
691
-			$linktoreturn='document.php'.($paramlink?'?'.$paramlink:'');
692
-		}
693
-		else
694
-		{
695
-			$linktoreturn=$urlwithroot.'/document.php'.($paramlink?'?'.$paramlink:'');
696
-		}
697
-
698
-		// Here $ecmfile->share is defined
699
-		return $linktoreturn;
700
-	}
70
+    /**
71
+     * @var mixed		Array of linked objects. Loaded by ->fetchObjectLinked
72
+     */
73
+    public $linkedObjects;
701 74
 
75
+    /**
76
+     * @var Object      To store a cloned copy of object before to edit it and keep track of old properties
77
+     */
78
+    public $oldcopy;
702 79
 
703
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
704
-	/**
705
-	 *  Add a link between element $this->element and a contact
706
-	 *
707
-	 *  @param	int		$fk_socpeople       Id of thirdparty contact (if source = 'external') or id of user (if souce = 'internal') to link
708
-	 *  @param 	int		$type_contact 		Type of contact (code or id). Must be id or code found into table llx_c_type_contact. For example: SALESREPFOLL
709
-	 *  @param  string	$source             external=Contact extern (llx_socpeople), internal=Contact intern (llx_user)
710
-	 *  @param  int		$notrigger			Disable all triggers
711
-	 *  @return int                 		<0 if KO, >0 if OK
712
-	 */
713
-	function add_contact($fk_socpeople, $type_contact, $source='external',$notrigger=0)
714
-	{
715
-        // phpcs:enable
716
-		global $user,$langs;
717
-
718
-
719
-		dol_syslog(get_class($this)."::add_contact $fk_socpeople, $type_contact, $source, $notrigger");
720
-
721
-		// Check parameters
722
-		if ($fk_socpeople <= 0)
723
-		{
724
-			$langs->load("errors");
725
-			$this->error=$langs->trans("ErrorWrongValueForParameterX","1");
726
-			dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
727
-			return -1;
728
-		}
729
-		if (! $type_contact)
730
-		{
731
-			$langs->load("errors");
732
-			$this->error=$langs->trans("ErrorWrongValueForParameterX","2");
733
-			dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
734
-			return -2;
735
-		}
736
-
737
-		$id_type_contact=0;
738
-		if (is_numeric($type_contact))
739
-		{
740
-			$id_type_contact=$type_contact;
741
-		}
742
-		else
743
-		{
744
-			// We look for id type_contact
745
-			$sql = "SELECT tc.rowid";
746
-			$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
747
-			$sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
748
-			$sql.= " AND tc.source='".$this->db->escape($source)."'";
749
-			$sql.= " AND tc.code='".$this->db->escape($type_contact)."' AND tc.active=1";
750
-			//print $sql;
751
-			$resql=$this->db->query($sql);
752
-			if ($resql)
753
-			{
754
-				$obj = $this->db->fetch_object($resql);
755
-				if ($obj) $id_type_contact=$obj->rowid;
756
-			}
757
-		}
758
-
759
-		if ($id_type_contact == 0)
760
-		{
761
-			$this->error='CODE_NOT_VALID_FOR_THIS_ELEMENT';
762
-			dol_syslog("CODE_NOT_VALID_FOR_THIS_ELEMENT: Code type of contact '".$type_contact."' does not exists or is not active for element ".$this->element.", we can ignore it");
763
-			return -3;
764
-		}
765
-
766
-		$datecreate = dol_now();
767
-
768
-		// Socpeople must have already been added by some trigger, then we have to check it to avoid DB_ERROR_RECORD_ALREADY_EXISTS error
769
-		$TListeContacts=$this->liste_contact(-1, $source);
770
-		$already_added=false;
771
-		if(!empty($TListeContacts)) {
772
-			foreach($TListeContacts as $array_contact) {
773
-				if($array_contact['status'] == 4 && $array_contact['id'] == $fk_socpeople && $array_contact['fk_c_type_contact'] == $id_type_contact) {
774
-					$already_added=true;
775
-					break;
776
-				}
777
-			}
778
-		}
80
+    /**
81
+     * @var string		Column name of the ref field.
82
+     */
83
+    protected $table_ref_field = '';
779 84
 
780
-		if(!$already_added) {
781 85
 
782
-			$this->db->begin();
783 86
 
784
-			// Insert into database
785
-			$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
786
-			$sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
787
-			$sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
788
-			$sql.= "'".$this->db->idate($datecreate)."'";
789
-			$sql.= ", 4, ". $id_type_contact;
790
-			$sql.= ")";
87
+    // Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
791 88
 
792
-			$resql=$this->db->query($sql);
793
-			if ($resql)
794
-			{
795
-				if (! $notrigger)
796
-				{
797
-					$result=$this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
798
-					if ($result < 0)
799
-					{
800
-						$this->db->rollback();
801
-						return -1;
802
-					}
803
-				}
89
+    /**
90
+     * @var array<string,mixed>		Can be used to pass information when only object is provided to method
91
+     */
92
+    public $context=array();
804 93
 
805
-				$this->db->commit();
806
-				return 1;
807
-			}
808
-			else
809
-			{
810
-				if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
811
-				{
812
-					$this->error=$this->db->errno();
813
-					$this->db->rollback();
814
-					echo 'err rollback';
815
-					return -2;
816
-				}
817
-				else
818
-				{
819
-					$this->error=$this->db->error();
820
-					$this->db->rollback();
821
-					return -1;
822
-				}
823
-			}
824
-		} else return 0;
825
-	}
94
+    /**
95
+     * @var string		Contains canvas name if record is an alternative canvas record
96
+     */
97
+    public $canvas;
826 98
 
827
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
828
-	/**
829
-	 *    Copy contact from one element to current
830
-	 *
831
-	 *    @param    CommonObject    $objFrom    Source element
832
-	 *    @param    string          $source     Nature of contact ('internal' or 'external')
833
-	 *    @return   int                         >0 if OK, <0 if KO
834
-	 */
835
-	function copy_linked_contact($objFrom, $source='internal')
836
-	{
837
-        // phpcs:enable
838
-		$contacts = $objFrom->liste_contact(-1, $source);
839
-		foreach($contacts as $contact)
840
-		{
841
-			if ($this->add_contact($contact['id'], $contact['fk_c_type_contact'], $contact['source']) < 0)
842
-			{
843
-				$this->error=$this->db->lasterror();
844
-				return -1;
845
-			}
846
-		}
847
-		return 1;
848
-	}
99
+    /**
100
+     * @var Project The related project
101
+     * @see fetch_projet()
102
+     */
103
+    public $project;
849 104
 
850
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
851
-	/**
852
-	 *      Update a link to contact line
853
-	 *
854
-	 *      @param	int		$rowid              Id of line contact-element
855
-	 * 		@param	int		$statut	            New status of link
856
-	 *      @param  int		$type_contact_id    Id of contact type (not modified if 0)
857
-	 *      @param  int		$fk_socpeople	    Id of soc_people to update (not modified if 0)
858
-	 *      @return int                 		<0 if KO, >= 0 if OK
859
-	 */
860
-	function update_contact($rowid, $statut, $type_contact_id=0, $fk_socpeople=0)
861
-	{
862
-        // phpcs:enable
863
-		// Insert into database
864
-		$sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
865
-		$sql.= " statut = ".$statut;
866
-		if ($type_contact_id) $sql.= ", fk_c_type_contact = '".$type_contact_id ."'";
867
-		if ($fk_socpeople) $sql.= ", fk_socpeople = '".$fk_socpeople ."'";
868
-		$sql.= " where rowid = ".$rowid;
869
-		$resql=$this->db->query($sql);
870
-		if ($resql)
871
-		{
872
-			return 0;
873
-		}
874
-		else
875
-		{
876
-			$this->error=$this->db->lasterror();
877
-			return -1;
878
-		}
879
-	}
105
+    /**
106
+     * @var int The related project ID
107
+     * @see setProject(), project
108
+     */
109
+    public $fk_project;
880 110
 
881
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
882
-	/**
883
-	 *    Delete a link to contact line
884
-	 *
885
-	 *    @param	int		$rowid			Id of contact link line to delete
886
-	 *    @param	int		$notrigger		Disable all triggers
887
-	 *    @return   int						>0 if OK, <0 if KO
888
-	 */
889
-	function delete_contact($rowid, $notrigger=0)
890
-	{
891
-        // phpcs:enable
892
-		global $user;
111
+    /**
112
+     * @deprecated
113
+     * @see project
114
+     */
115
+    public $projet;
893 116
 
117
+    /**
118
+     * @var Contact a related contact
119
+     * @see fetch_contact()
120
+     */
121
+    public $contact;
894 122
 
895
-		$this->db->begin();
123
+    /**
124
+     * @var int The related contact ID
125
+     * @see fetch_contact()
126
+     */
127
+    public $contact_id;
896 128
 
897
-		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
898
-		$sql.= " WHERE rowid =".$rowid;
129
+    /**
130
+     * @var Societe A related thirdparty
131
+     * @see fetch_thirdparty()
132
+     */
133
+    public $thirdparty;
899 134
 
900
-		dol_syslog(get_class($this)."::delete_contact", LOG_DEBUG);
901
-		if ($this->db->query($sql))
902
-		{
903
-			if (! $notrigger)
904
-			{
905
-				$result=$this->call_trigger(strtoupper($this->element).'_DELETE_CONTACT', $user);
906
-				if ($result < 0) { $this->db->rollback(); return -1; }
907
-			}
908
-
909
-			$this->db->commit();
910
-			return 1;
911
-		}
912
-		else
913
-		{
914
-			$this->error=$this->db->lasterror();
915
-			$this->db->rollback();
916
-			return -1;
917
-		}
918
-	}
135
+    /**
136
+     * @var User A related user
137
+     * @see fetch_user()
138
+     */
139
+    public $user;
919 140
 
920
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
921
-	/**
922
-	 *    Delete all links between an object $this and all its contacts
923
-	 *
924
-	 *	  @param	string	$source		'' or 'internal' or 'external'
925
-	 *	  @param	string	$code		Type of contact (code or id)
926
-	 *    @return   int					>0 if OK, <0 if KO
927
-	 */
928
-	function delete_linked_contact($source='',$code='')
929
-	{
930
-        // phpcs:enable
931
-		$temp = array();
932
-		$typeContact = $this->liste_type_contact($source,'',0,0,$code);
933
-
934
-		foreach($typeContact as $key => $value)
935
-		{
936
-			array_push($temp,$key);
937
-		}
938
-		$listId = implode(",", $temp);
939
-
940
-		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
941
-		$sql.= " WHERE element_id = ".$this->id;
942
-		if ($listId)
943
-			$sql.= " AND fk_c_type_contact IN (".$listId.")";
944
-
945
-		dol_syslog(get_class($this)."::delete_linked_contact", LOG_DEBUG);
946
-		if ($this->db->query($sql))
947
-		{
948
-			return 1;
949
-		}
950
-		else
951
-		{
952
-			$this->error=$this->db->lasterror();
953
-			return -1;
954
-		}
955
-	}
141
+    /**
142
+     * @var string 	The type of originating object ('commande', 'facture', ...)
143
+     * @see fetch_origin()
144
+     */
145
+    public $origin;
956 146
 
957
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
958
-	/**
959
-	 *    Get array of all contacts for an object
960
-	 *
961
-	 *    @param	int			$statut		Status of links to get (-1=all)
962
-	 *    @param	string		$source		Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
963
-	 *    @param	int         $list       0:Return array contains all properties, 1:Return array contains just id
964
-	 *    @param    string      $code       Filter on this code of contact type ('SHIPPING', 'BILLING', ...)
965
-	 *    @return	array|int		        Array of contacts, -1 if error
966
-	 */
967
-	function liste_contact($statut=-1,$source='external',$list=0,$code='')
968
-	{
969
-        // phpcs:enable
970
-		global $langs;
971
-
972
-		$tab=array();
973
-
974
-		$sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact";    // This field contains id of llx_socpeople or id of llx_user
975
-		if ($source == 'internal') $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
976
-		if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid, t.statut as statuscontact";
977
-		$sql.= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
978
-		$sql.= ", tc.source, tc.element, tc.code, tc.libelle";
979
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
980
-		$sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
981
-		if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
982
-		if ($source == 'external'|| $source == 'thirdparty') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
983
-		$sql.= " WHERE ec.element_id =".$this->id;
984
-		$sql.= " AND ec.fk_c_type_contact=tc.rowid";
985
-		$sql.= " AND tc.element='".$this->db->escape($this->element)."'";
986
-		if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
987
-		if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
988
-		if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
989
-		$sql.= " AND tc.active=1";
990
-		if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
991
-		$sql.=" ORDER BY t.lastname ASC";
992
-
993
-		dol_syslog(get_class($this)."::liste_contact", LOG_DEBUG);
994
-		$resql=$this->db->query($sql);
995
-		if ($resql)
996
-		{
997
-			$num=$this->db->num_rows($resql);
998
-			$i=0;
999
-			while ($i < $num)
1000
-			{
1001
-				$obj = $this->db->fetch_object($resql);
147
+    /**
148
+     * @var int 	The id of originating object
149
+     * @see fetch_origin()
150
+     */
151
+    public $origin_id;
1002 152
 
1003
-				if (! $list)
1004
-				{
1005
-					$transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
1006
-					$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1007
-					$tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,
1008
-								   'nom'=>$obj->lastname,      // For backward compatibility
1009
-								   'civility'=>$obj->civility, 'lastname'=>$obj->lastname, 'firstname'=>$obj->firstname, 'email'=>$obj->email, 'login'=>$obj->login, 'photo'=>$obj->photo, 'statuscontact'=>$obj->statuscontact,
1010
-								   'rowid'=>$obj->rowid, 'code'=>$obj->code, 'libelle'=>$libelle_type, 'status'=>$obj->statuslink, 'fk_c_type_contact'=>$obj->fk_c_type_contact);
1011
-				}
1012
-				else
1013
-				{
1014
-					$tab[$i]=$obj->id;
1015
-				}
153
+    /**
154
+     * @var string The object's reference
155
+     */
156
+    public $ref;
1016 157
 
1017
-				$i++;
1018
-			}
1019
-
1020
-			return $tab;
1021
-		}
1022
-		else
1023
-		{
1024
-			$this->error=$this->db->lasterror();
1025
-			dol_print_error($this->db);
1026
-			return -1;
1027
-		}
1028
-	}
1029
-
1030
-
1031
-	/**
1032
-	 * 		Update status of a contact linked to object
1033
-	 *
1034
-	 * 		@param	int		$rowid		Id of link between object and contact
1035
-	 * 		@return	int					<0 if KO, >=0 if OK
1036
-	 */
1037
-	function swapContactStatus($rowid)
1038
-	{
1039
-		$sql = "SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact,";
1040
-		$sql.= " tc.code, tc.libelle";
1041
-		//$sql.= ", s.fk_soc";
1042
-		$sql.= " FROM (".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc)";
1043
-		//$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as s ON ec.fk_socpeople=s.rowid";	// Si contact de type external, alors il est lie a une societe
1044
-		$sql.= " WHERE ec.rowid =".$rowid;
1045
-		$sql.= " AND ec.fk_c_type_contact=tc.rowid";
1046
-		$sql.= " AND tc.element = '".$this->db->escape($this->element)."'";
1047
-
1048
-		dol_syslog(get_class($this)."::swapContactStatus", LOG_DEBUG);
1049
-		$resql=$this->db->query($sql);
1050
-		if ($resql)
1051
-		{
1052
-			$obj = $this->db->fetch_object($resql);
1053
-			$newstatut = ($obj->statut == 4) ? 5 : 4;
1054
-			$result = $this->update_contact($rowid, $newstatut);
1055
-			$this->db->free($resql);
1056
-			return $result;
1057
-		}
1058
-		else
1059
-		{
1060
-			$this->error=$this->db->error();
1061
-			dol_print_error($this->db);
1062
-			return -1;
1063
-		}
1064
-	}
158
+    /**
159
+     * @var string The object's previous reference
160
+     */
161
+    public $ref_previous;
1065 162
 
1066
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1067
-	/**
1068
-	 *      Return array with list of possible values for type of contacts
1069
-	 *
1070
-	 *      @param	string	$source     'internal', 'external' or 'all'
1071
-	 *      @param	string	$order		Sort order by : 'position', 'code', 'rowid'...
1072
-	 *      @param  int		$option     0=Return array id->label, 1=Return array code->label
1073
-	 *      @param  int		$activeonly 0=all status of contact, 1=only the active
1074
-	 *		@param	string	$code		Type of contact (Example: 'CUSTOMER', 'SERVICE')
1075
-	 *      @return array       		Array list of type of contacts (id->label if option=0, code->label if option=1)
1076
-	 */
1077
-	function liste_type_contact($source='internal', $order='position', $option=0, $activeonly=0, $code='')
1078
-	{
1079
-        // phpcs:enable
1080
-		global $langs;
1081
-
1082
-		if (empty($order)) $order='position';
1083
-		if ($order == 'position') $order.=',code';
1084
-
1085
-		$tab = array();
1086
-		$sql = "SELECT DISTINCT tc.rowid, tc.code, tc.libelle, tc.position";
1087
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
1088
-		$sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
1089
-		if ($activeonly == 1) $sql.= " AND tc.active=1"; // only the active types
1090
-		if (! empty($source) && $source != 'all') $sql.= " AND tc.source='".$this->db->escape($source)."'";
1091
-		if (! empty($code)) $sql.= " AND tc.code='".$this->db->escape($code)."'";
1092
-		$sql.= $this->db->order($order,'ASC');
1093
-
1094
-		//print "sql=".$sql;
1095
-		$resql=$this->db->query($sql);
1096
-		if ($resql)
1097
-		{
1098
-			$num=$this->db->num_rows($resql);
1099
-			$i=0;
1100
-			while ($i < $num)
1101
-			{
1102
-				$obj = $this->db->fetch_object($resql);
1103
-
1104
-				$transkey="TypeContact_".$this->element."_".$source."_".$obj->code;
1105
-				$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1106
-				if (empty($option)) $tab[$obj->rowid]=$libelle_type;
1107
-				else $tab[$obj->code]=$libelle_type;
1108
-				$i++;
1109
-			}
1110
-			return $tab;
1111
-		}
1112
-		else
1113
-		{
1114
-			$this->error=$this->db->lasterror();
1115
-			//dol_print_error($this->db);
1116
-			return null;
1117
-		}
1118
-	}
1119
-
1120
-	/**
1121
-	 *      Return id of contacts for a source and a contact code.
1122
-	 *      Example: contact client de facturation ('external', 'BILLING')
1123
-	 *      Example: contact client de livraison ('external', 'SHIPPING')
1124
-	 *      Example: contact interne suivi paiement ('internal', 'SALESREPFOLL')
1125
-	 *
1126
-	 *		@param	string	$source		'external' or 'internal'
1127
-	 *		@param	string	$code		'BILLING', 'SHIPPING', 'SALESREPFOLL', ...
1128
-	 *		@param	int		$status		limited to a certain status
1129
-	 *      @return array       		List of id for such contacts
1130
-	 */
1131
-	function getIdContact($source,$code,$status=0)
1132
-	{
1133
-		global $conf;
1134
-
1135
-		$result=array();
1136
-		$i=0;
1137
-		//cas particulier pour les expeditions
1138
-		if($this->element=='shipping' && $this->origin_id != 0) {
1139
-			$id=$this->origin_id;
1140
-			$element='commande';
1141
-        } else if($this->element=='reception' && $this->origin_id != 0) {
1142
-            $id=$this->origin_id;
1143
-            $element='order_supplier';
1144
-		} else {
1145
-			$id=$this->id;
1146
-			$element=$this->element;
1147
-		}
1148
-
1149
-		$sql = "SELECT ec.fk_socpeople";
1150
-		$sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec,";
1151
-		if ($source == 'internal') $sql.= " ".MAIN_DB_PREFIX."user as c,";
1152
-		if ($source == 'external') $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
1153
-		$sql.= " ".MAIN_DB_PREFIX."c_type_contact as tc";
1154
-		$sql.= " WHERE ec.element_id = ".$id;
1155
-		$sql.= " AND ec.fk_socpeople = c.rowid";
1156
-		if ($source == 'internal') $sql.= " AND c.entity IN (".getEntity('user').")";
1157
-		if ($source == 'external') $sql.= " AND c.entity IN (".getEntity('societe').")";
1158
-		$sql.= " AND ec.fk_c_type_contact = tc.rowid";
1159
-		$sql.= " AND tc.element = '".$element."'";
1160
-		$sql.= " AND tc.source = '".$source."'";
1161
-		$sql.= " AND tc.code = '".$code."'";
1162
-		$sql.= " AND tc.active = 1";
1163
-		if ($status) $sql.= " AND ec.statut = ".$status;
1164
-
1165
-		dol_syslog(get_class($this)."::getIdContact", LOG_DEBUG);
1166
-		$resql=$this->db->query($sql);
1167
-		if ($resql)
1168
-		{
1169
-			while ($obj = $this->db->fetch_object($resql))
1170
-			{
1171
-				$result[$i]=$obj->fk_socpeople;
1172
-				$i++;
1173
-			}
1174
-		}
1175
-		else
1176
-		{
1177
-			$this->error=$this->db->error();
1178
-			return null;
1179
-		}
1180
-
1181
-		return $result;
1182
-	}
163
+    /**
164
+     * @var string The object's next reference
165
+     */
166
+    public $ref_next;
1183 167
 
1184
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1185
-	/**
1186
-	 *		Load object contact with id=$this->contactid into $this->contact
1187
-	 *
1188
-	 *		@param	int		$contactid      Id du contact. Use this->contactid if empty.
1189
-	 *		@return	int						<0 if KO, >0 if OK
1190
-	 */
1191
-	function fetch_contact($contactid=null)
1192
-	{
1193
-        // phpcs:enable
1194
-		if (empty($contactid)) $contactid=$this->contactid;
168
+    /**
169
+     * @var string An external reference for the object
170
+     */
171
+    public $ref_ext;
1195 172
 
1196
-		if (empty($contactid)) return 0;
173
+    /**
174
+     * @var int The object's status
175
+     * @see setStatut()
176
+     */
177
+    public $statut;
1197 178
 
1198
-		require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
1199
-		$contact = new Contact($this->db);
1200
-		$result=$contact->fetch($contactid);
1201
-		$this->contact = $contact;
1202
-		return $result;
1203
-	}
179
+    /**
180
+     * @var string
181
+     * @see getFullAddress()
182
+     */
183
+    public $country;
1204 184
 
1205
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1206
-	/**
1207
-	 *    	Load the third party of object, from id $this->socid or $this->fk_soc, into this->thirdparty
1208
-	 *
1209
-	 *		@param		int		$force_thirdparty_id	Force thirdparty id
1210
-	 *		@return		int								<0 if KO, >0 if OK
1211
-	 */
1212
-	function fetch_thirdparty($force_thirdparty_id=0)
1213
-	{
1214
-        // phpcs:enable
1215
-		global $conf;
185
+    /**
186
+     * @var int
187
+     * @see getFullAddress(), country
188
+     */
189
+    public $country_id;
1216 190
 
1217
-		if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id))
1218
-			return 0;
191
+    /**
192
+     * @var string
193
+     * @see getFullAddress(), isInEEC(), country
194
+     */
195
+    public $country_code;
1219 196
 
1220
-		require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
197
+    /**
198
+     * @var string
199
+     * @see getFullAddress()
200
+     */
201
+    public $state;
1221 202
 
1222
-		$idtofetch = isset($this->socid) ? $this->socid : (isset($this->fk_soc) ? $this->fk_soc : $this->fk_thirdparty);
1223
-		if ($force_thirdparty_id)
1224
-			$idtofetch = $force_thirdparty_id;
203
+    /**
204
+     * @var int
205
+     * @see getFullAddress(), state
206
+     */
207
+    public $state_id;
1225 208
 
1226
-		if ($idtofetch) {
1227
-			$thirdparty = new Societe($this->db);
1228
-			$result = $thirdparty->fetch($idtofetch);
1229
-			$this->thirdparty = $thirdparty;
209
+    /**
210
+     * @var string
211
+     * @see getFullAddress(), state
212
+     */
213
+    public $state_code;
1230 214
 
1231
-			// Use first price level if level not defined for third party
1232
-			if (!empty(Globals::$conf->global->PRODUIT_MULTIPRICES) && empty($this->thirdparty->price_level)) {
1233
-                $this->thirdparty->price_level = 1;
1234
-			}
215
+    /**
216
+     * @var string
217
+     * @see getFullAddress(), region
218
+     */
219
+    public $region;
1235 220
 
1236
-			return $result;
1237
-		} else
1238
-			return -1;
1239
-	}
221
+    /**
222
+     * @var string
223
+     * @see getFullAddress(), region
224
+     */
225
+    public $region_code;
1240 226
 
227
+    /**
228
+     * @var int
229
+     * @see fetch_barcode()
230
+     */
231
+    public $barcode_type;
1241 232
 
1242
-	/**
1243
-	 * Looks for an object with ref matching the wildcard provided
1244
-	 * It does only work when $this->table_ref_field is set
1245
-	 *
1246
-	 * @param string $ref Wildcard
1247
-	 * @return int >1 = OK, 0 = Not found or table_ref_field not defined, <0 = KO
1248
-	 */
1249
-	public function fetchOneLike($ref)
1250
-	{
1251
-		if (!$this->table_ref_field) {
1252
-			return 0;
1253
-		}
233
+    /**
234
+     * @var string
235
+     * @see fetch_barcode(), barcode_type
236
+     */
237
+    public $barcode_type_code;
1254 238
 
1255
-		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element.' WHERE '.$this->table_ref_field.' LIKE "'.$this->db->escape($ref).'" LIMIT 1';
239
+    /**
240
+     * @var string
241
+     * @see fetch_barcode(), barcode_type
242
+     */
243
+    public $barcode_type_label;
1256 244
 
1257
-		$query = $this->db->query($sql);
245
+    /**
246
+     * @var string
247
+     * @see fetch_barcode(), barcode_type
248
+     */
249
+    public $barcode_type_coder;
1258 250
 
1259
-		if (!$this->db->num_rows($query)) {
1260
-			return 0;
1261
-		}
251
+    /**
252
+     * @var int Payment method ID (cheque, cash, ...)
253
+     * @see setPaymentMethods()
254
+     */
255
+    public $mode_reglement_id;
1262 256
 
1263
-		$result = $this->db->fetch_object($query);
257
+    /**
258
+     * @var int Payment terms ID
259
+     * @see setPaymentTerms()
260
+     */
261
+    public $cond_reglement_id;
1264 262
 
1265
-		return $this->fetch($result->rowid);
1266
-	}
263
+    /**
264
+     * @var int Payment terms ID
265
+     * @deprecated Kept for compatibility
266
+     * @see cond_reglement_id;
267
+     */
268
+    public $cond_reglement;
1267 269
 
1268
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1269
-	/**
1270
-	 *	Load data for barcode into properties ->barcode_type*
1271
-	 *	Properties ->barcode_type that is id of barcode. Type is used to find other properties, but
1272
-	 *  if it is not defined, ->element must be defined to know default barcode type.
1273
-	 *
1274
-	 *	@return		int			<0 if KO, 0 if can't guess type of barcode (ISBN, EAN13...), >0 if OK (all barcode properties loaded)
1275
-	 */
1276
-	function fetch_barcode()
1277
-	{
1278
-        // phpcs:enable
1279
-		global $conf;
270
+    /**
271
+     * @var int Delivery address ID
272
+     * @deprecated
273
+     * @see setDeliveryAddress()
274
+     */
275
+    public $fk_delivery_address;
1280 276
 
1281
-		dol_syslog(get_class($this).'::fetch_barcode this->element='.$this->element.' this->barcode_type='.$this->barcode_type);
277
+    /**
278
+     * @var int Shipping method ID
279
+     * @see setShippingMethod()
280
+     */
281
+    public $shipping_method_id;
1282 282
 
1283
-		$idtype=$this->barcode_type;
1284
-		if (empty($idtype) && $idtype != '0')	// If type of barcode no set, we try to guess. If set to '0' it means we forced to have type remain not defined
1285
-		{
1286
-			if ($this->element == 'product')
1287
-                $idtype = Globals::$conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
1288
-            else if ($this->element == 'societe')
1289
-                $idtype = Globals::$conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
1290
-            else dol_syslog('Call fetch_barcode with barcode_type not defined and cant be guessed', LOG_WARNING);
1291
-		}
283
+    /**
284
+     * @var string
285
+     * @see SetDocModel()
286
+     */
287
+    public $modelpdf;
1292 288
 
1293
-		if ($idtype > 0)
1294
-		{
1295
-			if (empty($this->barcode_type) || empty($this->barcode_type_code) || empty($this->barcode_type_label) || empty($this->barcode_type_coder))    // If data not already loaded
1296
-			{
1297
-				$sql = "SELECT rowid, code, libelle as label, coder";
1298
-				$sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
1299
-				$sql.= " WHERE rowid = ".$idtype;
1300
-				dol_syslog(get_class($this).'::fetch_barcode', LOG_DEBUG);
1301
-				$resql = $this->db->query($sql);
1302
-				if ($resql)
1303
-				{
1304
-					$obj = $this->db->fetch_object($resql);
1305
-					$this->barcode_type       = $obj->rowid;
1306
-					$this->barcode_type_code  = $obj->code;
1307
-					$this->barcode_type_label = $obj->label;
1308
-					$this->barcode_type_coder = $obj->coder;
1309
-					return 1;
1310
-				}
1311
-				else
1312
-				{
1313
-					dol_print_error($this->db);
1314
-					return -1;
1315
-				}
1316
-			}
1317
-		}
1318
-		return 0;
1319
-	}
289
+    /**
290
+     * @var int Bank account ID
291
+     * @see SetBankAccount()
292
+     */
293
+    public $fk_account;
1320 294
 
1321
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1322
-	/**
1323
-	 *		Load the project with id $this->fk_project into this->project
1324
-	 *
1325
-	 *		@return		int			<0 if KO, >=0 if OK
1326
-	 */
1327
-	function fetch_projet()
1328
-	{
1329
-        // phpcs:enable
1330
-		include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
295
+    /**
296
+     * @var string Public note
297
+     * @see update_note()
298
+     */
299
+    public $note_public;
1331 300
 
1332
-		if (empty($this->fk_project) && ! empty($this->fk_projet)) $this->fk_project = $this->fk_projet;	// For backward compatibility
1333
-		if (empty($this->fk_project)) return 0;
301
+    /**
302
+     * @var string Private note
303
+     * @see update_note()
304
+     */
305
+    public $note_private;
1334 306
 
1335
-		$project = new Project($this->db);
1336
-		$result = $project->fetch($this->fk_project);
307
+    /**
308
+     * @deprecated
309
+     * @see note_public
310
+     */
311
+    public $note;
1337 312
 
1338
-		$this->projet = $project;	// deprecated
1339
-		$this->project = $project;
1340
-		return $result;
1341
-	}
313
+    /**
314
+     * @var float Total amount before taxes
315
+     * @see update_price()
316
+     */
317
+    public $total_ht;
1342 318
 
1343
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1344
-	/**
1345
-	 *		Load the product with id $this->fk_product into this->product
1346
-	 *
1347
-	 *		@return		int			<0 if KO, >=0 if OK
1348
-	 */
1349
-	function fetch_product()
1350
-	{
1351
-        // phpcs:enable
1352
-		include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
319
+    /**
320
+     * @var float Total VAT amount
321
+     * @see update_price()
322
+     */
323
+    public $total_tva;
1353 324
 
1354
-		if (empty($this->fk_product)) return 0;
325
+    /**
326
+     * @var float Total local tax 1 amount
327
+     * @see update_price()
328
+     */
329
+    public $total_localtax1;
1355 330
 
1356
-		$product = new Product($this->db);
1357
-		$result = $product->fetch($this->fk_product);
331
+    /**
332
+     * @var float Total local tax 2 amount
333
+     * @see update_price()
334
+     */
335
+    public $total_localtax2;
1358 336
 
1359
-		$this->product = $product;
1360
-		return $result;
1361
-	}
337
+    /**
338
+     * @var float Total amount with taxes
339
+     * @see update_price()
340
+     */
341
+    public $total_ttc;
1362 342
 
1363
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1364
-	/**
1365
-	 *		Load the user with id $userid into this->user
1366
-	 *
1367
-	 *		@param	int		$userid 		Id du contact
1368
-	 *		@return	int						<0 if KO, >0 if OK
1369
-	 */
1370
-	function fetch_user($userid)
1371
-	{
1372
-        // phpcs:enable
1373
-		$user = new User($this->db);
1374
-		$result=$user->fetch($userid);
1375
-		$this->user = $user;
1376
-		return $result;
1377
-	}
343
+    /**
344
+     * @var CommonObjectLine[]
345
+     */
346
+    public $lines;
1378 347
 
1379
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1380
-	/**
1381
-	 *	Read linked origin object
1382
-	 *
1383
-	 *	@return		void
1384
-	 */
1385
-	function fetch_origin()
1386
-	{
1387
-        // phpcs:enable
1388
-		if ($this->origin == 'shipping') $this->origin = 'expedition';
1389
-		if ($this->origin == 'delivery') $this->origin = 'livraison';
1390
-        if ($this->origin == 'order_supplier') $this->origin = 'commandeFournisseur';
348
+    /**
349
+     * @var mixed		Contains comments
350
+     * @see fetchComments()
351
+     */
352
+    public $comments=array();
1391 353
 
1392
-		$origin = $this->origin;
354
+    /**
355
+     * @var int
356
+     * @see setIncoterms()
357
+     */
358
+    public $fk_incoterms;
1393 359
 
1394
-		$classname = ucfirst($origin);
1395
-		$this->$origin = new $classname($this->db);
1396
-		$this->$origin->fetch($this->origin_id);
1397
-	}
360
+    /**
361
+     * @var string
362
+     * @see SetIncoterms()
363
+     */
364
+    public $libelle_incoterms;
1398 365
 
1399
-	/**
1400
-     *  Load object from specific field
1401
-     *
1402
-     *  @param	string	$table		Table element or element line
1403
-     *  @param	string	$field		Field selected
1404
-     *  @param	string	$key		Import key
1405
-     *  @param	string	$element	Element name
1406
-     *	@return	int					<0 if KO, >0 if OK
366
+    /**
367
+     * @var string
368
+     * @see display_incoterms()
1407 369
      */
1408
-	function fetchObjectFrom($table, $field, $key, $element = null)
1409
-	{
1410
-		global $conf;
1411
-
1412
-		$result=false;
1413
-
1414
-		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX.$table;
1415
-		$sql.= " WHERE ".$field." = '".$key."'";
1416
-		if (! empty($element)) {
1417
-			$sql.= " AND entity IN (".getEntity($element).")";
1418
-		} else {
1419
-			$sql .= " AND entity = " . Globals::$conf->entity;
1420
-        }
1421
-
1422
-		dol_syslog(get_class($this).'::fetchObjectFrom', LOG_DEBUG);
1423
-		$resql = $this->db->query($sql);
1424
-		if ($resql)
1425
-		{
1426
-			$row = $this->db->fetch_row($resql);
1427
-			// Test for avoid error -1
1428
-			if ($row[0] > 0) {
1429
-				$result = $this->fetch($row[0]);
1430
-			}
1431
-		}
1432
-
1433
-		return $result;
1434
-	}
1435
-
1436
-	/**
1437
-	 *	Getter generic. Load value from a specific field
1438
-	 *
1439
-	 *	@param	string	$table		Table of element or element line
1440
-	 *	@param	int		$id			Element id
1441
-	 *	@param	string	$field		Field selected
1442
-	 *	@return	int					<0 if KO, >0 if OK
1443
-	 */
1444
-	function getValueFrom($table, $id, $field)
1445
-	{
1446
-		$result=false;
1447
-		if (!empty($id) && !empty($field) && !empty($table)) {
1448
-			$sql = "SELECT ".$field." FROM ".MAIN_DB_PREFIX.$table;
1449
-			$sql.= " WHERE rowid = ".$id;
1450
-
1451
-			dol_syslog(get_class($this).'::getValueFrom', LOG_DEBUG);
1452
-			$resql = $this->db->query($sql);
1453
-			if ($resql)
1454
-			{
1455
-				$row = $this->db->fetch_row($resql);
1456
-				$result = $row[0];
1457
-			}
1458
-		}
1459
-		return $result;
1460
-	}
1461
-
1462
-	/**
1463
-	 *	Setter generic. Update a specific field into database.
1464
-	 *  Warning: Trigger is run only if param trigkey is provided.
1465
-	 *
1466
-	 *	@param	string		$field			Field to update
1467
-	 *	@param	mixed		$value			New value
1468
-	 *	@param	string		$table			To force other table element or element line (should not be used)
1469
-	 *	@param	int			$id				To force other object id (should not be used)
1470
-	 *	@param	string		$format			Data format ('text', 'date'). 'text' is used if not defined
1471
-	 *	@param	string		$id_field		To force rowid field name. 'rowid' is used if not defined
1472
-	 *	@param	User|string	$fuser			Update the user of last update field with this user. If not provided, current user is used except if value is 'none'
1473
-	 *  @param  string      $trigkey    	Trigger key to run (in most cases something like 'XXX_MODIFY')
1474
-	 *  @param	string		$fk_user_field	Name of field to save user id making change
1475
-	 *	@return	int							<0 if KO, >0 if OK
1476
-	 *  @see updateExtraField
1477
-	 */
1478
-	function setValueFrom($field, $value, $table='', $id=null, $format='', $id_field='', $fuser=null, $trigkey='', $fk_user_field='fk_user_modif')
1479
-	{
1480
-		global $user,$langs,$conf;
1481
-
1482
-		if (empty($table)) 	  $table=$this->table_element;
1483
-		if (empty($id))    	  $id=$this->id;
1484
-		if (empty($format))   $format='text';
1485
-		if (empty($id_field)) $id_field='rowid';
1486
-
1487
-		$error=0;
1488
-
1489
-		$this->db->begin();
1490
-
1491
-		// Special case
1492
-		if ($table == 'product' && $field == 'note_private') $field='note';
1493
-		if (in_array($table, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) $fk_user_field = 'fk_user_mod';
1494
-
1495
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$table." SET ";
1496
-
1497
-		if ($format == 'text') $sql.= $field." = '".$this->db->escape($value)."'";
1498
-		else if ($format == 'int') $sql.= $field." = ".$this->db->escape($value);
1499
-		else if ($format == 'date') $sql.= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
1500
-
1501
-		if ($fk_user_field)
1502
-		{
1503
-			if (! empty($fuser) && is_object($fuser)) $sql.=", ".$fk_user_field." = ".$fuser->id;
1504
-			elseif (empty($fuser) || $fuser != 'none') $sql.=", ".$fk_user_field." = ".$user->id;
1505
-		}
1506
-
1507
-		$sql.= " WHERE ".$id_field." = ".$id;
1508
-
1509
-		dol_syslog(get_class($this)."::".__FUNCTION__."", LOG_DEBUG);
1510
-		$resql = $this->db->query($sql);
1511
-		if ($resql)
1512
-		{
1513
-			if ($trigkey)
1514
-			{
1515
-				// call trigger with updated object values
1516
-				if (empty($this->fields) && method_exists($this, 'fetch'))
1517
-				{
1518
-					$result = $this->fetch($id);
1519
-				}
1520
-				else
1521
-				{
1522
-					$result = $this->fetchCommon($id);
1523
-				}
1524
-				if ($result >= 0) $result=$this->call_trigger($trigkey, (! empty($fuser) && is_object($fuser)) ? $fuser : $user);   // This may set this->errors
1525
-				if ($result < 0) $error++;
1526
-			}
370
+    public $location_incoterms;
1527 371
 
1528
-			if (! $error)
1529
-			{
1530
-				if (property_exists($this, $field)) $this->$field = $value;
1531
-				$this->db->commit();
1532
-				return 1;
1533
-			}
1534
-			else
1535
-			{
1536
-				$this->db->rollback();
1537
-				return -2;
1538
-			}
1539
-		}
1540
-		else
1541
-		{
1542
-			$this->error=$this->db->lasterror();
1543
-			$this->db->rollback();
1544
-			return -1;
1545
-		}
1546
-	}
372
+    public $name;
373
+    public $lastname;
374
+    public $firstname;
375
+    public $civility_id;
1547 376
 
1548
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1549
-	/**
1550
-	 *      Load properties id_previous and id_next by comparing $fieldid with $this->ref
1551
-	 *
1552
-	 *      @param	string	$filter		Optional filter. Example: " AND (t.field1 = 'aa' OR t.field2 = 'bb')"
1553
-	 *	 	@param  string	$fieldid   	Name of field to use for the select MAX and MIN
1554
-	 *		@param	int		$nodbprefix	Do not include DB prefix to forge table name
1555
-	 *      @return int         		<0 if KO, >0 if OK
1556
-	 */
1557
-	function load_previous_next_ref($filter, $fieldid, $nodbprefix=0)
1558
-	{
1559
-        // phpcs:enable
1560
-		global $conf, $user;
1561
-
1562
-		if (! $this->table_element)
1563
-		{
1564
-			dol_print_error('',get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
1565
-			return -1;
1566
-		}
1567
-		if ($fieldid == 'none') return 1;
1568
-
1569
-		// Security on socid
1570
-		$socid = 0;
1571
-		if ($user->societe_id > 0) $socid = $user->societe_id;
1572
-
1573
-		// this->ismultientitymanaged contains
1574
-		// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
1575
-		$alias = 's';
1576
-		if ($this->element == 'societe') $alias = 'te';
1577
-
1578
-		$sql = "SELECT MAX(te.".$fieldid.")";
1579
-		$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1580
-		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1581
-            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1582
-		}
1583
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1584
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1585
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1586
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid)  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1587
-		$sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1588
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1589
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1590
-		if (! empty($filter))
1591
-		{
1592
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1593
-			$sql.=$filter;
1594
-		}
1595
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1596
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1597
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1598
-			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1599
-                if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1600
-                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1601
-				} else {
1602
-					$sql.= " AND ug.fk_user = te.rowid";
1603
-					$sql.= " AND ug.entity IN (".getEntity($this->element).")";
1604
-				}
1605
-			} else {
1606
-				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1607
-			}
1608
-		}
1609
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1610
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1611
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1612
-		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1613
-
1614
-		$result = $this->db->query($sql);
1615
-		if (! $result)
1616
-		{
1617
-			$this->error=$this->db->lasterror();
1618
-			return -1;
1619
-		}
1620
-		$row = $this->db->fetch_row($result);
1621
-		$this->ref_previous = $row[0];
1622
-
1623
-
1624
-		$sql = "SELECT MIN(te.".$fieldid.")";
1625
-		$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1626
-		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1627
-            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1628
-		}
1629
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1630
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1631
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1632
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1633
-		$sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1634
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1635
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1636
-		if (! empty($filter))
1637
-		{
1638
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1639
-			$sql.=$filter;
1640
-		}
1641
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1642
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1643
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1644
-			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1645
-                if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1646
-                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1647
-				} else {
1648
-					$sql.= " AND ug.fk_user = te.rowid";
1649
-					$sql.= " AND ug.entity IN (".getEntity($this->element).")";
1650
-				}
1651
-			} else {
1652
-				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1653
-			}
1654
-		}
1655
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1656
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1657
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1658
-		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1659
-		// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
1660
-
1661
-		$result = $this->db->query($sql);
1662
-		if (! $result)
1663
-		{
1664
-			$this->error=$this->db->lasterror();
1665
-			return -2;
1666
-		}
1667
-		$row = $this->db->fetch_row($result);
1668
-		$this->ref_next = $row[0];
1669
-
1670
-		return 1;
1671
-	}
1672
-
1673
-
1674
-	/**
1675
-	 *      Return list of id of contacts of object
1676
-	 *
1677
-	 *      @param	string	$source     Source of contact: external (llx_socpeople) or internal (llx_user) or thirdparty (llx_societe)
1678
-	 *      @return array				Array of id of contacts (if source=external or internal)
1679
-	 * 									Array of id of third parties with at least one contact on object (if source=thirdparty)
1680
-	 */
1681
-	function getListContactId($source='external')
1682
-	{
1683
-		$contactAlreadySelected = array();
1684
-		$tab = $this->liste_contact(-1,$source);
1685
-		$num=count($tab);
1686
-		$i = 0;
1687
-		while ($i < $num)
1688
-		{
1689
-			if ($source == 'thirdparty') $contactAlreadySelected[$i] = $tab[$i]['socid'];
1690
-			else  $contactAlreadySelected[$i] = $tab[$i]['id'];
1691
-			$i++;
1692
-		}
1693
-		return $contactAlreadySelected;
1694
-	}
1695
-
1696
-
1697
-	/**
1698
-	 *	Link element with a project
1699
-	 *
1700
-	 *	@param     	int		$projectid		Project id to link element to
1701
-	 *	@return		int						<0 if KO, >0 if OK
1702
-	 */
1703
-	function setProject($projectid)
1704
-	{
1705
-		if (! $this->table_element)
1706
-		{
1707
-			dol_syslog(get_class($this)."::setProject was called on objet with property table_element not defined",LOG_ERR);
1708
-			return -1;
1709
-		}
1710
-
1711
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1712
-		if ($this->table_element == 'actioncomm')
1713
-		{
1714
-			if ($projectid) $sql.= ' SET fk_project = '.$projectid;
1715
-			else $sql.= ' SET fk_project = NULL';
1716
-			$sql.= ' WHERE id = '.$this->id;
1717
-		}
1718
-		else
1719
-		{
1720
-			if ($projectid) $sql.= ' SET fk_projet = '.$projectid;
1721
-			else $sql.= ' SET fk_projet = NULL';
1722
-			$sql.= ' WHERE rowid = '.$this->id;
1723
-		}
1724
-
1725
-		dol_syslog(get_class($this)."::setProject", LOG_DEBUG);
1726
-		if ($this->db->query($sql))
1727
-		{
1728
-			$this->fk_project = $projectid;
1729
-			return 1;
1730
-		}
1731
-		else
1732
-		{
1733
-			dol_print_error($this->db);
1734
-			return -1;
1735
-		}
1736
-	}
1737
-
1738
-	/**
1739
-	 *  Change the payments methods
1740
-	 *
1741
-	 *  @param		int		$id		Id of new payment method
1742
-	 *  @return		int				>0 if OK, <0 if KO
1743
-	 */
1744
-	function setPaymentMethods($id)
1745
-	{
1746
-		dol_syslog(get_class($this).'::setPaymentMethods('.$id.')');
1747
-		if ($this->statut >= 0 || $this->element == 'societe')
1748
-		{
1749
-			// TODO uniformize field name
1750
-			$fieldname = 'fk_mode_reglement';
1751
-			if ($this->element == 'societe') $fieldname = 'mode_reglement';
1752
-			if (get_class($this) == 'Fournisseur') $fieldname = 'mode_reglement_supplier';
1753
-
1754
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1755
-			$sql .= ' SET '.$fieldname.' = '.$id;
1756
-			$sql .= ' WHERE rowid='.$this->id;
1757
-
1758
-			if ($this->db->query($sql))
1759
-			{
1760
-				$this->mode_reglement_id = $id;
1761
-				// for supplier
1762
-				if (get_class($this) == 'Fournisseur') $this->mode_reglement_supplier_id = $id;
1763
-				return 1;
1764
-			}
1765
-			else
1766
-			{
1767
-				dol_syslog(get_class($this).'::setPaymentMethods Erreur '.$sql.' - '.$this->db->error());
1768
-				$this->error=$this->db->error();
1769
-				return -1;
1770
-			}
1771
-		}
1772
-		else
1773
-		{
1774
-			dol_syslog(get_class($this).'::setPaymentMethods, status of the object is incompatible');
1775
-			$this->error='Status of the object is incompatible '.$this->statut;
1776
-			return -2;
1777
-		}
1778
-	}
1779
-
1780
-	/**
1781
-	 *  Change the multicurrency code
1782
-	 *
1783
-	 *  @param		string	$code	multicurrency code
1784
-	 *  @return		int				>0 if OK, <0 if KO
1785
-	 */
1786
-	function setMulticurrencyCode($code)
1787
-	{
1788
-		dol_syslog(get_class($this).'::setMulticurrencyCode('.$id.')');
1789
-		if ($this->statut >= 0 || $this->element == 'societe')
1790
-		{
1791
-			$fieldname = 'multicurrency_code';
1792
-
1793
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1794
-			$sql .= ' SET '.$fieldname." = '".$this->db->escape($code)."'";
1795
-			$sql .= ' WHERE rowid='.$this->id;
1796
-
1797
-			if ($this->db->query($sql))
1798
-			{
1799
-				$this->multicurrency_code = $code;
377
+    // Dates
378
+    public $date_creation;			// Date creation
379
+    public $date_validation;		// Date validation
380
+    public $date_modification;		// Date last change (tms field)
1800 381
 
1801
-				list($fk_multicurrency, $rate) = MultiCurrency::getIdAndTxFromCode($this->db, $code);
1802
-				if ($rate) $this->setMulticurrencyRate($rate,2);
1803 382
 
1804
-				return 1;
1805
-			}
1806
-			else
1807
-			{
1808
-				dol_syslog(get_class($this).'::setMulticurrencyCode Erreur '.$sql.' - '.$this->db->error());
1809
-				$this->error=$this->db->error();
1810
-				return -1;
1811
-			}
1812
-		}
1813
-		else
1814
-		{
1815
-			dol_syslog(get_class($this).'::setMulticurrencyCode, status of the object is incompatible');
1816
-			$this->error='Status of the object is incompatible '.$this->statut;
1817
-			return -2;
1818
-		}
1819
-	}
1820
-
1821
-	/**
1822
-	 *  Change the multicurrency rate
1823
-	 *
1824
-	 *  @param		double	$rate	multicurrency rate
1825
-	 *  @param		int		$mode	mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency
1826
-	 *  @return		int				>0 if OK, <0 if KO
1827
-	 */
1828
-	function setMulticurrencyRate($rate, $mode=1)
1829
-	{
1830
-		dol_syslog(get_class($this).'::setMulticurrencyRate('.$id.')');
1831
-		if ($this->statut >= 0 || $this->element == 'societe')
1832
-		{
1833
-			$fieldname = 'multicurrency_tx';
1834
-
1835
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1836
-			$sql .= ' SET '.$fieldname.' = '.$rate;
1837
-			$sql .= ' WHERE rowid='.$this->id;
1838
-
1839
-			if ($this->db->query($sql))
1840
-			{
1841
-				$this->multicurrency_tx = $rate;
1842 383
 
1843
-				// Update line price
1844
-				if (!empty($this->lines))
1845
-				{
1846
-					foreach ($this->lines as &$line)
1847
-					{
1848
-						if($mode == 1) {
1849
-							$line->subprice = 0;
1850
-						}
384
+    // No constructor as it is an abstract class
1851 385
 
1852
-						switch ($this->element) {
1853
-							case 'propal':
1854
-								$this->updateline(
1855
-									$line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1856
-									($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1857
-									$line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start,
1858
-									$line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1859
-								);
1860
-								break;
1861
-							case 'commande':
1862
-								$this->updateline(
1863
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1864
-									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->date_start, $line->date_end,
1865
-									$line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1866
-									$line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1867
-								);
1868
-								break;
1869
-							case 'facture':
1870
-								$this->updateline(
1871
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1872
-									$line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits,
1873
-									$line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1874
-									$line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit, $line->multicurrency_subprice
1875
-								);
1876
-								break;
1877
-							case 'supplier_proposal':
1878
-								$this->updateline(
1879
-									$line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1880
-									($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1881
-									$line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options,
1882
-									$line->ref_fourn, $line->multicurrency_subprice
1883
-								);
1884
-								break;
1885
-							case 'order_supplier':
1886
-								$this->updateline(
1887
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1888
-									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false,
1889
-									$line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1890
-								);
1891
-								break;
1892
-							case 'invoice_supplier':
1893
-								$this->updateline(
1894
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->tva_tx, $line->localtax1_tx,
1895
-									$line->localtax2_tx, $line->qty, 0, 'HT', $line->info_bits, $line->product_type, $line->remise_percent, false,
1896
-									$line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1897
-								);
1898
-								break;
1899
-							default:
1900
-								dol_syslog(get_class($this).'::setMulticurrencyRate no updateline defined', LOG_DEBUG);
1901
-								break;
1902
-						}
1903
-					}
1904
-				}
386
+    /**
387
+     * Check an object id/ref exists
388
+     * If you don't need/want to instantiate object and just need to know if object exists, use this method instead of fetch
389
+     *
390
+     *  @param	string	$element   	String of element ('product', 'facture', ...)
391
+     *  @param	int		$id      	Id of object
392
+     *  @param  string	$ref     	Ref of object to check
393
+     *  @param	string	$ref_ext	Ref ext of object to check
394
+     *  @return int     			<0 if KO, 0 if OK but not found, >0 if OK and exists
395
+     */
396
+    static function isExistingObject($element, $id, $ref='', $ref_ext='')
397
+    {
398
+        global $db,$conf;
399
+
400
+        $sql = "SELECT rowid, ref, ref_ext";
401
+        $sql.= " FROM ".MAIN_DB_PREFIX.$element;
402
+        $sql.= " WHERE entity IN (".getEntity($element).")" ;
403
+
404
+        if ($id > 0) $sql.= " AND rowid = ".$db->escape($id);
405
+        else if ($ref) $sql.= " AND ref = '".$db->escape($ref)."'";
406
+        else if ($ref_ext) $sql.= " AND ref_ext = '".$db->escape($ref_ext)."'";
407
+        else {
408
+            $error='ErrorWrongParameters';
409
+            dol_print_error(get_class()."::isExistingObject ".$error, LOG_ERR);
410
+            return -1;
411
+        }
412
+        if ($ref || $ref_ext)
413
+            $sql .= " AND entity = " . Globals::$conf->entity;
1905 414
 
1906
-				return 1;
1907
-			}
1908
-			else
1909
-			{
1910
-				dol_syslog(get_class($this).'::setMulticurrencyRate Erreur '.$sql.' - '.$this->db->error());
1911
-				$this->error=$this->db->error();
1912
-				return -1;
1913
-			}
1914
-		}
1915
-		else
1916
-		{
1917
-			dol_syslog(get_class($this).'::setMulticurrencyRate, status of the object is incompatible');
1918
-			$this->error='Status of the object is incompatible '.$this->statut;
1919
-			return -2;
1920
-		}
1921
-	}
1922
-
1923
-	/**
1924
-	 *  Change the payments terms
1925
-	 *
1926
-	 *  @param		int		$id		Id of new payment terms
1927
-	 *  @return		int				>0 if OK, <0 if KO
1928
-	 */
1929
-	function setPaymentTerms($id)
1930
-	{
1931
-		dol_syslog(get_class($this).'::setPaymentTerms('.$id.')');
1932
-		if ($this->statut >= 0 || $this->element == 'societe')
1933
-		{
1934
-			// TODO uniformize field name
1935
-			$fieldname = 'fk_cond_reglement';
1936
-			if ($this->element == 'societe') $fieldname = 'cond_reglement';
1937
-			if (get_class($this) == 'Fournisseur') $fieldname = 'cond_reglement_supplier';
1938
-
1939
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1940
-			$sql .= ' SET '.$fieldname.' = '.$id;
1941
-			$sql .= ' WHERE rowid='.$this->id;
1942
-
1943
-			if ($this->db->query($sql))
1944
-			{
1945
-				$this->cond_reglement_id = $id;
1946
-				// for supplier
1947
-				if (get_class($this) == 'Fournisseur') $this->cond_reglement_supplier_id = $id;
1948
-				$this->cond_reglement = $id;	// for compatibility
1949
-				return 1;
1950
-			}
1951
-			else
1952
-			{
1953
-				dol_syslog(get_class($this).'::setPaymentTerms Erreur '.$sql.' - '.$this->db->error());
1954
-				$this->error=$this->db->error();
1955
-				return -1;
1956
-			}
1957
-		}
1958
-		else
1959
-		{
1960
-			dol_syslog(get_class($this).'::setPaymentTerms, status of the object is incompatible');
1961
-			$this->error='Status of the object is incompatible '.$this->statut;
1962
-			return -2;
1963
-		}
1964
-	}
1965
-
1966
-	/**
1967
-	 *	Define delivery address
1968
-	 *  @deprecated
1969
-	 *
1970
-	 *	@param      int		$id		Address id
1971
-	 *	@return     int				<0 si ko, >0 si ok
1972
-	 */
1973
-	function setDeliveryAddress($id)
1974
-	{
1975
-		$fieldname = 'fk_delivery_address';
1976
-		if ($this->element == 'delivery' || $this->element == 'shipping') $fieldname = 'fk_address';
1977
-
1978
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ".$fieldname." = ".$id;
1979
-		$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
1980
-
1981
-		if ($this->db->query($sql))
1982
-		{
1983
-			$this->fk_delivery_address = $id;
1984
-			return 1;
1985
-		}
1986
-		else
1987
-		{
1988
-			$this->error=$this->db->error();
1989
-			dol_syslog(get_class($this).'::setDeliveryAddress Erreur '.$sql.' - '.$this->error);
1990
-			return -1;
1991
-		}
1992
-	}
1993
-
1994
-
1995
-	/**
1996
-	 *  Change the shipping method
1997
-	 *
1998
-	 *  @param      int     $shipping_method_id     Id of shipping method
1999
-     *  @param      bool    $notrigger              false=launch triggers after, true=disable triggers
2000
-     *  @param      User	$userused               Object user
2001
-	 *
2002
-	 *  @return     int              1 if OK, 0 if KO
2003
-	 */
2004
-	function setShippingMethod($shipping_method_id, $notrigger=false, $userused=null)
2005
-	{
2006
-        global $user;
415
+        dol_syslog(get_class()."::isExistingObject", LOG_DEBUG);
416
+        $resql = $db->query($sql);
417
+        if ($resql)
418
+        {
419
+            $num=$db->num_rows($resql);
420
+            if ($num > 0) return 1;
421
+            else return 0;
422
+        }
423
+        return -1;
424
+    }
2007 425
 
2008
-        if (empty($userused)) $userused=$user;
426
+    /**
427
+     * Method to output saved errors
428
+     *
429
+     * @return	string		String with errors
430
+     */
431
+    function errorsToString()
432
+    {
433
+        return $this->error.(is_array($this->errors)?(($this->error!=''?', ':'').join(', ',$this->errors)):'');
434
+    }
2009 435
 
2010
-        $error = 0;
436
+    /**
437
+     *	Return full name (civility+' '+name+' '+lastname)
438
+     *
439
+     *	@param	Translate	$langs			Language object for translation of civility (used only if option is 1)
440
+     *	@param	int			$option			0=No option, 1=Add civility
441
+     * 	@param	int			$nameorder		-1=Auto, 0=Lastname+Firstname, 1=Firstname+Lastname, 2=Firstname
442
+     * 	@param	int			$maxlen			Maximum length
443
+     * 	@return	string						String with full name
444
+     */
445
+    function getFullName($langs,$option=0,$nameorder=-1,$maxlen=0)
446
+    {
447
+        //print "lastname=".$this->lastname." name=".$this->name." nom=".$this->nom."<br>\n";
448
+        $lastname=$this->lastname;
449
+        $firstname=$this->firstname;
450
+        if (empty($lastname))  $lastname=(isset($this->lastname)?$this->lastname:(isset($this->name)?$this->name:(isset($this->nom)?$this->nom:(isset($this->societe)?$this->societe:(isset($this->company)?$this->company:'')))));
2011 451
 
2012
-		if (! $this->table_element) {
2013
-			dol_syslog(get_class($this)."::setShippingMethod was called on objet with property table_element not defined",LOG_ERR);
2014
-			return -1;
2015
-		}
452
+        $ret='';
453
+        if ($option && $this->civility_id)
454
+        {
455
+            if ($langs->transnoentitiesnoconv("Civility".$this->civility_id)!="Civility".$this->civility_id) $ret.=$langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
456
+            else $ret.=$this->civility_id.' ';
457
+        }
2016 458
 
2017
-        $this->db->begin();
459
+        $ret .= AlDolUtils::dolGetFirstLastname($firstname, $lastname, $nameorder);
2018 460
 
2019
-		if ($shipping_method_id<0) $shipping_method_id='NULL';
2020
-		dol_syslog(get_class($this).'::setShippingMethod('.$shipping_method_id.')');
461
+        return AlDolUtils::dol_trunc($ret, $maxlen);
462
+    }
2021 463
 
2022
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2023
-		$sql.= " SET fk_shipping_method = ".$shipping_method_id;
2024
-		$sql.= " WHERE rowid=".$this->id;
2025
-        $resql = $this->db->query($sql);
2026
-		if (! $resql) {
2027
-			dol_syslog(get_class($this).'::setShippingMethod Error ', LOG_DEBUG);
2028
-			$this->error = $this->db->lasterror();
2029
-			$error++;
2030
-        } else {
2031
-            if (!$notrigger)
2032
-            {
2033
-                // Call trigger
2034
-                $this->context=array('shippingmethodupdate'=>1);
2035
-                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2036
-                if ($result < 0) $error++;
2037
-                // End call trigger
2038
-            }
2039
-        }
2040
-        if ($error)
464
+    /**
465
+     * 	Return full address of contact
466
+     *
467
+     * 	@param		int			$withcountry		1=Add country into address string
468
+     *  @param		string		$sep				Separator to use to build string
469
+     *  @param		int		    $withregion			1=Add region into address string
470
+     *	@return		string							Full address string
471
+     */
472
+    function getFullAddress($withcountry=0, $sep="\n", $withregion=0)
473
+    {
474
+        if ($withcountry && $this->country_id && (empty($this->country_code) || empty($this->country)))
2041 475
         {
2042
-            $this->db->rollback();
2043
-            return -1;
2044
-        } else {
2045
-            $this->shipping_method_id = ($shipping_method_id=='NULL')?null:$shipping_method_id;
2046
-            $this->db->commit();
2047
-            return 1;
476
+            require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
477
+            $tmparray=getCountry($this->country_id,'all');
478
+            $this->country_code=$tmparray['code'];
479
+            $this->country     =$tmparray['label'];
2048 480
         }
2049
-	}
2050
-
2051
-
2052
-	/**
2053
-	 *  Change the warehouse
2054
-	 *
2055
-	 *  @param      int     $warehouse_id     Id of warehouse
2056
-	 *  @return     int              1 if OK, 0 if KO
2057
-	 */
2058
-	function setWarehouse($warehouse_id)
2059
-	{
2060
-		if (! $this->table_element) {
2061
-			dol_syslog(get_class($this)."::setWarehouse was called on objet with property table_element not defined",LOG_ERR);
2062
-			return -1;
2063
-		}
2064
-		if ($warehouse_id<0) $warehouse_id='NULL';
2065
-		dol_syslog(get_class($this).'::setWarehouse('.$warehouse_id.')');
2066
-
2067
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2068
-		$sql.= " SET fk_warehouse = ".$warehouse_id;
2069
-		$sql.= " WHERE rowid=".$this->id;
2070
-
2071
-		if ($this->db->query($sql)) {
2072
-			$this->warehouse_id = ($warehouse_id=='NULL')?null:$warehouse_id;
2073
-			return 1;
2074
-		} else {
2075
-			dol_syslog(get_class($this).'::setWarehouse Error ', LOG_DEBUG);
2076
-			$this->error=$this->db->error();
2077
-			return 0;
2078
-		}
2079
-	}
2080
-
2081
-
2082
-	/**
2083
-	 *		Set last model used by doc generator
2084
-	 *
2085
-	 *		@param		User	$user		User object that make change
2086
-	 *		@param		string	$modelpdf	Modele name
2087
-	 *		@return		int					<0 if KO, >0 if OK
2088
-	 */
2089
-	function setDocModel($user, $modelpdf)
2090
-	{
2091
-		if (! $this->table_element)
2092
-		{
2093
-			dol_syslog(get_class($this)."::setDocModel was called on objet with property table_element not defined",LOG_ERR);
2094
-			return -1;
2095
-		}
2096
-
2097
-		$newmodelpdf=dol_trunc($modelpdf,255);
2098
-
2099
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2100
-		$sql.= " SET model_pdf = '".$this->db->escape($newmodelpdf)."'";
2101
-		$sql.= " WHERE rowid = ".$this->id;
2102
-		// if ($this->element == 'facture') $sql.= " AND fk_statut < 2";
2103
-		// if ($this->element == 'propal')  $sql.= " AND fk_statut = 0";
2104
-
2105
-		dol_syslog(get_class($this)."::setDocModel", LOG_DEBUG);
2106
-		$resql=$this->db->query($sql);
2107
-		if ($resql)
2108
-		{
2109
-			$this->modelpdf=$modelpdf;
2110
-			return 1;
2111
-		}
2112
-		else
2113
-		{
2114
-			dol_print_error($this->db);
2115
-			return 0;
2116
-		}
2117
-	}
2118
-
2119
-
2120
-	/**
2121
-	 *  Change the bank account
2122
-	 *
2123
-	 *  @param		int		$fk_account		Id of bank account
2124
-	 *  @param      bool    $notrigger      false=launch triggers after, true=disable triggers
2125
-	 *  @param      User	$userused		Object user
2126
-	 *  @return		int				1 if OK, 0 if KO
2127
-	 */
2128
-	function setBankAccount($fk_account, $notrigger=false, $userused=null)
2129
-	{
2130
-        global $user;
2131 481
 
2132
-        if (empty($userused)) $userused=$user;
482
+        if ($withregion && $this->state_id && (empty($this->state_code) || empty($this->state) || empty($this->region) || empty($this->region_cpde)))
483
+        {
484
+            require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
485
+            $tmparray=getState($this->state_id,'all',0,1);
486
+            $this->state_code   =$tmparray['code'];
487
+            $this->state        =$tmparray['label'];
488
+            $this->region_code  =$tmparray['region_code'];
489
+            $this->region       =$tmparray['region'];
490
+        }
2133 491
 
2134
-        $error = 0;
492
+        return dol_format_address($this, $withcountry, $sep);
493
+    }
2135 494
 
2136
-		if (! $this->table_element) {
2137
-			dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined",LOG_ERR);
2138
-			return -1;
2139
-		}
2140
-        $this->db->begin();
2141 495
 
2142
-		if ($fk_account<0) $fk_account='NULL';
2143
-		dol_syslog(get_class($this).'::setBankAccount('.$fk_account.')');
496
+    /**
497
+     * 	Return full address for banner
498
+     *
499
+     * 	@param		string		$htmlkey            HTML id to make banner content unique
500
+     *  @param      Object      $object				Object (thirdparty, thirdparty of contact for contact, null for a member)
501
+     *	@return		string							Full address string
502
+     */
503
+    function getBannerAddress($htmlkey, $object)
504
+    {
505
+        global $conf, $langs;
2144 506
 
2145
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2146
-		$sql.= " SET fk_account = ".$fk_account;
2147
-		$sql.= " WHERE rowid=".$this->id;
507
+        $countriesusingstate=array('AU','US','IN','GB','ES','UK','TR');    // See also option MAIN_FORCE_STATE_INTO_ADDRESS
2148 508
 
2149
-        $resql = $this->db->query($sql);
2150
-        if (! $resql)
509
+        $contactid=0;
510
+        $thirdpartyid=0;
511
+        if ($this->element == 'societe')
2151 512
         {
2152
-            dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error());
2153
-            $this->error = $this->db->lasterror();
2154
-            $error++;
513
+            $thirdpartyid=$this->id;
2155 514
         }
2156
-        else
515
+        if ($this->element == 'contact')
2157 516
         {
2158
-            if (!$notrigger)
2159
-            {
2160
-                // Call trigger
2161
-                $this->context=array('bankaccountupdate'=>1);
2162
-                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2163
-                if ($result < 0) $error++;
2164
-                // End call trigger
2165
-            }
517
+            $contactid=$this->id;
518
+            $thirdpartyid=$object->fk_soc;
2166 519
         }
2167
-        if ($error)
520
+        if ($this->element == 'user')
2168 521
         {
2169
-            $this->db->rollback();
2170
-            return -1;
522
+            $contactid=$this->contact_id;
523
+            $thirdpartyid=$object->fk_soc;
2171 524
         }
2172
-        else
525
+
526
+        $out='<!-- BEGIN part to show address block -->';
527
+
528
+        $outdone=0;
529
+        $coords = $this->getFullAddress(1, ', ', Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT);
530
+        if ($coords)
2173 531
         {
2174
-            $this->fk_account = ($fk_account=='NULL')?null:$fk_account;
2175
-            $this->db->commit();
2176
-            return 1;
532
+            if (!empty(Globals::$conf->use_javascript_ajax)) {
533
+                $namecoords = $this->getFullName($langs,1).'<br>'.$coords;
534
+                // hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile
535
+                $out.='<a href="#" class="hideonsmartphone" onclick="return copyToClipboard(\''.dol_escape_js($namecoords).'\',\''.dol_escape_js($langs->trans("HelpCopyToClipboard")).'\');">';
536
+                $out.=img_picto($langs->trans("Address"), 'object_address.png');
537
+                $out.='</a> ';
538
+            }
539
+            $out.=dol_print_address($coords, 'address_'.$htmlkey.'_'.$this->id, $this->element, $this->id, 1, ', '); $outdone++;
540
+            $outdone++;
2177 541
         }
2178
-    }
2179 542
 
543
+        if (!in_array($this->country_code, $countriesusingstate) && empty(Globals::$conf->global->MAIN_FORCE_STATE_INTO_ADDRESS)   // If MAIN_FORCE_STATE_INTO_ADDRESS is on, state is already returned previously with getFullAddress
544
+            && empty(Globals::$conf->global->SOCIETE_DISABLE_STATE) && $this->state) {
545
+            if (!empty(Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 && $this->region) {
546
+                $out.=($outdone?' - ':'').$this->region.' - '.$this->state;
547
+            }
548
+            else {
549
+                $out.=($outdone?' - ':'').$this->state;
550
+            }
551
+            $outdone++;
552
+        }
2180 553
 
2181
-	// TODO: Move line related operations to CommonObjectLine?
2182
-
2183
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2184
-	/**
2185
-	 *  Save a new position (field rang) for details lines.
2186
-	 *  You can choose to set position for lines with already a position or lines without any position defined.
2187
-	 *
2188
-	 * 	@param		boolean		$renum			   True to renum all already ordered lines, false to renum only not already ordered lines.
2189
-	 * 	@param		string		$rowidorder		   ASC or DESC
2190
-	 * 	@param		boolean		$fk_parent_line    Table with fk_parent_line field or not
2191
-	 * 	@return		int                            <0 if KO, >0 if OK
2192
-	 */
2193
-	function line_order($renum=false, $rowidorder='ASC', $fk_parent_line=true)
2194
-	{
2195
-        // phpcs:enable
2196
-		if (! $this->table_element_line)
2197
-		{
2198
-			dol_syslog(get_class($this)."::line_order was called on objet with property table_element_line not defined",LOG_ERR);
2199
-			return -1;
2200
-		}
2201
-		if (! $this->fk_element)
2202
-		{
2203
-			dol_syslog(get_class($this)."::line_order was called on objet with property fk_element not defined",LOG_ERR);
2204
-			return -1;
2205
-		}
2206
-
2207
-		// Count number of lines to reorder (according to choice $renum)
2208
-		$nl=0;
2209
-		$sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2210
-		$sql.= ' WHERE '.$this->fk_element.'='.$this->id;
2211
-		if (! $renum) $sql.= ' AND rang = 0';
2212
-		if ($renum) $sql.= ' AND rang <> 0';
2213
-
2214
-		dol_syslog(get_class($this)."::line_order", LOG_DEBUG);
2215
-		$resql = $this->db->query($sql);
2216
-		if ($resql)
2217
-		{
2218
-			$row = $this->db->fetch_row($resql);
2219
-			$nl = $row[0];
2220
-		}
2221
-		else dol_print_error($this->db);
2222
-		if ($nl > 0)
2223
-		{
2224
-			// The goal of this part is to reorder all lines, with all children lines sharing the same
2225
-			// counter that parents.
2226
-			$rows=array();
2227
-
2228
-			// We first search all lines that are parent lines (for multilevel details lines)
2229
-			$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2230
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2231
-			if ($fk_parent_line) $sql.= ' AND fk_parent_line IS NULL';
2232
-			$sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
2233
-
2234
-			dol_syslog(get_class($this)."::line_order search all parent lines", LOG_DEBUG);
2235
-			$resql = $this->db->query($sql);
2236
-			if ($resql)
2237
-			{
2238
-				$i=0;
2239
-				$num = $this->db->num_rows($resql);
2240
-				while ($i < $num)
2241
-				{
2242
-					$row = $this->db->fetch_row($resql);
2243
-					$rows[] = $row[0];	// Add parent line into array rows
2244
-					$childrens = $this->getChildrenOfLine($row[0]);
2245
-					if (! empty($childrens))
2246
-					{
2247
-						foreach($childrens as $child)
2248
-						{
2249
-							array_push($rows, $child);
2250
-						}
2251
-					}
2252
-					$i++;
2253
-				}
554
+        if (! empty($this->phone) || ! empty($this->phone_pro) || ! empty($this->phone_mobile) || ! empty($this->phone_perso) || ! empty($this->fax) || ! empty($this->office_phone) || ! empty($this->user_mobile) || ! empty($this->office_fax)) $out.=($outdone?'<br>':'');
555
+        if (! empty($this->phone) && empty($this->phone_pro)) {		// For objects that store pro phone into ->phone
556
+            $out.=dol_print_phone($this->phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
557
+        }
558
+        if (! empty($this->phone_pro)) {
559
+            $out.=dol_print_phone($this->phone_pro,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
560
+        }
561
+        if (! empty($this->phone_mobile)) {
562
+            $out.=dol_print_phone($this->phone_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
563
+        }
564
+        if (! empty($this->phone_perso)) {
565
+            $out.=dol_print_phone($this->phone_perso,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePerso")); $outdone++;
566
+        }
567
+        if (! empty($this->office_phone)) {
568
+            $out.=dol_print_phone($this->office_phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
569
+        }
570
+        if (! empty($this->user_mobile)) {
571
+            $out.=dol_print_phone($this->user_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
572
+        }
573
+        if (! empty($this->fax)) {
574
+            $out.=dol_print_phone($this->fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
575
+        }
576
+        if (! empty($this->office_fax)) {
577
+            $out.=dol_print_phone($this->office_fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
578
+        }
2254 579
 
2255
-				// Now we set a new number for each lines (parent and children with children included into parent tree)
2256
-				if (! empty($rows))
2257
-				{
2258
-					foreach($rows as $key => $row)
2259
-					{
2260
-						$this->updateRangOfLine($row, ($key+1));
2261
-					}
2262
-				}
2263
-			}
2264
-			else
2265
-			{
2266
-				dol_print_error($this->db);
2267
-			}
2268
-		}
2269
-		return 1;
2270
-	}
2271
-
2272
-	/**
2273
-	 * 	Get children of line
2274
-	 *
2275
-	 * 	@param	int		$id		Id of parent line
2276
-	 * 	@return	array			Array with list of children lines id
2277
-	 */
2278
-	function getChildrenOfLine($id)
2279
-	{
2280
-		$rows=array();
2281
-
2282
-		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2283
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2284
-		$sql.= ' AND fk_parent_line = '.$id;
2285
-		$sql.= ' ORDER BY rang ASC';
2286
-
2287
-		dol_syslog(get_class($this)."::getChildrenOfLine search children lines for line ".$id."", LOG_DEBUG);
2288
-		$resql = $this->db->query($sql);
2289
-		if ($resql)
2290
-		{
2291
-			$i=0;
2292
-			$num = $this->db->num_rows($resql);
2293
-			while ($i < $num)
2294
-			{
2295
-				$row = $this->db->fetch_row($resql);
2296
-				$rows[$i] = $row[0];
2297
-				$i++;
2298
-			}
2299
-		}
580
+        $out.='<div style="clear: both;"></div>';
581
+        $outdone=0;
582
+        if (! empty($this->email))
583
+        {
584
+            $out.=dol_print_email($this->email,$this->id,$object->id,'AC_EMAIL',0,0,1);
585
+            $outdone++;
586
+        }
587
+        if (! empty($this->url))
588
+        {
589
+            $out.=dol_print_url($this->url,'_goout',0,1);
590
+            $outdone++;
591
+        }
592
+        $out.='<div style="clear: both;">';
593
+        if (!empty(Globals::$conf->socialnetworks->enabled)) {
594
+            if ($this->skype) $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
595
+            $outdone++;
596
+            if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid,$this->id,$object->id,'jabber');
597
+            $outdone++;
598
+            if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
599
+            $outdone++;
600
+            if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
601
+            $outdone++;
602
+        }
603
+        $out.='</div>';
2300 604
 
2301
-		return $rows;
2302
-	}
605
+        $out.='<!-- END Part to show address block -->';
2303 606
 
2304
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2305
-	/**
2306
-	 * 	Update a line to have a lower rank
2307
-	 *
2308
-	 * 	@param 	int			$rowid				Id of line
2309
-	 * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2310
-	 * 	@return	void
2311
-	 */
2312
-	function line_up($rowid, $fk_parent_line=true)
2313
-	{
2314
-        // phpcs:enable
2315
-		$this->line_order(false, 'ASC', $fk_parent_line);
607
+        return $out;
608
+    }
2316 609
 
2317
-		// Get rang of line
2318
-		$rang = $this->getRangOfLine($rowid);
610
+    /**
611
+     * Return the link of last main doc file for direct public download.
612
+     *
613
+     * @param	string	$modulepart			Module related to document
614
+     * @param	int		$initsharekey		Init the share key if it was not yet defined
615
+     * @param	int		$relativelink		0=Return full external link, 1=Return link relative to root of file
616
+     * @return	string						Link or empty string if there is no download link
617
+     */
618
+    function getLastMainDocLink($modulepart, $initsharekey=0, $relativelink=0)
619
+    {
620
+        global $user, $dolibarr_main_url_root;
2319 621
 
2320
-		// Update position of line
2321
-		$this->updateLineUp($rowid, $rang);
2322
-	}
622
+        if (empty($this->last_main_doc))
623
+        {
624
+            return '';		// No way to known which document name to use
625
+        }
2323 626
 
2324
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2325
-	/**
2326
-	 * 	Update a line to have a higher rank
2327
-	 *
2328
-	 * 	@param	int			$rowid				Id of line
2329
-	 * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2330
-	 * 	@return	void
2331
-	 */
2332
-	function line_down($rowid, $fk_parent_line=true)
2333
-	{
2334
-        // phpcs:enable
2335
-		$this->line_order(false, 'ASC', $fk_parent_line);
2336
-
2337
-		// Get rang of line
2338
-		$rang = $this->getRangOfLine($rowid);
2339
-
2340
-		// Get max value for rang
2341
-		$max = $this->line_max();
2342
-
2343
-		// Update position of line
2344
-		$this->updateLineDown($rowid, $rang, $max);
2345
-	}
2346
-
2347
-	/**
2348
-	 * 	Update position of line (rang)
2349
-	 *
2350
-	 * 	@param	int		$rowid		Id of line
2351
-	 * 	@param	int		$rang		Position
2352
-	 * 	@return	void
2353
-	 */
2354
-	function updateRangOfLine($rowid,$rang)
2355
-	{
2356
-		$fieldposition = 'rang';
2357
-		if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2358
-
2359
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2360
-		$sql.= ' WHERE rowid = '.$rowid;
2361
-
2362
-		dol_syslog(get_class($this)."::updateRangOfLine", LOG_DEBUG);
2363
-		if (! $this->db->query($sql))
2364
-		{
2365
-			dol_print_error($this->db);
2366
-		}
2367
-	}
627
+        include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
628
+        $ecmfile=new EcmFiles($this->db);
629
+        $result = $ecmfile->fetch(0, '', $this->last_main_doc);
630
+        if ($result < 0)
631
+        {
632
+            $this->error = $ecmfile->error;
633
+            $this->errors = $ecmfile->errors;
634
+            return -1;
635
+        }
2368 636
 
2369
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2370
-	/**
2371
-	 * 	Update position of line with ajax (rang)
2372
-	 *
2373
-	 * 	@param	array	$rows	Array of rows
2374
-	 * 	@return	void
2375
-	 */
2376
-	function line_ajaxorder($rows)
2377
-	{
2378
-        // phpcs:enable
2379
-		$num = count($rows);
2380
-		for ($i = 0 ; $i < $num ; $i++)
2381
-		{
2382
-			$this->updateRangOfLine($rows[$i], ($i+1));
2383
-		}
2384
-	}
2385
-
2386
-	/**
2387
-	 * 	Update position of line up (rang)
2388
-	 *
2389
-	 * 	@param	int		$rowid		Id of line
2390
-	 * 	@param	int		$rang		Position
2391
-	 * 	@return	void
2392
-	 */
2393
-	function updateLineUp($rowid,$rang)
2394
-	{
2395
-		if ($rang > 1)
2396
-		{
2397
-			$fieldposition = 'rang';
2398
-			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2399
-
2400
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang ;
2401
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2402
-			$sql.= ' AND rang = '.($rang - 1);
2403
-			if ($this->db->query($sql) )
2404
-			{
2405
-				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang - 1);
2406
-				$sql.= ' WHERE rowid = '.$rowid;
2407
-				if (! $this->db->query($sql) )
2408
-				{
2409
-					dol_print_error($this->db);
2410
-				}
2411
-			}
2412
-			else
2413
-			{
2414
-				dol_print_error($this->db);
2415
-			}
2416
-		}
2417
-	}
2418
-
2419
-	/**
2420
-	 * 	Update position of line down (rang)
2421
-	 *
2422
-	 * 	@param	int		$rowid		Id of line
2423
-	 * 	@param	int		$rang		Position
2424
-	 * 	@param	int		$max		Max
2425
-	 * 	@return	void
2426
-	 */
2427
-	function updateLineDown($rowid,$rang,$max)
2428
-	{
2429
-		if ($rang < $max)
2430
-		{
2431
-			$fieldposition = 'rang';
2432
-			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2433
-
2434
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2435
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2436
-			$sql.= ' AND rang = '.($rang+1);
2437
-			if ($this->db->query($sql) )
2438
-			{
2439
-				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang+1);
2440
-				$sql.= ' WHERE rowid = '.$rowid;
2441
-				if (! $this->db->query($sql) )
637
+        if (empty($ecmfile->id))
638
+        {
639
+            // Add entry into index
640
+            if ($initsharekey)
641
+            {
642
+                require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
643
+                // TODO We can't, we dont' have full path of file, only last_main_doc adn ->element, so we must rebuild full path first
644
+                /*
645
+				$ecmfile->filepath = $rel_dir;
646
+				$ecmfile->filename = $filename;
647
+				$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
648
+				$ecmfile->fullpath_orig = '';
649
+				$ecmfile->gen_or_uploaded = 'generated';
650
+				$ecmfile->description = '';    // indexed content
651
+				$ecmfile->keyword = '';        // keyword content
652
+				$ecmfile->share = getRandomPassword(true);
653
+				$result = $ecmfile->create($user);
654
+				if ($result < 0)
2442 655
 				{
2443
-					dol_print_error($this->db);
656
+					$this->error = $ecmfile->error;
657
+					$this->errors = $ecmfile->errors;
2444 658
 				}
2445
-			}
2446
-			else
2447
-			{
2448
-				dol_print_error($this->db);
2449
-			}
2450
-		}
2451
-	}
2452
-
2453
-	/**
2454
-	 * 	Get position of line (rang)
2455
-	 *
2456
-	 * 	@param		int		$rowid		Id of line
2457
-	 *  @return		int     			Value of rang in table of lines
2458
-	 */
2459
-	function getRangOfLine($rowid)
2460
-	{
2461
-		$sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2462
-		$sql.= ' WHERE rowid ='.$rowid;
2463
-
2464
-		dol_syslog(get_class($this)."::getRangOfLine", LOG_DEBUG);
2465
-		$resql = $this->db->query($sql);
2466
-		if ($resql)
2467
-		{
2468
-			$row = $this->db->fetch_row($resql);
2469
-			return $row[0];
2470
-		}
2471
-	}
2472
-
2473
-	/**
2474
-	 * 	Get rowid of the line relative to its position
2475
-	 *
2476
-	 * 	@param		int		$rang		Rang value
2477
-	 *  @return     int     			Rowid of the line
2478
-	 */
2479
-	function getIdOfLine($rang)
2480
-	{
2481
-		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2482
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2483
-		$sql.= ' AND rang = '.$rang;
2484
-		$resql = $this->db->query($sql);
2485
-		if ($resql)
2486
-		{
2487
-			$row = $this->db->fetch_row($resql);
2488
-			return $row[0];
2489
-		}
2490
-	}
659
+				*/
660
+            }
661
+            else return '';
662
+        }
663
+        elseif (empty($ecmfile->share))
664
+        {
665
+            // Add entry into index
666
+            if ($initsharekey)
667
+            {
668
+                require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
669
+                $ecmfile->share = getRandomPassword(true);
670
+                $ecmfile->update($user);
671
+            }
672
+            else return '';
673
+        }
2491 674
 
2492
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2493
-	/**
2494
-	 * 	Get max value used for position of line (rang)
2495
-	 *
2496
-	 * 	@param		int		$fk_parent_line		Parent line id
2497
-	 *  @return     int  			   			Max value of rang in table of lines
2498
-	 */
2499
-	function line_max($fk_parent_line=0)
2500
-	{
2501
-        // phpcs:enable
2502
-		// Search the last rang with fk_parent_line
2503
-		if ($fk_parent_line)
2504
-		{
2505
-			$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2506
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2507
-			$sql.= ' AND fk_parent_line = '.$fk_parent_line;
2508
-
2509
-			dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2510
-			$resql = $this->db->query($sql);
2511
-			if ($resql)
2512
-			{
2513
-				$row = $this->db->fetch_row($resql);
2514
-				if (! empty($row[0]))
2515
-				{
2516
-					return $row[0];
2517
-				}
2518
-				else
2519
-				{
2520
-					return $this->getRangOfLine($fk_parent_line);
2521
-				}
2522
-			}
2523
-		}
2524
-		// If not, search the last rang of element
2525
-		else
2526
-		{
2527
-			$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2528
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2529
-
2530
-			dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2531
-			$resql = $this->db->query($sql);
2532
-			if ($resql)
2533
-			{
2534
-				$row = $this->db->fetch_row($resql);
2535
-				return $row[0];
2536
-			}
2537
-		}
2538
-	}
675
+        // Define $urlwithroot
676
+        $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
677
+        $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
678
+        //$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
2539 679
 
2540
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2541
-	/**
2542
-	 *  Update external ref of element
2543
-	 *
2544
-	 *  @param      string		$ref_ext	Update field ref_ext
2545
-	 *  @return     int      		   		<0 if KO, >0 if OK
2546
-	 */
2547
-	function update_ref_ext($ref_ext)
2548
-	{
2549
-        // phpcs:enable
2550
-		if (! $this->table_element)
2551
-		{
2552
-			dol_syslog(get_class($this)."::update_ref_ext was called on objet with property table_element not defined", LOG_ERR);
2553
-			return -1;
2554
-		}
2555
-
2556
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2557
-		$sql.= " SET ref_ext = '".$this->db->escape($ref_ext)."'";
2558
-		$sql.= " WHERE ".(isset($this->table_rowid)?$this->table_rowid:'rowid')." = ". $this->id;
2559
-
2560
-		dol_syslog(get_class($this)."::update_ref_ext", LOG_DEBUG);
2561
-		if ($this->db->query($sql))
2562
-		{
2563
-			$this->ref_ext = $ref_ext;
2564
-			return 1;
2565
-		}
2566
-		else
2567
-		{
2568
-			$this->error=$this->db->error();
2569
-			return -1;
2570
-		}
2571
-	}
680
+        $forcedownload=0;
2572 681
 
2573
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2574
-	/**
2575
-	 *  Update note of element
2576
-	 *
2577
-	 *  @param      string		$note		New value for note
2578
-	 *  @param		string		$suffix		'', '_public' or '_private'
2579
-	 *  @return     int      		   		<0 if KO, >0 if OK
2580
-	 */
2581
-	function update_note($note, $suffix='')
2582
-	{
2583
-        // phpcs:enable
2584
-		global $user;
2585
-
2586
-		if (! $this->table_element)
2587
-		{
2588
-			$this->error='update_note was called on objet with property table_element not defined';
2589
-			dol_syslog(get_class($this)."::update_note was called on objet with property table_element not defined", LOG_ERR);
2590
-			return -1;
2591
-		}
2592
-		if (! in_array($suffix,array('','_public','_private')))
2593
-		{
2594
-			$this->error='update_note Parameter suffix must be empty, \'_private\' or \'_public\'';
2595
-			dol_syslog(get_class($this)."::update_note Parameter suffix must be empty, '_private' or '_public'", LOG_ERR);
2596
-			return -2;
2597
-		}
2598
-		// Special cas
2599
-		//var_dump($this->table_element);exit;
2600
-		if ($this->table_element == 'product') $suffix='';
2601
-
2602
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2603
-		$sql.= " SET note".$suffix." = ".(!empty($note)?("'".$this->db->escape($note)."'"):"NULL");
2604
-		$sql.= " ,".(in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))?"fk_user_mod":"fk_user_modif")." = ".$user->id;
2605
-		$sql.= " WHERE rowid =". $this->id;
2606
-
2607
-		dol_syslog(get_class($this)."::update_note", LOG_DEBUG);
2608
-		if ($this->db->query($sql))
2609
-		{
2610
-			if ($suffix == '_public') $this->note_public = $note;
2611
-			else if ($suffix == '_private') $this->note_private = $note;
2612
-			else
2613
-			{
2614
-				$this->note = $note;      // deprecated
2615
-				$this->note_private = $note;
2616
-			}
2617
-			return 1;
2618
-		}
2619
-		else
2620
-		{
2621
-			$this->error=$this->db->lasterror();
2622
-			return -1;
2623
-		}
2624
-	}
682
+        $paramlink='';
683
+        //if (! empty($modulepart)) $paramlink.=($paramlink?'&':'').'modulepart='.$modulepart;		// For sharing with hash (so public files), modulepart is not required.
684
+        //if (! empty($ecmfile->entity)) $paramlink.='&entity='.$ecmfile->entity; 					// For sharing with hash (so public files), entity is not required.
685
+        //$paramlink.=($paramlink?'&':'').'file='.urlencode($filepath);								// No need of name of file for public link, we will use the hash
686
+        if (! empty($ecmfile->share)) $paramlink.=($paramlink?'&':'').'hashp='.$ecmfile->share;			// Hash for public share
687
+        if ($forcedownload) $paramlink.=($paramlink?'&':'').'attachment=1';
688
+
689
+        if ($relativelink)
690
+        {
691
+            $linktoreturn='document.php'.($paramlink?'?'.$paramlink:'');
692
+        }
693
+        else
694
+        {
695
+            $linktoreturn=$urlwithroot.'/document.php'.($paramlink?'?'.$paramlink:'');
696
+        }
697
+
698
+        // Here $ecmfile->share is defined
699
+        return $linktoreturn;
700
+    }
2625 701
 
2626
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2627
-	/**
2628
-	 * 	Update public note (kept for backward compatibility)
2629
-	 *
2630
-	 * @param      string		$note		New value for note
2631
-	 * @return     int      		   		<0 if KO, >0 if OK
2632
-	 * @deprecated
2633
-	 * @see update_note()
2634
-	 */
2635
-	function update_note_public($note)
2636
-	{
2637
-        // phpcs:enable
2638
-		return $this->update_note($note,'_public');
2639
-	}
2640 702
 
2641 703
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2642
-	/**
2643
-	 *	Update total_ht, total_ttc, total_vat, total_localtax1, total_localtax2 for an object (sum of lines).
2644
-	 *  Must be called at end of methods addline or updateline.
2645
-	 *
2646
-	 *	@param	int		$exclspec          	>0 = Exclude special product (product_type=9)
2647
-	 *  @param  string	$roundingadjust    	'none'=Do nothing, 'auto'=Use default method (MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND if defined, or '0'), '0'=Force mode total of rounding, '1'=Force mode rounding of total
2648
-	 *  @param	int		$nodatabaseupdate	1=Do not update database. Update only properties of object.
2649
-	 *  @param	Societe	$seller				If roundingadjust is '0' or '1' or maybe 'auto', it means we recalculate total for lines before calculating total for object and for this, we need seller object.
2650
-	 *	@return	int    			           	<0 if KO, >0 if OK
2651
-	 */
2652
-	function update_price($exclspec=0,$roundingadjust='none',$nodatabaseupdate=0,$seller=null)
2653
-	{
704
+    /**
705
+     *  Add a link between element $this->element and a contact
706
+     *
707
+     *  @param	int		$fk_socpeople       Id of thirdparty contact (if source = 'external') or id of user (if souce = 'internal') to link
708
+     *  @param 	int		$type_contact 		Type of contact (code or id). Must be id or code found into table llx_c_type_contact. For example: SALESREPFOLL
709
+     *  @param  string	$source             external=Contact extern (llx_socpeople), internal=Contact intern (llx_user)
710
+     *  @param  int		$notrigger			Disable all triggers
711
+     *  @return int                 		<0 if KO, >0 if OK
712
+     */
713
+    function add_contact($fk_socpeople, $type_contact, $source='external',$notrigger=0)
714
+    {
2654 715
         // phpcs:enable
2655
-		global $conf, $hookmanager, $action;
2656
-
2657
-		// Some external module want no update price after a trigger because they have another method to calculate the total (ex: with an extrafield)
2658
-		$MODULE = "";
2659
-		if ($this->element == 'propal')
2660
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL";
2661
-		elseif ($this->element == 'order')
2662
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER";
2663
-		elseif ($this->element == 'facture')
2664
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE";
2665
-		elseif ($this->element == 'facture_fourn')
2666
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE";
2667
-		elseif ($this->element == 'order_supplier')
2668
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER";
2669
-		elseif ($this->element == 'supplier_proposal')
2670
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
2671
-
2672
-		if (! empty($MODULE)) {
2673
-			if (!empty(Globals::$conf->global->$MODULE)) {
2674
-                $modsactivated = explode(',', Globals::$conf->global->$MODULE);
2675
-                foreach ($modsactivated as $mod) {
2676
-					if (Globals::$conf->$mod->enabled)
2677
-                        return 1; // update was disabled by specific setup
2678
-				}
2679
-			}
2680
-		}
716
+        global $user,$langs;
2681 717
 
2682
-		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
2683 718
 
2684
-		if ($roundingadjust == '-1') $roundingadjust='auto';	// For backward compatibility
719
+        dol_syslog(get_class($this)."::add_contact $fk_socpeople, $type_contact, $source, $notrigger");
2685 720
 
2686
-		$forcedroundingmode=$roundingadjust;
2687
-		if ($forcedroundingmode == 'auto' && isset(Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND))
2688
-            $forcedroundingmode = Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND;
2689
-        elseif ($forcedroundingmode == 'auto') $forcedroundingmode='0';
721
+        // Check parameters
722
+        if ($fk_socpeople <= 0)
723
+        {
724
+            $langs->load("errors");
725
+            $this->error=$langs->trans("ErrorWrongValueForParameterX","1");
726
+            dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
727
+            return -1;
728
+        }
729
+        if (! $type_contact)
730
+        {
731
+            $langs->load("errors");
732
+            $this->error=$langs->trans("ErrorWrongValueForParameterX","2");
733
+            dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
734
+            return -2;
735
+        }
2690 736
 
2691
-		$error=0;
2692
-
2693
-		$multicurrency_tx = !empty($this->multicurrency_tx) ? $this->multicurrency_tx : 1;
2694
-
2695
-		// Define constants to find lines to sum
2696
-		$fieldtva='total_tva';
2697
-		$fieldlocaltax1='total_localtax1';
2698
-		$fieldlocaltax2='total_localtax2';
2699
-		$fieldup='subprice';
2700
-		if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier')
2701
-		{
2702
-			$fieldtva='tva';
2703
-			$fieldup='pu_ht';
2704
-		}
2705
-		if ($this->element == 'expensereport')
2706
-		{
2707
-			$fieldup='value_unit';
2708
-		}
2709
-
2710
-		$sql = 'SELECT rowid, qty, '.$fieldup.' as up, remise_percent, total_ht, '.$fieldtva.' as total_tva, total_ttc, '.$fieldlocaltax1.' as total_localtax1, '.$fieldlocaltax2.' as total_localtax2,';
2711
-		$sql.= ' tva_tx as vatrate, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, info_bits, product_type';
2712
-			if ($this->table_element_line == 'facturedet') $sql.= ', situation_percent';
2713
-			$sql.= ', multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
2714
-		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2715
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2716
-		if ($exclspec)
2717
-		{
2718
-			$product_field='product_type';
2719
-			if ($this->table_element_line == 'contratdet') $product_field='';    // contratdet table has no product_type field
2720
-			if ($product_field) $sql.= ' AND '.$product_field.' <> 9';
2721
-		}
2722
-		$sql.= ' ORDER by rowid';	// We want to be sure to always use same order of line to not change lines differently when option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND is used
2723
-
2724
-		dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2725
-		$resql = $this->db->query($sql);
2726
-		if ($resql)
2727
-		{
2728
-			$this->total_ht  = 0;
2729
-			$this->total_tva = 0;
2730
-			$this->total_localtax1 = 0;
2731
-			$this->total_localtax2 = 0;
2732
-			$this->total_ttc = 0;
2733
-			$total_ht_by_vats  = array();
2734
-			$total_tva_by_vats = array();
2735
-			$total_ttc_by_vats = array();
2736
-			$this->multicurrency_total_ht	= 0;
2737
-			$this->multicurrency_total_tva	= 0;
2738
-			$this->multicurrency_total_ttc	= 0;
2739
-
2740
-			$num = $this->db->num_rows($resql);
2741
-			$i = 0;
2742
-			while ($i < $num)
2743
-			{
2744
-				$obj = $this->db->fetch_object($resql);
737
+        $id_type_contact=0;
738
+        if (is_numeric($type_contact))
739
+        {
740
+            $id_type_contact=$type_contact;
741
+        }
742
+        else
743
+        {
744
+            // We look for id type_contact
745
+            $sql = "SELECT tc.rowid";
746
+            $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
747
+            $sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
748
+            $sql.= " AND tc.source='".$this->db->escape($source)."'";
749
+            $sql.= " AND tc.code='".$this->db->escape($type_contact)."' AND tc.active=1";
750
+            //print $sql;
751
+            $resql=$this->db->query($sql);
752
+            if ($resql)
753
+            {
754
+                $obj = $this->db->fetch_object($resql);
755
+                if ($obj) $id_type_contact=$obj->rowid;
756
+            }
757
+        }
2745 758
 
2746
-				// Note: There is no check on detail line and no check on total, if $forcedroundingmode = 'none'
2747
-				$parameters=array('fk_element' => $obj->rowid);
2748
-				$reshook = $hookmanager->executeHooks('changeRoundingMode', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
759
+        if ($id_type_contact == 0)
760
+        {
761
+            $this->error='CODE_NOT_VALID_FOR_THIS_ELEMENT';
762
+            dol_syslog("CODE_NOT_VALID_FOR_THIS_ELEMENT: Code type of contact '".$type_contact."' does not exists or is not active for element ".$this->element.", we can ignore it");
763
+            return -3;
764
+        }
2749 765
 
2750
-				if (empty($reshook) && $forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
2751
-				{
2752
-					$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
2753
-					$tmpcal=calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
2754
-					$diff=price2num($tmpcal[1] - $obj->total_tva, 'MT', 1);
2755
-					if ($diff)
2756
-					{
2757
-						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".$tmpcal[1].", total_ttc = ".$tmpcal[2]." WHERE rowid = ".$obj->rowid;
2758
-						dol_syslog('We found unconsistent data into detailed line (difference of '.$diff.') for line rowid = '.$obj->rowid." (total vat of line calculated=".$tmpcal[1].", database=".$obj->total_tva."). We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2759
-								$resqlfix=$this->db->query($sqlfix);
2760
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2761
-								$obj->total_tva = $tmpcal[1];
2762
-								$obj->total_ttc = $tmpcal[2];
2763
-						//
2764
-					}
2765
-				}
766
+        $datecreate = dol_now();
2766 767
 
2767
-				$this->total_ht        += $obj->total_ht;		// The field visible at end of line detail
2768
-				$this->total_tva       += $obj->total_tva;
2769
-				$this->total_localtax1 += $obj->total_localtax1;
2770
-				$this->total_localtax2 += $obj->total_localtax2;
2771
-				$this->total_ttc       += $obj->total_ttc;
2772
-				$this->multicurrency_total_ht        += $obj->multicurrency_total_ht;		// The field visible at end of line detail
2773
-				$this->multicurrency_total_tva       += $obj->multicurrency_total_tva;
2774
-				$this->multicurrency_total_ttc       += $obj->multicurrency_total_ttc;
2775
-
2776
-				if (! isset($total_ht_by_vats[$obj->vatrate]))  $total_ht_by_vats[$obj->vatrate]=0;
2777
-				if (! isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate]=0;
2778
-				if (! isset($total_ttc_by_vats[$obj->vatrate])) $total_ttc_by_vats[$obj->vatrate]=0;
2779
-				$total_ht_by_vats[$obj->vatrate]  += $obj->total_ht;
2780
-				$total_tva_by_vats[$obj->vatrate] += $obj->total_tva;
2781
-				$total_ttc_by_vats[$obj->vatrate] += $obj->total_ttc;
2782
-
2783
-				if ($forcedroundingmode == '1')	// Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
2784
-				{
2785
-					$tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
2786
-					$diff=price2num($total_tva_by_vats[$obj->vatrate]-$tmpvat, 'MT', 1);
2787
-					//print 'Line '.$i.' rowid='.$obj->rowid.' vat_rate='.$obj->vatrate.' total_ht='.$obj->total_ht.' total_tva='.$obj->total_tva.' total_ttc='.$obj->total_ttc.' total_ht_by_vats='.$total_ht_by_vats[$obj->vatrate].' total_tva_by_vats='.$total_tva_by_vats[$obj->vatrate].' (new calculation = '.$tmpvat.') total_ttc_by_vats='.$total_ttc_by_vats[$obj->vatrate].($diff?" => DIFF":"")."<br>\n";
2788
-					if ($diff)
2789
-					{
2790
-						if (abs($diff) > 0.1) { dol_syslog('A rounding difference was detected into TOTAL but is too high to be corrected', LOG_WARNING); exit; }
2791
-						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".($obj->total_tva - $diff).", total_ttc = ".($obj->total_ttc - $diff)." WHERE rowid = ".$obj->rowid;
2792
-						dol_syslog('We found a difference of '.$diff.' for line rowid = '.$obj->rowid.". We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2793
-								$resqlfix=$this->db->query($sqlfix);
2794
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2795
-								$this->total_tva -= $diff;
2796
-								$this->total_ttc -= $diff;
2797
-								$total_tva_by_vats[$obj->vatrate] -= $diff;
2798
-								$total_ttc_by_vats[$obj->vatrate] -= $diff;
2799
-					}
2800
-				}
768
+        // Socpeople must have already been added by some trigger, then we have to check it to avoid DB_ERROR_RECORD_ALREADY_EXISTS error
769
+        $TListeContacts=$this->liste_contact(-1, $source);
770
+        $already_added=false;
771
+        if(!empty($TListeContacts)) {
772
+            foreach($TListeContacts as $array_contact) {
773
+                if($array_contact['status'] == 4 && $array_contact['id'] == $fk_socpeople && $array_contact['fk_c_type_contact'] == $id_type_contact) {
774
+                    $already_added=true;
775
+                    break;
776
+                }
777
+            }
778
+        }
2801 779
 
2802
-				$i++;
2803
-			}
780
+        if(!$already_added) {
2804 781
 
2805
-			// Add revenue stamp to total
2806
-			$this->total_ttc       			+= isset($this->revenuestamp)?$this->revenuestamp:0;
2807
-			$this->multicurrency_total_ttc  += isset($this->revenuestamp)?($this->revenuestamp * $multicurrency_tx):0;
782
+            $this->db->begin();
2808 783
 
2809
-			// Situations totals
2810
-			if ($this->situation_cycle_ref && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits') && $this->type != $this::TYPE_CREDIT_NOTE )
2811
-			{
2812
-				$prev_sits = $this->get_prev_sits();
2813
-
2814
-				foreach ($prev_sits as $sit) {				// $sit is an object Facture loaded with a fetch.
2815
-					$this->total_ht -= $sit->total_ht;
2816
-					$this->total_tva -= $sit->total_tva;
2817
-					$this->total_localtax1 -= $sit->total_localtax1;
2818
-					$this->total_localtax2 -= $sit->total_localtax2;
2819
-					$this->total_ttc -= $sit->total_ttc;
2820
-					$this->multicurrency_total_ht -= $sit->multicurrency_total_ht;
2821
-					$this->multicurrency_total_tva -= $sit->multicurrency_total_tva;
2822
-					$this->multicurrency_total_ttc -= $sit->multicurrency_total_ttc;
2823
-				}
2824
-			}
2825
-
2826
-			$this->db->free($resql);
2827
-
2828
-			// Now update global field total_ht, total_ttc and tva
2829
-			$fieldht='total_ht';
2830
-			$fieldtva='tva';
2831
-			$fieldlocaltax1='localtax1';
2832
-			$fieldlocaltax2='localtax2';
2833
-			$fieldttc='total_ttc';
2834
-			// Specific code for backward compatibility with old field names
2835
-			if ($this->element == 'facture' || $this->element == 'facturerec')             $fieldht='total';
2836
-			if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva='total_tva';
2837
-			if ($this->element == 'propal')                                                $fieldttc='total';
2838
-			if ($this->element == 'expensereport')                                         $fieldtva='total_tva';
2839
-			if ($this->element == 'supplier_proposal')                                     $fieldttc='total';
2840
-
2841
-			if (empty($nodatabaseupdate))
2842
-			{
2843
-				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET';
2844
-				$sql .= " ".$fieldht."='".price2num($this->total_ht)."',";
2845
-				$sql .= " ".$fieldtva."='".price2num($this->total_tva)."',";
2846
-				$sql .= " ".$fieldlocaltax1."='".price2num($this->total_localtax1)."',";
2847
-				$sql .= " ".$fieldlocaltax2."='".price2num($this->total_localtax2)."',";
2848
-				$sql .= " ".$fieldttc."='".price2num($this->total_ttc)."'";
2849
-						$sql .= ", multicurrency_total_ht='".price2num($this->multicurrency_total_ht, 'MT', 1)."'";
2850
-						$sql .= ", multicurrency_total_tva='".price2num($this->multicurrency_total_tva, 'MT', 1)."'";
2851
-						$sql .= ", multicurrency_total_ttc='".price2num($this->multicurrency_total_ttc, 'MT', 1)."'";
2852
-				$sql .= ' WHERE rowid = '.$this->id;
2853
-
2854
-
2855
-				dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2856
-				$resql=$this->db->query($sql);
2857
-				if (! $resql)
2858
-				{
2859
-					$error++;
2860
-					$this->error=$this->db->lasterror();
2861
-					$this->errors[]=$this->db->lasterror();
2862
-				}
2863
-			}
784
+            // Insert into database
785
+            $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
786
+            $sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
787
+            $sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
788
+            $sql.= "'".$this->db->idate($datecreate)."'";
789
+            $sql.= ", 4, ". $id_type_contact;
790
+            $sql.= ")";
2864 791
 
2865
-			if (! $error)
2866
-			{
2867
-				return 1;
2868
-			}
2869
-			else
2870
-			{
2871
-				return -1;
2872
-			}
2873
-		}
2874
-		else
2875
-		{
2876
-			dol_print_error($this->db,'Bad request in update_price');
2877
-			return -1;
2878
-		}
2879
-	}
792
+            $resql=$this->db->query($sql);
793
+            if ($resql)
794
+            {
795
+                if (! $notrigger)
796
+                {
797
+                    $result=$this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
798
+                    if ($result < 0)
799
+                    {
800
+                        $this->db->rollback();
801
+                        return -1;
802
+                    }
803
+                }
804
+
805
+                $this->db->commit();
806
+                return 1;
807
+            }
808
+            else
809
+            {
810
+                if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
811
+                {
812
+                    $this->error=$this->db->errno();
813
+                    $this->db->rollback();
814
+                    echo 'err rollback';
815
+                    return -2;
816
+                }
817
+                else
818
+                {
819
+                    $this->error=$this->db->error();
820
+                    $this->db->rollback();
821
+                    return -1;
822
+                }
823
+            }
824
+        } else return 0;
825
+    }
2880 826
 
2881 827
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2882
-	/**
2883
-	 *	Add objects linked in llx_element_element.
2884
-	 *
2885
-	 *	@param		string	$origin		Linked element type
2886
-	 *	@param		int		$origin_id	Linked element id
2887
-	 *	@return		int					<=0 if KO, >0 if OK
2888
-	 *	@see		fetchObjectLinked, updateObjectLinked, deleteObjectLinked
2889
-	 */
2890
-	function add_object_linked($origin=null, $origin_id=null)
2891
-	{
828
+    /**
829
+     *    Copy contact from one element to current
830
+     *
831
+     *    @param    CommonObject    $objFrom    Source element
832
+     *    @param    string          $source     Nature of contact ('internal' or 'external')
833
+     *    @return   int                         >0 if OK, <0 if KO
834
+     */
835
+    function copy_linked_contact($objFrom, $source='internal')
836
+    {
2892 837
         // phpcs:enable
2893
-		$origin = (! empty($origin) ? $origin : $this->origin);
2894
-		$origin_id = (! empty($origin_id) ? $origin_id : $this->origin_id);
2895
-
2896
-		// Special case
2897
-		if ($origin == 'order') $origin='commande';
2898
-		if ($origin == 'invoice') $origin='facture';
2899
-		if ($origin == 'invoice_template') $origin='facturerec';
2900
-    	if ($origin == 'supplierorder') $origin='order_supplier';
2901
-		$this->db->begin();
2902
-
2903
-		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_element (";
2904
-		$sql.= "fk_source";
2905
-		$sql.= ", sourcetype";
2906
-		$sql.= ", fk_target";
2907
-		$sql.= ", targettype";
2908
-		$sql.= ") VALUES (";
2909
-		$sql.= $origin_id;
2910
-		$sql.= ", '".$this->db->escape($origin)."'";
2911
-		$sql.= ", ".$this->id;
2912
-		$sql.= ", '".$this->db->escape($this->element)."'";
2913
-		$sql.= ")";
2914
-
2915
-		dol_syslog(get_class($this)."::add_object_linked", LOG_DEBUG);
2916
-		if ($this->db->query($sql))
2917
-	  	{
2918
-	  		$this->db->commit();
2919
-	  		return 1;
2920
-	  	}
2921
-	  	else
2922
-	  	{
2923
-	  		$this->error=$this->db->lasterror();
2924
-	  		$this->db->rollback();
2925
-	  		return 0;
2926
-	  	}
2927
-	}
2928
-
2929
-	/**
2930
-	 *	Fetch array of objects linked to current object (object of enabled modules only). Links are loaded into
2931
-	 *		this->linkedObjectsIds array and
2932
-	 *		this->linkedObjects array if $loadalsoobjects = 1
2933
-	 *  Possible usage for parameters:
2934
-	 *  - all parameters empty -> we look all link to current object (current object can be source or target)
2935
-	 *  - source id+type -> will get target list linked to source
2936
-	 *  - target id+type -> will get source list linked to target
2937
-	 *  - source id+type + target type -> will get target list of the type
2938
-	 *  - target id+type + target source -> will get source list of the type
2939
-	 *
2940
-	 *	@param	int		$sourceid			Object source id (if not defined, id of object)
2941
-	 *	@param  string	$sourcetype			Object source type (if not defined, element name of object)
2942
-	 *	@param  int		$targetid			Object target id (if not defined, id of object)
2943
-	 *	@param  string	$targettype			Object target type (if not defined, elemennt name of object)
2944
-	 *	@param  string	$clause				'OR' or 'AND' clause used when both source id and target id are provided
2945
-	 *  @param  int		$alsosametype		0=Return only links to object that differs from source type. 1=Include also link to objects of same type.
2946
-	 *  @param  string	$orderby			SQL 'ORDER BY' clause
2947
-	 *  @param	int		$loadalsoobjects	Load also array this->linkedObjects (Use 0 to increase performances)
2948
-	 *	@return int							<0 if KO, >0 if OK
2949
-	 *  @see	add_object_linked, updateObjectLinked, deleteObjectLinked
2950
-	 */
2951
-	function fetchObjectLinked($sourceid=null,$sourcetype='',$targetid=null,$targettype='',$clause='OR',$alsosametype=1,$orderby='sourcetype',$loadalsoobjects=1)
2952
-	{
2953
-		global $conf;
2954
-
2955
-		$this->linkedObjectsIds=array();
2956
-		$this->linkedObjects=array();
2957
-
2958
-		$justsource=false;
2959
-		$justtarget=false;
2960
-		$withtargettype=false;
2961
-		$withsourcetype=false;
2962
-
2963
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid))
2964
-		{
2965
-			$justsource=true;  // the source (id and type) is a search criteria
2966
-			if (! empty($targettype)) $withtargettype=true;
2967
-		}
2968
-		if (! empty($targetid) && ! empty($targettype) && empty($sourceid))
2969
-		{
2970
-			$justtarget=true;  // the target (id and type) is a search criteria
2971
-			if (! empty($sourcetype)) $withsourcetype=true;
2972
-		}
2973
-
2974
-		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
2975
-		$targetid = (! empty($targetid) ? $targetid : $this->id);
2976
-		$sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
2977
-		$targettype = (! empty($targettype) ? $targettype : $this->element);
2978
-
2979
-		/*if (empty($sourceid) && empty($targetid))
2980
-		 {
2981
-		 dol_syslog('Bad usage of function. No source nor target id defined (nor as parameter nor as object id)', LOG_ERR);
2982
-		 return -1;
2983
-		 }*/
2984
-
2985
-		// Links between objects are stored in table element_element
2986
-		$sql = 'SELECT rowid, fk_source, sourcetype, fk_target, targettype';
2987
-		$sql.= ' FROM '.MAIN_DB_PREFIX.'element_element';
2988
-		$sql.= " WHERE ";
2989
-		if ($justsource || $justtarget)
2990
-		{
2991
-			if ($justsource)
2992
-			{
2993
-				$sql.= "fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."'";
2994
-				if ($withtargettype) $sql.= " AND targettype = '".$targettype."'";
2995
-			}
2996
-			else if ($justtarget)
2997
-			{
2998
-				$sql.= "fk_target = ".$targetid." AND targettype = '".$targettype."'";
2999
-				if ($withsourcetype) $sql.= " AND sourcetype = '".$sourcetype."'";
3000
-			}
3001
-		}
3002
-		else
3003
-		{
3004
-			$sql.= "(fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."')";
3005
-			$sql.= " ".$clause." (fk_target = ".$targetid." AND targettype = '".$targettype."')";
3006
-		}
3007
-		$sql .= ' ORDER BY '.$orderby;
3008
-
3009
-		dol_syslog(get_class($this)."::fetchObjectLink", LOG_DEBUG);
3010
-		$resql = $this->db->query($sql);
3011
-		if ($resql)
3012
-		{
3013
-			$num = $this->db->num_rows($resql);
3014
-			$i = 0;
3015
-			while ($i < $num)
3016
-			{
3017
-				$obj = $this->db->fetch_object($resql);
3018
-				if ($justsource || $justtarget)
3019
-				{
3020
-					if ($justsource)
3021
-					{
3022
-						$this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3023
-					}
3024
-					else if ($justtarget)
3025
-					{
3026
-						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3027
-					}
3028
-				}
3029
-				else
3030
-				{
3031
-					if ($obj->fk_source == $sourceid && $obj->sourcetype == $sourcetype)
3032
-					{
3033
-						$this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3034
-					}
3035
-					if ($obj->fk_target == $targetid && $obj->targettype == $targettype)
3036
-					{
3037
-						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3038
-					}
3039
-				}
3040
-				$i++;
3041
-			}
838
+        $contacts = $objFrom->liste_contact(-1, $source);
839
+        foreach($contacts as $contact)
840
+        {
841
+            if ($this->add_contact($contact['id'], $contact['fk_c_type_contact'], $contact['source']) < 0)
842
+            {
843
+                $this->error=$this->db->lasterror();
844
+                return -1;
845
+            }
846
+        }
847
+        return 1;
848
+    }
3042 849
 
3043
-			if (! empty($this->linkedObjectsIds))
3044
-			{
3045
-				$tmparray = $this->linkedObjectsIds;
3046
-				foreach($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3047
-				{
3048
-					// Parse element/subelement (ex: project_task, cabinetmed_consultation, ...)
3049
-					$module = $element = $subelement = $objecttype;
3050
-					if ($objecttype != 'supplier_proposal' && $objecttype != 'order_supplier' && $objecttype != 'invoice_supplier'
3051
-						&& preg_match('/^([^_]+)_([^_]+)/i',$objecttype,$regs))
3052
-					{
3053
-						$module = $element = $regs[1];
3054
-						$subelement = $regs[2];
3055
-					}
3056
-
3057
-					$classpath = $element.'/class';
3058
-					// To work with non standard classpath or module name
3059
-					if ($objecttype == 'facture')			{
3060
-						$classpath = 'compta/facture/class';
3061
-					}
3062
-					else if ($objecttype == 'facturerec')			{
3063
-						$classpath = 'compta/facture/class'; $module = 'facture';
3064
-					}
3065
-					else if ($objecttype == 'propal')			{
3066
-						$classpath = 'comm/propal/class';
3067
-					}
3068
-					else if ($objecttype == 'supplier_proposal')			{
3069
-						$classpath = 'supplier_proposal/class';
3070
-					}
3071
-					else if ($objecttype == 'shipping')			{
3072
-						$classpath = 'expedition/class'; $subelement = 'expedition'; $module = 'expedition_bon';
3073
-					}
3074
-					else if ($objecttype == 'delivery')			{
3075
-						$classpath = 'livraison/class'; $subelement = 'livraison'; $module = 'livraison_bon';
3076
-					}
3077
-					else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier')	{
3078
-						$classpath = 'fourn/class'; $module = 'fournisseur';
3079
-					}
3080
-					else if ($objecttype == 'fichinter')			{
3081
-						$classpath = 'fichinter/class'; $subelement = 'fichinter'; $module = 'ficheinter';
3082
-					}
3083
-					else if ($objecttype == 'subscription')			{
3084
-						$classpath = 'adherents/class'; $module = 'adherent';
3085
-					}
3086
-
3087
-					// Set classfile
3088
-					$classfile = strtolower($subelement); $classname = ucfirst($subelement);
3089
-
3090
-					if ($objecttype == 'order') {
3091
-						$classfile = 'commande'; $classname = 'Commande';
3092
-					}
3093
-					else if ($objecttype == 'invoice_supplier') {
3094
-						$classfile = 'fournisseur.facture'; $classname = 'FactureFournisseur';
3095
-					}
3096
-					else if ($objecttype == 'order_supplier')   {
3097
-						$classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur';
3098
-					}
3099
-					else if ($objecttype == 'supplier_proposal')   {
3100
-						$classfile = 'supplier_proposal'; $classname = 'SupplierProposal';
3101
-					}
3102
-					else if ($objecttype == 'facturerec')   {
3103
-						$classfile = 'facture-rec'; $classname = 'FactureRec';
3104
-					}
3105
-					else if ($objecttype == 'subscription')   {
3106
-						$classfile = 'subscription'; $classname = 'Subscription';
3107
-					}
3108
-
3109
-					// Here $module, $classfile and $classname are set
3110
-					if (Globals::$conf->$module->enabled && (($element != $this->element) || $alsosametype)) {
3111
-						if ($loadalsoobjects)
3112
-						{
3113
-							dol_include_once('/'.$classpath.'/'.$classfile.'.class.php');
3114
-							//print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
3115
-							if (class_exists($classname))
3116
-							{
3117
-								foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
3118
-								{
3119
-									$object = new $classname($this->db);
3120
-									$ret = $object->fetch($objectid);
3121
-									if ($ret >= 0)
3122
-									{
3123
-										$this->linkedObjects[$objecttype][$i] = $object;
3124
-									}
3125
-								}
3126
-							}
3127
-						}
3128
-					}
3129
-					else
3130
-					{
3131
-						unset($this->linkedObjectsIds[$objecttype]);
3132
-					}
3133
-				}
3134
-			}
3135
-			return 1;
3136
-		}
3137
-		else
3138
-		{
3139
-			dol_print_error($this->db);
3140
-			return -1;
3141
-		}
3142
-	}
3143
-
3144
-	/**
3145
-	 *	Update object linked of a current object
3146
-	 *
3147
-	 *	@param	int		$sourceid		Object source id
3148
-	 *	@param  string	$sourcetype		Object source type
3149
-	 *	@param  int		$targetid		Object target id
3150
-	 *	@param  string	$targettype		Object target type
3151
-	 *	@return							int	>0 if OK, <0 if KO
3152
-	 *	@see	add_object_linked, fetObjectLinked, deleteObjectLinked
3153
-	 */
3154
-	function updateObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='')
3155
-	{
3156
-		$updatesource=false;
3157
-		$updatetarget=false;
3158
-
3159
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $updatesource=true;
3160
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $updatetarget=true;
3161
-
3162
-		$sql = "UPDATE ".MAIN_DB_PREFIX."element_element SET ";
3163
-		if ($updatesource)
3164
-		{
3165
-			$sql.= "fk_source = ".$sourceid;
3166
-			$sql.= ", sourcetype = '".$this->db->escape($sourcetype)."'";
3167
-			$sql.= " WHERE fk_target = ".$this->id;
3168
-			$sql.= " AND targettype = '".$this->db->escape($this->element)."'";
3169
-		}
3170
-		else if ($updatetarget)
3171
-		{
3172
-			$sql.= "fk_target = ".$targetid;
3173
-			$sql.= ", targettype = '".$this->db->escape($targettype)."'";
3174
-			$sql.= " WHERE fk_source = ".$this->id;
3175
-			$sql.= " AND sourcetype = '".$this->db->escape($this->element)."'";
3176
-		}
3177
-
3178
-		dol_syslog(get_class($this)."::updateObjectLinked", LOG_DEBUG);
3179
-		if ($this->db->query($sql))
3180
-		{
3181
-			return 1;
3182
-		}
3183
-		else
3184
-		{
3185
-			$this->error=$this->db->lasterror();
3186
-			return -1;
3187
-		}
3188
-	}
3189
-
3190
-	/**
3191
-	 *	Delete all links between an object $this
3192
-	 *
3193
-	 *	@param	int		$sourceid		Object source id
3194
-	 *	@param  string	$sourcetype		Object source type
3195
-	 *	@param  int		$targetid		Object target id
3196
-	 *	@param  string	$targettype		Object target type
3197
-	 *  @param	int		$rowid			Row id of line to delete. If defined, other parameters are not used.
3198
-	 *	@return     					int	>0 if OK, <0 if KO
3199
-	 *	@see	add_object_linked, updateObjectLinked, fetchObjectLinked
3200
-	 */
3201
-	function deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid='')
3202
-	{
3203
-		$deletesource=false;
3204
-		$deletetarget=false;
3205
-
3206
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $deletesource=true;
3207
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $deletetarget=true;
3208
-
3209
-		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
3210
-		$sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
3211
-		$targetid = (! empty($targetid) ? $targetid : $this->id);
3212
-		$targettype = (! empty($targettype) ? $targettype : $this->element);
3213
-
3214
-		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
3215
-		$sql.= " WHERE";
3216
-		if ($rowid > 0)
3217
-		{
3218
-			$sql.=" rowid = ".$rowid;
3219
-		}
3220
-		else
3221
-		{
3222
-			if ($deletesource)
3223
-			{
3224
-				$sql.= " fk_source = ".$sourceid." AND sourcetype = '".$this->db->escape($sourcetype)."'";
3225
-				$sql.= " AND fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."'";
3226
-			}
3227
-			else if ($deletetarget)
3228
-			{
3229
-				$sql.= " fk_target = ".$targetid." AND targettype = '".$this->db->escape($targettype)."'";
3230
-				$sql.= " AND fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."'";
3231
-			}
3232
-			else
3233
-			{
3234
-				$sql.= " (fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."')";
3235
-				$sql.= " OR";
3236
-				$sql.= " (fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."')";
3237
-			}
3238
-		}
3239
-
3240
-		dol_syslog(get_class($this)."::deleteObjectLinked", LOG_DEBUG);
3241
-		if ($this->db->query($sql))
3242
-		{
3243
-			return 1;
3244
-		}
3245
-		else
3246
-		{
3247
-			$this->error=$this->db->lasterror();
3248
-			$this->errors[]=$this->error;
3249
-			return -1;
3250
-		}
3251
-	}
3252
-
3253
-	/**
3254
-	 *      Set status of an object
3255
-	 *
3256
-	 *      @param	int		$status			Status to set
3257
-	 *      @param	int		$elementId		Id of element to force (use this->id by default)
3258
-	 *      @param	string	$elementType	Type of element to force (use this->table_element by default)
3259
-	 *      @param	string	$trigkey		Trigger key to use for trigger
3260
-	 *      @return int						<0 if KO, >0 if OK
3261
-	 */
3262
-	function setStatut($status, $elementId=null, $elementType='', $trigkey='')
3263
-	{
3264
-		global $user,$langs,$conf;
3265
-
3266
-		$savElementId=$elementId;  // To be used later to know if we were using the method using the id of this or not.
3267
-
3268
-		$elementId = (!empty($elementId)?$elementId:$this->id);
3269
-		$elementTable = (!empty($elementType)?$elementType:$this->table_element);
3270
-
3271
-		$this->db->begin();
3272
-
3273
-		$fieldstatus="fk_statut";
3274
-		if ($elementTable == 'facture_rec') $fieldstatus="suspended";
3275
-		if ($elementTable == 'mailing') $fieldstatus="statut";
3276
-		if ($elementTable == 'cronjob') $fieldstatus="status";
3277
-		if ($elementTable == 'user') $fieldstatus="statut";
3278
-		if ($elementTable == 'expensereport') $fieldstatus="fk_statut";
3279
-		if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status";
3280
-
3281
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable;
3282
-		$sql.= " SET ".$fieldstatus." = ".$status;
3283
-		// If status = 1 = validated, update also fk_user_valid
3284
-		if ($status == 1 && $elementTable == 'expensereport') $sql.=", fk_user_valid = ".$user->id;
3285
-		$sql.= " WHERE rowid=".$elementId;
3286
-
3287
-		dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
3288
-		if ($this->db->query($sql))
3289
-		{
3290
-			$error = 0;
3291
-
3292
-			// Try autoset of trigkey
3293
-			if (empty($trigkey))
3294
-			{
3295
-				if ($this->element == 'supplier_proposal' && $status == 2) $trigkey='SUPPLIER_PROPOSAL_SIGN';   // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3296
-				if ($this->element == 'supplier_proposal' && $status == 3) $trigkey='SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3297
-				if ($this->element == 'supplier_proposal' && $status == 4) $trigkey='SUPPLIER_PROPOSAL_CLOSE';  // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3298
-				if ($this->element == 'fichinter' && $status == 3) $trigkey='FICHINTER_CLASSIFY_DONE';
3299
-				if ($this->element == 'fichinter' && $status == 2) $trigkey='FICHINTER_CLASSIFY_BILLED';
3300
-				if ($this->element == 'fichinter' && $status == 1) $trigkey='FICHINTER_CLASSIFY_UNBILLED';
3301
-			}
3302
-
3303
-			if ($trigkey)
3304
-			{
3305
-				// Appel des triggers
3306
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
3307
-				$interface=new Interfaces($this->db);
3308
-				$result=$interface->run_triggers($trigkey,$this,$user,$langs,$conf);
3309
-				if ($result < 0) {
3310
-					$error++; $this->errors=$interface->errors;
3311
-				}
3312
-				// Fin appel triggers
3313
-			}
850
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
851
+    /**
852
+     *      Update a link to contact line
853
+     *
854
+     *      @param	int		$rowid              Id of line contact-element
855
+     * 		@param	int		$statut	            New status of link
856
+     *      @param  int		$type_contact_id    Id of contact type (not modified if 0)
857
+     *      @param  int		$fk_socpeople	    Id of soc_people to update (not modified if 0)
858
+     *      @return int                 		<0 if KO, >= 0 if OK
859
+     */
860
+    function update_contact($rowid, $statut, $type_contact_id=0, $fk_socpeople=0)
861
+    {
862
+        // phpcs:enable
863
+        // Insert into database
864
+        $sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
865
+        $sql.= " statut = ".$statut;
866
+        if ($type_contact_id) $sql.= ", fk_c_type_contact = '".$type_contact_id ."'";
867
+        if ($fk_socpeople) $sql.= ", fk_socpeople = '".$fk_socpeople ."'";
868
+        $sql.= " where rowid = ".$rowid;
869
+        $resql=$this->db->query($sql);
870
+        if ($resql)
871
+        {
872
+            return 0;
873
+        }
874
+        else
875
+        {
876
+            $this->error=$this->db->lasterror();
877
+            return -1;
878
+        }
879
+    }
3314 880
 
3315
-			if (! $error)
3316
-			{
3317
-				$this->db->commit();
881
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
882
+    /**
883
+     *    Delete a link to contact line
884
+     *
885
+     *    @param	int		$rowid			Id of contact link line to delete
886
+     *    @param	int		$notrigger		Disable all triggers
887
+     *    @return   int						>0 if OK, <0 if KO
888
+     */
889
+    function delete_contact($rowid, $notrigger=0)
890
+    {
891
+        // phpcs:enable
892
+        global $user;
3318 893
 
3319
-				if (empty($savElementId))    // If the element we update was $this (so $elementId is null)
3320
-				{
3321
-					$this->statut = $status;
3322
-					$this->status = $status;
3323
-				}
3324 894
 
3325
-				return 1;
3326
-			}
3327
-			else
3328
-			{
3329
-				$this->db->rollback();
3330
-				dol_syslog(get_class($this)."::setStatus ".$this->error,LOG_ERR);
3331
-				return -1;
3332
-			}
3333
-		}
3334
-		else
3335
-		{
3336
-			$this->error=$this->db->lasterror();
3337
-			$this->db->rollback();
3338
-			return -1;
3339
-		}
3340
-	}
3341
-
3342
-
3343
-	/**
3344
-	 *  Load type of canvas of an object if it exists
3345
-	 *
3346
-	 *  @param      int		$id     Record id
3347
-	 *  @param      string	$ref    Record ref
3348
-	 *  @return		int				<0 if KO, 0 if nothing done, >0 if OK
3349
-	 */
3350
-	function getCanvas($id=0,$ref='')
3351
-	{
3352
-		global $conf;
3353
-
3354
-		if (empty($id) && empty($ref)) return 0;
3355
-		if (!empty(Globals::$conf->global->MAIN_DISABLE_CANVAS))
3356
-            return 0;    // To increase speed. Not enabled by default.
895
+        $this->db->begin();
3357 896
 
3358
-            // Clean parameters
3359
-		$ref = trim($ref);
3360
-
3361
-		$sql = "SELECT rowid, canvas";
3362
-		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
3363
-		$sql.= " WHERE entity IN (".getEntity($this->element).")";
3364
-		if (! empty($id))  $sql.= " AND rowid = ".$id;
3365
-		if (! empty($ref)) $sql.= " AND ref = '".$this->db->escape($ref)."'";
3366
-
3367
-		$resql = $this->db->query($sql);
3368
-		if ($resql)
3369
-		{
3370
-			$obj = $this->db->fetch_object($resql);
3371
-			if ($obj)
3372
-			{
3373
-				$this->canvas   = $obj->canvas;
3374
-				return 1;
3375
-			}
3376
-			else return 0;
3377
-		}
3378
-		else
3379
-		{
3380
-			dol_print_error($this->db);
3381
-			return -1;
3382
-		}
3383
-	}
3384
-
3385
-
3386
-	/**
3387
-	 * 	Get special code of a line
3388
-	 *
3389
-	 * 	@param	int		$lineid		Id of line
3390
-	 * 	@return	int					Special code
3391
-	 */
3392
-	function getSpecialCode($lineid)
3393
-	{
3394
-		$sql = 'SELECT special_code FROM '.MAIN_DB_PREFIX.$this->table_element_line;
3395
-		$sql.= ' WHERE rowid = '.$lineid;
3396
-		$resql = $this->db->query($sql);
3397
-		if ($resql)
3398
-		{
3399
-			$row = $this->db->fetch_row($resql);
3400
-			return $row[0];
3401
-		}
3402
-	}
3403
-
3404
-	/**
3405
-	 *  Function to check if an object is used by others.
3406
-	 *  Check is done into this->childtables. There is no check into llx_element_element.
3407
-	 *
3408
-	 *  @param	int		$id			Force id of object
3409
-	 *  @return	int					<0 if KO, 0 if not used, >0 if already used
3410
-	 */
3411
-	function isObjectUsed($id=0)
3412
-	{
3413
-		global $langs;
3414
-
3415
-		if (empty($id)) $id=$this->id;
3416
-
3417
-		// Check parameters
3418
-		if (! isset($this->childtables) || ! is_array($this->childtables) || count($this->childtables) == 0)
3419
-		{
3420
-			dol_print_error('Called isObjectUsed on a class with property this->childtables not defined');
3421
-			return -1;
3422
-		}
3423
-
3424
-		$arraytoscan = $this->childtables;
3425
-		// For backward compatibility, we check if array is old format array('table1', 'table2', ...)
3426
-		$tmparray=array_keys($this->childtables);
3427
-		if (is_numeric($tmparray[0]))
3428
-		{
3429
-			$arraytoscan = array_flip($this->childtables);
3430
-		}
3431
-
3432
-		// Test if child exists
3433
-		$haschild=0;
3434
-		foreach($arraytoscan as $table => $elementname)
3435
-		{
3436
-			//print $id.'-'.$table.'-'.$elementname.'<br>';
3437
-			// Check if third party can be deleted
3438
-			$sql = "SELECT COUNT(*) as nb from ".MAIN_DB_PREFIX.$table;
3439
-			$sql.= " WHERE ".$this->fk_element." = ".$id;
3440
-			$resql=$this->db->query($sql);
3441
-			if ($resql)
3442
-			{
3443
-				$obj=$this->db->fetch_object($resql);
3444
-				if ($obj->nb > 0)
3445
-				{
3446
-					$langs->load("errors");
3447
-					//print 'Found into table '.$table.', type '.$langs->transnoentitiesnoconv($elementname).', haschild='.$haschild;
3448
-					$haschild += $obj->nb;
3449
-					if (is_numeric($elementname))	// old usage
3450
-					{
3451
-						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3452
-					}
3453
-					else	// new usage: $elementname=Translation key
3454
-					{
3455
-						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $langs->transnoentitiesnoconv($elementname));
3456
-					}
3457
-					break;    // We found at least one, we stop here
3458
-				}
3459
-			}
3460
-			else
3461
-			{
3462
-				$this->errors[]=$this->db->lasterror();
3463
-				return -1;
3464
-			}
3465
-		}
3466
-		if ($haschild > 0)
3467
-		{
3468
-			$this->errors[]="ErrorRecordHasChildren";
3469
-			return $haschild;
3470
-		}
3471
-		else return 0;
3472
-	}
3473
-
3474
-	/**
3475
-	 *  Function to say how many lines object contains
3476
-	 *
3477
-	 *	@param	int		$predefined		-1=All, 0=Count free product/service only, 1=Count predefined product/service only, 2=Count predefined product, 3=Count predefined service
3478
-	 *  @return	int						<0 if KO, 0 if no predefined products, nb of lines with predefined products if found
3479
-	 */
3480
-	function hasProductsOrServices($predefined=-1)
3481
-	{
3482
-		$nb=0;
3483
-
3484
-		foreach($this->lines as $key => $val)
3485
-		{
3486
-			$qualified=0;
3487
-			if ($predefined == -1) $qualified=1;
3488
-			if ($predefined == 1 && $val->fk_product > 0) $qualified=1;
3489
-			if ($predefined == 0 && $val->fk_product <= 0) $qualified=1;
3490
-			if ($predefined == 2 && $val->fk_product > 0 && $val->product_type==0) $qualified=1;
3491
-			if ($predefined == 3 && $val->fk_product > 0 && $val->product_type==1) $qualified=1;
3492
-			if ($qualified) $nb++;
3493
-		}
3494
-		dol_syslog(get_class($this).'::hasProductsOrServices we found '.$nb.' qualified lines of products/servcies');
3495
-		return $nb;
3496
-	}
3497
-
3498
-	/**
3499
-	 * Function that returns the total amount HT of discounts applied for all lines.
3500
-	 *
3501
-	 * @return 	float
3502
-	 */
3503
-	function getTotalDiscount()
3504
-	{
3505
-		$total_discount=0.00;
3506
-
3507
-		$sql = "SELECT subprice as pu_ht, qty, remise_percent, total_ht";
3508
-		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element."det";
3509
-		$sql.= " WHERE ".$this->fk_element." = ".$this->id;
3510
-
3511
-		dol_syslog(get_class($this).'::getTotalDiscount', LOG_DEBUG);
3512
-		$resql = $this->db->query($sql);
3513
-		if ($resql)
3514
-		{
3515
-			$num=$this->db->num_rows($resql);
3516
-			$i=0;
3517
-			while ($i < $num)
3518
-			{
3519
-				$obj = $this->db->fetch_object($resql);
3520
-
3521
-				$pu_ht = $obj->pu_ht;
3522
-				$qty= $obj->qty;
3523
-				$total_ht = $obj->total_ht;
3524
-
3525
-				$total_discount_line = floatval(price2num(($pu_ht * $qty) - $total_ht, 'MT'));
3526
-				$total_discount += $total_discount_line;
3527
-
3528
-				$i++;
3529
-			}
3530
-		}
3531
-
3532
-		//print $total_discount; exit;
3533
-		return price2num($total_discount);
3534
-	}
3535
-
3536
-
3537
-	/**
3538
-	 * Return into unit=0, the calculated total of weight and volume of all lines * qty
3539
-	 * Calculate by adding weight and volume of each product line, so properties ->volume/volume_units/weight/weight_units must be loaded on line.
3540
-	 *
3541
-	 * @return  array                           array('weight'=>...,'volume'=>...)
3542
-	 */
3543
-	function getTotalWeightVolume()
3544
-	{
3545
-		$totalWeight = 0;
3546
-		$totalVolume = 0;
3547
-		// defined for shipment only
3548
-		$totalOrdered = '';
3549
-		// defined for shipment only
3550
-		$totalToShip = '';
3551
-
3552
-		foreach ($this->lines as $line)
3553
-		{
3554
-			if (isset($line->qty_asked))
3555
-			{
3556
-				if (empty($totalOrdered)) $totalOrdered=0;  // Avoid warning because $totalOrdered is ''
3557
-				$totalOrdered+=$line->qty_asked;    // defined for shipment only
3558
-			}
3559
-			if (isset($line->qty_shipped))
3560
-			{
3561
-				if (empty($totalToShip)) $totalToShip=0;    // Avoid warning because $totalToShip is ''
3562
-				$totalToShip+=$line->qty_shipped;   // defined for shipment only
3563
-            }else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
897
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
898
+        $sql.= " WHERE rowid =".$rowid;
899
+
900
+        dol_syslog(get_class($this)."::delete_contact", LOG_DEBUG);
901
+        if ($this->db->query($sql))
902
+        {
903
+            if (! $notrigger)
3564 904
             {
3565
-                if (empty($totalToShip)) $totalToShip=0;
3566
-                $totalToShip+=$line->qty;   // defined for reception only
3567
-			}
3568
-
3569
-			// Define qty, weight, volume, weight_units, volume_units
3570
-			if ($this->element == 'shipping') {
3571
-				// for shipments
3572
-				$qty = $line->qty_shipped ? $line->qty_shipped : 0;
3573
-			}
3574
-			else {
3575
-				$qty = $line->qty ? $line->qty : 0;
3576
-			}
3577
-
3578
-			$weight = $line->weight ? $line->weight : 0;
3579
-            ($weight==0 && !empty($line->product->weight))? $weight=$line->product->weight: 0;
3580
-			$volume = $line->volume ? $line->volume : 0;
3581
-			($volume==0 && !empty($line->product->volume))? $volume=$line->product->volume: 0;
905
+                $result=$this->call_trigger(strtoupper($this->element).'_DELETE_CONTACT', $user);
906
+                if ($result < 0) { $this->db->rollback(); return -1; }
907
+            }
3582 908
 
3583
-			$weight_units=$line->weight_units;
3584
-			($weight_units==0 && !empty($line->product->weight_units))? $weight_units=$line->product->weight_units: 0;
3585
-			$volume_units=$line->volume_units;
3586
-			($volume_units==0 && !empty($line->product->volume_units))? $volume_units=$line->product->volume_units: 0;
909
+            $this->db->commit();
910
+            return 1;
911
+        }
912
+        else
913
+        {
914
+            $this->error=$this->db->lasterror();
915
+            $this->db->rollback();
916
+            return -1;
917
+        }
918
+    }
3587 919
 
3588
-			$weightUnit=0;
3589
-			$volumeUnit=0;
3590
-			if (! empty($weight_units)) $weightUnit = $weight_units;
3591
-			if (! empty($volume_units)) $volumeUnit = $volume_units;
920
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
921
+    /**
922
+     *    Delete all links between an object $this and all its contacts
923
+     *
924
+     *	  @param	string	$source		'' or 'internal' or 'external'
925
+     *	  @param	string	$code		Type of contact (code or id)
926
+     *    @return   int					>0 if OK, <0 if KO
927
+     */
928
+    function delete_linked_contact($source='',$code='')
929
+    {
930
+        // phpcs:enable
931
+        $temp = array();
932
+        $typeContact = $this->liste_type_contact($source,'',0,0,$code);
3592 933
 
3593
-			if (empty($totalWeight)) $totalWeight=0;  // Avoid warning because $totalWeight is ''
3594
-			if (empty($totalVolume)) $totalVolume=0;  // Avoid warning because $totalVolume is ''
934
+        foreach($typeContact as $key => $value)
935
+        {
936
+            array_push($temp,$key);
937
+        }
938
+        $listId = implode(",", $temp);
3595 939
 
3596
-			//var_dump($line->volume_units);
3597
-			if ($weight_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3598
-			{
3599
-				$trueWeightUnit=pow(10, $weightUnit);
3600
-				$totalWeight += $weight * $qty * $trueWeightUnit;
3601
-			}
3602
-			else {
3603
-		if ($weight_units == 99) {
3604
-			// conversion 1 Pound = 0.45359237 KG
3605
-			$trueWeightUnit = 0.45359237;
3606
-			$totalWeight += $weight * $qty * $trueWeightUnit;
3607
-		} elseif ($weight_units == 98) {
3608
-			// conversion 1 Ounce = 0.0283495 KG
3609
-			$trueWeightUnit = 0.0283495;
3610
-			$totalWeight += $weight * $qty * $trueWeightUnit;
3611
-		}
3612
-		else
3613
-					$totalWeight += $weight * $qty;   // This may be wrong if we mix different units
3614
-			}
3615
-			if ($volume_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3616
-			{
3617
-				//print $line->volume."x".$line->volume_units."x".($line->volume_units < 50)."x".$volumeUnit;
3618
-				$trueVolumeUnit=pow(10, $volumeUnit);
3619
-				//print $line->volume;
3620
-				$totalVolume += $volume * $qty * $trueVolumeUnit;
3621
-			}
3622
-			else
3623
-			{
3624
-				$totalVolume += $volume * $qty;   // This may be wrong if we mix different units
3625
-			}
3626
-		}
3627
-
3628
-		return array('weight'=>$totalWeight, 'volume'=>$totalVolume, 'ordered'=>$totalOrdered, 'toship'=>$totalToShip);
3629
-	}
3630
-
3631
-
3632
-	/**
3633
-	 *	Set extra parameters
3634
-	 *
3635
-	 *	@return	int      <0 if KO, >0 if OK
3636
-	 */
3637
-	function setExtraParameters()
3638
-	{
3639
-		$this->db->begin();
3640
-
3641
-		$extraparams = (! empty($this->extraparams) ? json_encode($this->extraparams) : null);
3642
-
3643
-		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3644
-		$sql.= " SET extraparams = ".(! empty($extraparams) ? "'".$this->db->escape($extraparams)."'" : "null");
3645
-		$sql.= " WHERE rowid = ".$this->id;
3646
-
3647
-		dol_syslog(get_class($this)."::setExtraParameters", LOG_DEBUG);
3648
-		$resql = $this->db->query($sql);
3649
-		if (! $resql)
3650
-		{
3651
-			$this->error=$this->db->lasterror();
3652
-			$this->db->rollback();
3653
-			return -1;
3654
-		}
3655
-		else
3656
-		{
3657
-			$this->db->commit();
3658
-			return 1;
3659
-		}
3660
-	}
940
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
941
+        $sql.= " WHERE element_id = ".$this->id;
942
+        if ($listId)
943
+            $sql.= " AND fk_c_type_contact IN (".$listId.")";
3661 944
 
945
+        dol_syslog(get_class($this)."::delete_linked_contact", LOG_DEBUG);
946
+        if ($this->db->query($sql))
947
+        {
948
+            return 1;
949
+        }
950
+        else
951
+        {
952
+            $this->error=$this->db->lasterror();
953
+            return -1;
954
+        }
955
+    }
3662 956
 
3663 957
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
3664
-	/**
3665
-	 *    Return incoterms informations
3666
-	 *    TODO Use a cache for label get
3667
-	 *
3668
-	 *    @return	string	incoterms info
3669
-	 */
3670
-	function display_incoterms()
3671
-	{
958
+    /**
959
+     *    Get array of all contacts for an object
960
+     *
961
+     *    @param	int			$statut		Status of links to get (-1=all)
962
+     *    @param	string		$source		Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
963
+     *    @param	int         $list       0:Return array contains all properties, 1:Return array contains just id
964
+     *    @param    string      $code       Filter on this code of contact type ('SHIPPING', 'BILLING', ...)
965
+     *    @return	array|int		        Array of contacts, -1 if error
966
+     */
967
+    function liste_contact($statut=-1,$source='external',$list=0,$code='')
968
+    {
3672 969
         // phpcs:enable
3673
-		$out = '';
3674
-		$this->libelle_incoterms = '';
3675
-		if (!empty($this->fk_incoterms))
3676
-		{
3677
-			$sql = 'SELECT code FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3678
-			$result = $this->db->query($sql);
3679
-			if ($result)
3680
-			{
3681
-				$res = $this->db->fetch_object($result);
3682
-				$out .= $res->code;
3683
-			}
3684
-		}
3685
-
3686
-		$out .= (($res->code && $this->location_incoterms)?' - ':'').$this->location_incoterms;
3687
-
3688
-		return $out;
3689
-	}
3690
-
3691
-	/**
3692
-	 *    Return incoterms informations for pdf display
3693
-	 *
3694
-	 *    @return	string		incoterms info
3695
-	 */
3696
-	function getIncotermsForPDF()
3697
-	{
3698
-		$sql = 'SELECT code FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3699
-		$resql = $this->db->query($sql);
3700
-		if ($resql)
3701
-		{
3702
-			$num = $this->db->num_rows($resql);
3703
-			if ($num > 0)
3704
-			{
3705
-				$res = $this->db->fetch_object($resql);
3706
-				return 'Incoterm : '.$res->code.' - '.$this->location_incoterms;
3707
-			}
3708
-			else
3709
-			{
3710
-				return '';
3711
-			}
3712
-		}
3713
-		else
3714
-		{
3715
-			$this->errors[] = $this->db->lasterror();
3716
-			return false;
3717
-		}
3718
-	}
3719
-
3720
-	/**
3721
-	 *    Define incoterms values of current object
3722
-	 *
3723
-	 *    @param	int		$id_incoterm     Id of incoterm to set or '' to remove
3724
-	 * 	  @param 	string  $location		 location of incoterm
3725
-	 *    @return	int     		<0 if KO, >0 if OK
3726
-	 */
3727
-	function setIncoterms($id_incoterm, $location)
3728
-	{
3729
-		if ($this->id && $this->table_element)
3730
-		{
3731
-			$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3732
-			$sql.= " SET fk_incoterms = ".($id_incoterm > 0 ? $id_incoterm : "null");
3733
-			$sql.= ", location_incoterms = ".($id_incoterm > 0 ? "'".$this->db->escape($location)."'" : "null");
3734
-			$sql.= " WHERE rowid = " . $this->id;
3735
-			dol_syslog(get_class($this).'::setIncoterms', LOG_DEBUG);
3736
-			$resql=$this->db->query($sql);
3737
-			if ($resql)
3738
-			{
3739
-				$this->fk_incoterms = $id_incoterm;
3740
-				$this->location_incoterms = $location;
970
+        global $langs;
971
+
972
+        $tab=array();
973
+
974
+        $sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact";    // This field contains id of llx_socpeople or id of llx_user
975
+        if ($source == 'internal') $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
976
+        if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid, t.statut as statuscontact";
977
+        $sql.= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
978
+        $sql.= ", tc.source, tc.element, tc.code, tc.libelle";
979
+        $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
980
+        $sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
981
+        if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
982
+        if ($source == 'external'|| $source == 'thirdparty') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
983
+        $sql.= " WHERE ec.element_id =".$this->id;
984
+        $sql.= " AND ec.fk_c_type_contact=tc.rowid";
985
+        $sql.= " AND tc.element='".$this->db->escape($this->element)."'";
986
+        if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
987
+        if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
988
+        if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
989
+        $sql.= " AND tc.active=1";
990
+        if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
991
+        $sql.=" ORDER BY t.lastname ASC";
992
+
993
+        dol_syslog(get_class($this)."::liste_contact", LOG_DEBUG);
994
+        $resql=$this->db->query($sql);
995
+        if ($resql)
996
+        {
997
+            $num=$this->db->num_rows($resql);
998
+            $i=0;
999
+            while ($i < $num)
1000
+            {
1001
+                $obj = $this->db->fetch_object($resql);
1002
+
1003
+                if (! $list)
1004
+                {
1005
+                    $transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
1006
+                    $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1007
+                    $tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,
1008
+                                    'nom'=>$obj->lastname,      // For backward compatibility
1009
+                                    'civility'=>$obj->civility, 'lastname'=>$obj->lastname, 'firstname'=>$obj->firstname, 'email'=>$obj->email, 'login'=>$obj->login, 'photo'=>$obj->photo, 'statuscontact'=>$obj->statuscontact,
1010
+                                    'rowid'=>$obj->rowid, 'code'=>$obj->code, 'libelle'=>$libelle_type, 'status'=>$obj->statuslink, 'fk_c_type_contact'=>$obj->fk_c_type_contact);
1011
+                }
1012
+                else
1013
+                {
1014
+                    $tab[$i]=$obj->id;
1015
+                }
3741 1016
 
3742
-				$sql = 'SELECT libelle FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3743
-				$res = $this->db->query($sql);
3744
-				if ($res)
3745
-				{
3746
-					$obj = $this->db->fetch_object($res);
3747
-					$this->libelle_incoterms = $obj->libelle;
3748
-				}
3749
-				return 1;
3750
-			}
3751
-			else
3752
-			{
3753
-				$this->errors[] = $this->db->lasterror();
3754
-				return -1;
3755
-			}
3756
-		}
3757
-		else return -1;
3758
-	}
3759
-
3760
-
3761
-	// --------------------
3762
-	// TODO: All functions here must be redesigned and moved as they are not business functions but output functions
3763
-	// --------------------
3764
-
3765
-	/* This is to show add lines */
3766
-
3767
-	/**
3768
-	 *	Show add free and predefined products/services form
3769
-	 *
3770
-	 *  @param	int		        $dateSelector       1=Show also date range input fields
3771
-	 *  @param	Societe			$seller				Object thirdparty who sell
3772
-	 *  @param	Societe			$buyer				Object thirdparty who buy
3773
-	 *	@return	void
3774
-	 */
3775
-	function formAddObjectLine($dateSelector, $seller, $buyer)
3776
-	{
3777
-		global $conf,$user,$langs,$object,$hookmanager;
3778
-		global $form,$bcnd,$var;
3779
-
3780
-		// Line extrafield
3781
-		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3782
-		$extrafieldsline = new AlExtraFields($this->db);
3783
-        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
1017
+                $i++;
1018
+            }
3784 1019
 
3785
-		// Output template part (modules that overwrite templates must declare this into descriptor)
3786
-		// Use global variables + $dateSelector + $seller and $buyer
3787
-		$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
3788
-        foreach($dirtpls as $reldir)
3789
-		{
3790
-			$tpl = dol_buildpath($reldir.'/objectline_create.tpl.php');
3791
-			if (empty(Globals::$conf->file->strict_mode)) {
3792
-                $res=@include $tpl;
3793
-			} else {
3794
-				$res=include $tpl; // for debug
3795
-			}
3796
-			if ($res) break;
3797
-		}
3798
-	}
3799
-
3800
-
3801
-
3802
-	/* This is to show array of line of details */
3803
-
3804
-
3805
-	/**
3806
-	 *	Return HTML table for object lines
3807
-	 *	TODO Move this into an output class file (htmlline.class.php)
3808
-	 *	If lines are into a template, title must also be into a template
3809
-	 *	But for the moment we don't know if it's possible as we keep a method available on overloaded objects.
3810
-	 *
3811
-	 *	@param	string		$action				Action code
3812
-	 *	@param  string		$seller            	Object of seller third party
3813
-	 *	@param  string  	$buyer             	Object of buyer third party
3814
-	 *	@param	int			$selected		   	Object line selected
3815
-	 *	@param  int	    	$dateSelector      	1=Show also date range input fields
3816
-	 *	@return	void
3817
-	 */
3818
-	function printObjectLines($action, $seller, $buyer, $selected=0, $dateSelector=0)
3819
-	{
3820
-		global $conf, $hookmanager, $langs, $user;
3821
-		// TODO We should not use global var for this !
3822
-		global $inputalsopricewithtax, $usemargins, $disableedit, $disablemove, $disableremove, $outputalsopricetotalwithtax;
3823
-
3824
-		// Define usemargins
3825
-		$usemargins=0;
3826
-		if (!empty(Globals::$conf->margin->enabled) && !empty($this->element) && in_array($this->element, array('facture', 'propal', 'commande')))
3827
-            $usemargins = 1;
1020
+            return $tab;
1021
+        }
1022
+        else
1023
+        {
1024
+            $this->error=$this->db->lasterror();
1025
+            dol_print_error($this->db);
1026
+            return -1;
1027
+        }
1028
+    }
3828 1029
 
3829
-        $num = count($this->lines);
3830 1030
 
3831
-		// Line extrafield
3832
-		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3833
-		$extrafieldsline = new AlExtraFields($this->db);
3834
-        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
1031
+    /**
1032
+     * 		Update status of a contact linked to object
1033
+     *
1034
+     * 		@param	int		$rowid		Id of link between object and contact
1035
+     * 		@return	int					<0 if KO, >=0 if OK
1036
+     */
1037
+    function swapContactStatus($rowid)
1038
+    {
1039
+        $sql = "SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact,";
1040
+        $sql.= " tc.code, tc.libelle";
1041
+        //$sql.= ", s.fk_soc";
1042
+        $sql.= " FROM (".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc)";
1043
+        //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as s ON ec.fk_socpeople=s.rowid";	// Si contact de type external, alors il est lie a une societe
1044
+        $sql.= " WHERE ec.rowid =".$rowid;
1045
+        $sql.= " AND ec.fk_c_type_contact=tc.rowid";
1046
+        $sql.= " AND tc.element = '".$this->db->escape($this->element)."'";
1047
+
1048
+        dol_syslog(get_class($this)."::swapContactStatus", LOG_DEBUG);
1049
+        $resql=$this->db->query($sql);
1050
+        if ($resql)
1051
+        {
1052
+            $obj = $this->db->fetch_object($resql);
1053
+            $newstatut = ($obj->statut == 4) ? 5 : 4;
1054
+            $result = $this->update_contact($rowid, $newstatut);
1055
+            $this->db->free($resql);
1056
+            return $result;
1057
+        }
1058
+        else
1059
+        {
1060
+            $this->error=$this->db->error();
1061
+            dol_print_error($this->db);
1062
+            return -1;
1063
+        }
1064
+    }
3835 1065
 
3836
-		$parameters = array('num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3837
-		$reshook = $hookmanager->executeHooks('printObjectLineTitle', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
3838
-		if (empty($reshook))
3839
-		{
3840
-			// Title line
3841
-		    print "<thead>\n";
1066
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1067
+    /**
1068
+     *      Return array with list of possible values for type of contacts
1069
+     *
1070
+     *      @param	string	$source     'internal', 'external' or 'all'
1071
+     *      @param	string	$order		Sort order by : 'position', 'code', 'rowid'...
1072
+     *      @param  int		$option     0=Return array id->label, 1=Return array code->label
1073
+     *      @param  int		$activeonly 0=all status of contact, 1=only the active
1074
+     *		@param	string	$code		Type of contact (Example: 'CUSTOMER', 'SERVICE')
1075
+     *      @return array       		Array list of type of contacts (id->label if option=0, code->label if option=1)
1076
+     */
1077
+    function liste_type_contact($source='internal', $order='position', $option=0, $activeonly=0, $code='')
1078
+    {
1079
+        // phpcs:enable
1080
+        global $langs;
1081
+
1082
+        if (empty($order)) $order='position';
1083
+        if ($order == 'position') $order.=',code';
1084
+
1085
+        $tab = array();
1086
+        $sql = "SELECT DISTINCT tc.rowid, tc.code, tc.libelle, tc.position";
1087
+        $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
1088
+        $sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
1089
+        if ($activeonly == 1) $sql.= " AND tc.active=1"; // only the active types
1090
+        if (! empty($source) && $source != 'all') $sql.= " AND tc.source='".$this->db->escape($source)."'";
1091
+        if (! empty($code)) $sql.= " AND tc.code='".$this->db->escape($code)."'";
1092
+        $sql.= $this->db->order($order,'ASC');
1093
+
1094
+        //print "sql=".$sql;
1095
+        $resql=$this->db->query($sql);
1096
+        if ($resql)
1097
+        {
1098
+            $num=$this->db->num_rows($resql);
1099
+            $i=0;
1100
+            while ($i < $num)
1101
+            {
1102
+                $obj = $this->db->fetch_object($resql);
3842 1103
 
3843
-			print '<tr class="liste_titre nodrag nodrop">';
1104
+                $transkey="TypeContact_".$this->element."_".$source."_".$obj->code;
1105
+                $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1106
+                if (empty($option)) $tab[$obj->rowid]=$libelle_type;
1107
+                else $tab[$obj->code]=$libelle_type;
1108
+                $i++;
1109
+            }
1110
+            return $tab;
1111
+        }
1112
+        else
1113
+        {
1114
+            $this->error=$this->db->lasterror();
1115
+            //dol_print_error($this->db);
1116
+            return null;
1117
+        }
1118
+    }
3844 1119
 
3845
-			// Adds a line numbering column
3846
-			if (!empty(Globals::$conf->global->MAIN_VIEW_LINE_NUMBER))
3847
-                print '<td class="linecolnum" align="center" width="5">&nbsp;</td>';
1120
+    /**
1121
+     *      Return id of contacts for a source and a contact code.
1122
+     *      Example: contact client de facturation ('external', 'BILLING')
1123
+     *      Example: contact client de livraison ('external', 'SHIPPING')
1124
+     *      Example: contact interne suivi paiement ('internal', 'SALESREPFOLL')
1125
+     *
1126
+     *		@param	string	$source		'external' or 'internal'
1127
+     *		@param	string	$code		'BILLING', 'SHIPPING', 'SALESREPFOLL', ...
1128
+     *		@param	int		$status		limited to a certain status
1129
+     *      @return array       		List of id for such contacts
1130
+     */
1131
+    function getIdContact($source,$code,$status=0)
1132
+    {
1133
+        global $conf;
3848 1134
 
3849
-            // Description
3850
-			print '<td class="linecoldescription">'.$langs->trans('Description').'</td>';
1135
+        $result=array();
1136
+        $i=0;
1137
+        //cas particulier pour les expeditions
1138
+        if($this->element=='shipping' && $this->origin_id != 0) {
1139
+            $id=$this->origin_id;
1140
+            $element='commande';
1141
+        } else if($this->element=='reception' && $this->origin_id != 0) {
1142
+            $id=$this->origin_id;
1143
+            $element='order_supplier';
1144
+        } else {
1145
+            $id=$this->id;
1146
+            $element=$this->element;
1147
+        }
3851 1148
 
3852
-			if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier' || $this->element == 'invoice_supplier')
3853
-			{
3854
-				print '<td class="linerefsupplier"><span id="title_fourn_ref">'.$langs->trans("SupplierRef").'</span></td>';
3855
-			}
1149
+        $sql = "SELECT ec.fk_socpeople";
1150
+        $sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec,";
1151
+        if ($source == 'internal') $sql.= " ".MAIN_DB_PREFIX."user as c,";
1152
+        if ($source == 'external') $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
1153
+        $sql.= " ".MAIN_DB_PREFIX."c_type_contact as tc";
1154
+        $sql.= " WHERE ec.element_id = ".$id;
1155
+        $sql.= " AND ec.fk_socpeople = c.rowid";
1156
+        if ($source == 'internal') $sql.= " AND c.entity IN (".getEntity('user').")";
1157
+        if ($source == 'external') $sql.= " AND c.entity IN (".getEntity('societe').")";
1158
+        $sql.= " AND ec.fk_c_type_contact = tc.rowid";
1159
+        $sql.= " AND tc.element = '".$element."'";
1160
+        $sql.= " AND tc.source = '".$source."'";
1161
+        $sql.= " AND tc.code = '".$code."'";
1162
+        $sql.= " AND tc.active = 1";
1163
+        if ($status) $sql.= " AND ec.statut = ".$status;
1164
+
1165
+        dol_syslog(get_class($this)."::getIdContact", LOG_DEBUG);
1166
+        $resql=$this->db->query($sql);
1167
+        if ($resql)
1168
+        {
1169
+            while ($obj = $this->db->fetch_object($resql))
1170
+            {
1171
+                $result[$i]=$obj->fk_socpeople;
1172
+                $i++;
1173
+            }
1174
+        }
1175
+        else
1176
+        {
1177
+            $this->error=$this->db->error();
1178
+            return null;
1179
+        }
3856 1180
 
3857
-			// VAT
3858
-			print '<td class="linecolvat" align="right" width="80">'.$langs->trans('VAT').'</td>';
1181
+        return $result;
1182
+    }
3859 1183
 
3860
-			// Price HT
3861
-			print '<td class="linecoluht" align="right" width="80">'.$langs->trans('PriceUHT').'</td>';
1184
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1185
+    /**
1186
+     *		Load object contact with id=$this->contactid into $this->contact
1187
+     *
1188
+     *		@param	int		$contactid      Id du contact. Use this->contactid if empty.
1189
+     *		@return	int						<0 if KO, >0 if OK
1190
+     */
1191
+    function fetch_contact($contactid=null)
1192
+    {
1193
+        // phpcs:enable
1194
+        if (empty($contactid)) $contactid=$this->contactid;
3862 1195
 
3863
-			// Multicurrency
3864
-			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3865
-                print '<td class="linecoluht_currency" align="right" width="80">' . $langs->trans('PriceUHTCurrency', $this->multicurrency_code) . '</td>';
1196
+        if (empty($contactid)) return 0;
3866 1197
 
3867
-            if ($inputalsopricewithtax) print '<td align="right" width="80">'.$langs->trans('PriceUTTC').'</td>';
1198
+        require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
1199
+        $contact = new Contact($this->db);
1200
+        $result=$contact->fetch($contactid);
1201
+        $this->contact = $contact;
1202
+        return $result;
1203
+    }
3868 1204
 
3869
-			// Qty
3870
-			print '<td class="linecolqty" align="right">'.$langs->trans('Qty').'</td>';
1205
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1206
+    /**
1207
+     *    	Load the third party of object, from id $this->socid or $this->fk_soc, into this->thirdparty
1208
+     *
1209
+     *		@param		int		$force_thirdparty_id	Force thirdparty id
1210
+     *		@return		int								<0 if KO, >0 if OK
1211
+     */
1212
+    function fetch_thirdparty($force_thirdparty_id=0)
1213
+    {
1214
+        // phpcs:enable
1215
+        global $conf;
3871 1216
 
3872
-			if (Globals::$conf->global->PRODUCT_USE_UNITS) {
3873
-				print '<td class="linecoluseunit" align="left">'.$langs->trans('Unit').'</td>';
3874
-			}
1217
+        if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id))
1218
+            return 0;
3875 1219
 
3876
-			// Reduction short
3877
-			print '<td class="linecoldiscount" align="right">'.$langs->trans('ReductionShort').'</td>';
1220
+        require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
3878 1221
 
3879
-			if ($this->situation_cycle_ref) {
3880
-				print '<td class="linecolcycleref" align="right">' . $langs->trans('Progress') . '</td>';
3881
-			}
1222
+        $idtofetch = isset($this->socid) ? $this->socid : (isset($this->fk_soc) ? $this->fk_soc : $this->fk_thirdparty);
1223
+        if ($force_thirdparty_id)
1224
+            $idtofetch = $force_thirdparty_id;
3882 1225
 
3883
-			if ($usemargins && !empty(Globals::$conf->margin->enabled) && empty($user->societe_id)) {
3884
-				if (!empty($user->rights->margins->creer))
3885
-				{
3886
-					if (Globals::$conf->global->MARGIN_TYPE == "1")
3887
-                        print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('BuyingPrice').'</td>';
3888
-					else
3889
-						print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('CostPrice').'</td>';
3890
-				}
1226
+        if ($idtofetch) {
1227
+            $thirdparty = new Societe($this->db);
1228
+            $result = $thirdparty->fetch($idtofetch);
1229
+            $this->thirdparty = $thirdparty;
3891 1230
 
3892
-				if (!empty(Globals::$conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous)
3893
-                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarginRate').'</td>';
3894
-				if (!empty(Globals::$conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous)
3895
-                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarkRate').'</td>';
3896
-			}
1231
+            // Use first price level if level not defined for third party
1232
+            if (!empty(Globals::$conf->global->PRODUIT_MULTIPRICES) && empty($this->thirdparty->price_level)) {
1233
+                $this->thirdparty->price_level = 1;
1234
+            }
3897 1235
 
3898
-			// Total HT
3899
-			print '<td class="linecolht" align="right">'.$langs->trans('TotalHTShort').'</td>';
1236
+            return $result;
1237
+        } else
1238
+            return -1;
1239
+    }
3900 1240
 
3901
-			// Multicurrency
3902
-			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3903
-                print '<td class="linecoltotalht_currency" align="right">' . $langs->trans('TotalHTShortCurrency', $this->multicurrency_code) . '</td>';
3904 1241
 
3905
-            if ($outputalsopricetotalwithtax) print '<td align="right" width="80">'.$langs->trans('TotalTTCShort').'</td>';
1242
+    /**
1243
+     * Looks for an object with ref matching the wildcard provided
1244
+     * It does only work when $this->table_ref_field is set
1245
+     *
1246
+     * @param string $ref Wildcard
1247
+     * @return int >1 = OK, 0 = Not found or table_ref_field not defined, <0 = KO
1248
+     */
1249
+    public function fetchOneLike($ref)
1250
+    {
1251
+        if (!$this->table_ref_field) {
1252
+            return 0;
1253
+        }
3906 1254
 
3907
-			print '<td class="linecoledit"></td>';  // No width to allow autodim
1255
+        $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element.' WHERE '.$this->table_ref_field.' LIKE "'.$this->db->escape($ref).'" LIMIT 1';
3908 1256
 
3909
-			print '<td class="linecoldelete" width="10"></td>';
1257
+        $query = $this->db->query($sql);
3910 1258
 
3911
-			print '<td class="linecolmove" width="10"></td>';
1259
+        if (!$this->db->num_rows($query)) {
1260
+            return 0;
1261
+        }
3912 1262
 
3913
-			if($action == 'selectlines')
3914
-			{
3915
-			    print '<td class="linecolcheckall" align="center">';
3916
-			    print '<input type="checkbox" class="linecheckboxtoggle" />';
3917
-			    print '<script type="text/javascript">$(document).ready(function() {$(".linecheckboxtoggle").click(function() {var checkBoxes = $(".linecheckbox");checkBoxes.prop("checked", this.checked);})});</script>';
3918
-			    print '</td>';
3919
-			}
3920
-
3921
-			print "</tr>\n";
3922
-			print "</thead>\n";
3923
-		}
3924
-
3925
-		$var = true;
3926
-		$i	 = 0;
3927
-
3928
-		print "<tbody>\n";
3929
-		foreach ($this->lines as $line)
3930
-		{
3931
-			//Line extrafield
3932
-			$line->fetch_optionals();
3933
-
3934
-			//if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
3935
-			if (is_object($hookmanager))   // Old code is commented on preceding line.
3936
-			{
3937
-				if (empty($line->fk_parent_line))
3938
-				{
3939
-					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3940
-					$reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3941
-				}
3942
-				else
3943
-				{
3944
-					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline, 'fk_parent_line'=>$line->fk_parent_line);
3945
-					$reshook = $hookmanager->executeHooks('printObjectSubLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3946
-				}
3947
-			}
3948
-			if (empty($reshook))
3949
-			{
3950
-				$this->printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected,$extrafieldsline);
3951
-			}
3952
-
3953
-			$i++;
3954
-		}
3955
-		print "</tbody>\n";
3956
-	}
3957
-
3958
-	/**
3959
-	 *	Return HTML content of a detail line
3960
-	 *	TODO Move this into an output class file (htmlline.class.php)
3961
-	 *
3962
-	 *	@param	string		$action				GET/POST action
3963
-	 *	@param CommonObjectLine $line		       	Selected object line to output
3964
-	 *	@param  string	    $var               	Is it a an odd line (true)
3965
-	 *	@param  int		    $num               	Number of line (0)
3966
-	 *	@param  int		    $i					I
3967
-	 *	@param  int		    $dateSelector      	1=Show also date range input fields
3968
-	 *	@param  string	    $seller            	Object of seller third party
3969
-	 *	@param  string	    $buyer             	Object of buyer third party
3970
-	 *	@param	int			$selected		   	Object line selected
3971
-	 *  @param  int			$extrafieldsline	Object of extrafield line attribute
3972
-	 *	@return	void
3973
-	 */
3974
-	function printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected=0,$extrafieldsline=0)
3975
-	{
3976
-		global $conf,$langs,$user,$object,$hookmanager;
3977
-		global $form,$bc,$bcdd;
3978
-		global $object_rights, $disableedit, $disablemove, $disableremove;   // TODO We should not use global var for this !
3979
-
3980
-		$object_rights = $this->getRights();
3981
-
3982
-		$element=$this->element;
3983
-
3984
-		$text=''; $description=''; $type=0;
3985
-
3986
-		// Show product and description
3987
-		$type=(! empty($line->product_type)?$line->product_type:$line->fk_product_type);
3988
-		// Try to enhance type detection using date_start and date_end for free lines where type was not saved.
3989
-		if (! empty($line->date_start)) $type=1; // deprecated
3990
-		if (! empty($line->date_end)) $type=1; // deprecated
3991
-
3992
-		// Ligne en mode visu
3993
-		if ($action != 'editline' || $selected != $line->id)
3994
-		{
3995
-			// Product
3996
-			if ($line->fk_product > 0)
3997
-			{
3998
-				$product_static = new Product($this->db);
3999
-				$product_static->fetch($line->fk_product);
4000
-
4001
-				$product_static->ref = $line->ref; //can change ref in hook
4002
-				$product_static->label = $line->label; //can change label in hook
4003
-				$text=$product_static->getNomUrl(1);
4004
-
4005
-				// Define output language and label
4006
-				if (!empty(Globals::$conf->global->MAIN_MULTILANGS)) {
4007
-					if (! is_object($this->thirdparty))
4008
-					{
4009
-						dol_print_error('','Error: Method printObjectLine was called on an object and object->fetch_thirdparty was not done before');
4010
-						return;
4011
-					}
4012
-
4013
-					$prod = new Product($this->db);
4014
-					$prod->fetch($line->fk_product);
4015
-
4016
-					$outputlangs = $langs;
4017
-					$newlang='';
4018
-					if (empty($newlang) && GETPOST('lang_id','aZ09')) $newlang=GETPOST('lang_id','aZ09');
4019
-					if (!empty(Globals::$conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang))
4020
-                        $newlang = $this->thirdparty->default_lang;  // For language to language of customer
4021
-                    if (! empty($newlang))
4022
-					{
4023
-						$outputlangs = new Translate("",$conf);
4024
-						$outputlangs->setDefaultLang($newlang);
4025
-					}
1263
+        $result = $this->db->fetch_object($query);
4026 1264
 
4027
-					$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $line->product_label;
4028
-				}
4029
-				else
4030
-				{
4031
-					$label = $line->product_label;
4032
-				}
1265
+        return $this->fetch($result->rowid);
1266
+    }
4033 1267
 
4034
-				$text.= ' - '.(! empty($line->label)?$line->label:$label);
4035
-				$description .= (!empty(Globals::$conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($line->description)); // Description is what to show on popup. We shown nothing if already into desc.
4036
-            }
1268
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1269
+    /**
1270
+     *	Load data for barcode into properties ->barcode_type*
1271
+     *	Properties ->barcode_type that is id of barcode. Type is used to find other properties, but
1272
+     *  if it is not defined, ->element must be defined to know default barcode type.
1273
+     *
1274
+     *	@return		int			<0 if KO, 0 if can't guess type of barcode (ISBN, EAN13...), >0 if OK (all barcode properties loaded)
1275
+     */
1276
+    function fetch_barcode()
1277
+    {
1278
+        // phpcs:enable
1279
+        global $conf;
4037 1280
 
4038
-			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
1281
+        dol_syslog(get_class($this).'::fetch_barcode this->element='.$this->element.' this->barcode_type='.$this->barcode_type);
4039 1282
 
4040
-			// Output template part (modules that overwrite templates must declare this into descriptor)
4041
-			// Use global variables + $dateSelector + $seller and $buyer
4042
-			$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4043
-            foreach($dirtpls as $reldir)
4044
-			{
4045
-				$tpl = dol_buildpath($reldir.'/objectline_view.tpl.php');
4046
-				if (empty(Globals::$conf->file->strict_mode)) {
4047
-                    $res=@include $tpl;
4048
-				} else {
4049
-					$res=include $tpl; // for debug
4050
-				}
4051
-				if ($res) break;
4052
-			}
4053
-		}
1283
+        $idtype=$this->barcode_type;
1284
+        if (empty($idtype) && $idtype != '0')	// If type of barcode no set, we try to guess. If set to '0' it means we forced to have type remain not defined
1285
+        {
1286
+            if ($this->element == 'product')
1287
+                $idtype = Globals::$conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
1288
+            else if ($this->element == 'societe')
1289
+                $idtype = Globals::$conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
1290
+            else dol_syslog('Call fetch_barcode with barcode_type not defined and cant be guessed', LOG_WARNING);
1291
+        }
4054 1292
 
4055
-		// Ligne en mode update
4056
-		if ($this->statut == 0 && $action == 'editline' && $selected == $line->id)
4057
-		{
4058
-			$label = (! empty($line->label) ? $line->label : (($line->fk_product > 0) ? $line->product_label : ''));
4059
-			$placeholder=' placeholder="'.$langs->trans("Label").'"';
1293
+        if ($idtype > 0)
1294
+        {
1295
+            if (empty($this->barcode_type) || empty($this->barcode_type_code) || empty($this->barcode_type_label) || empty($this->barcode_type_coder))    // If data not already loaded
1296
+            {
1297
+                $sql = "SELECT rowid, code, libelle as label, coder";
1298
+                $sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
1299
+                $sql.= " WHERE rowid = ".$idtype;
1300
+                dol_syslog(get_class($this).'::fetch_barcode', LOG_DEBUG);
1301
+                $resql = $this->db->query($sql);
1302
+                if ($resql)
1303
+                {
1304
+                    $obj = $this->db->fetch_object($resql);
1305
+                    $this->barcode_type       = $obj->rowid;
1306
+                    $this->barcode_type_code  = $obj->code;
1307
+                    $this->barcode_type_label = $obj->label;
1308
+                    $this->barcode_type_coder = $obj->coder;
1309
+                    return 1;
1310
+                }
1311
+                else
1312
+                {
1313
+                    dol_print_error($this->db);
1314
+                    return -1;
1315
+                }
1316
+            }
1317
+        }
1318
+        return 0;
1319
+    }
4060 1320
 
4061
-			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
1321
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1322
+    /**
1323
+     *		Load the project with id $this->fk_project into this->project
1324
+     *
1325
+     *		@return		int			<0 if KO, >=0 if OK
1326
+     */
1327
+    function fetch_projet()
1328
+    {
1329
+        // phpcs:enable
1330
+        include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
4062 1331
 
4063
-			// Output template part (modules that overwrite templates must declare this into descriptor)
4064
-			// Use global variables + $dateSelector + $seller and $buyer
4065
-			$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4066
-            foreach($dirtpls as $reldir)
4067
-			{
4068
-				$tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php');
4069
-				if (empty(Globals::$conf->file->strict_mode)) {
4070
-                    $res=@include $tpl;
4071
-				} else {
4072
-					$res=include $tpl; // for debug
4073
-				}
4074
-				if ($res) break;
4075
-			}
4076
-		}
4077
-	}
4078
-
4079
-
4080
-	/* This is to show array of line of details of source object */
4081
-
4082
-
4083
-	/**
4084
-	 * 	Return HTML table table of source object lines
4085
-	 *  TODO Move this and previous function into output html class file (htmlline.class.php).
4086
-	 *  If lines are into a template, title must also be into a template
4087
-	 *  But for the moment we don't know if it's possible, so we keep the method available on overloaded objects.
4088
-	 *
4089
-	 *	@param	string		$restrictlist		''=All lines, 'services'=Restrict to services only
4090
-	 *  @return	void
4091
-	 */
4092
-	function printOriginLinesList($restrictlist='')
4093
-	{
4094
-		global $langs, $hookmanager, $conf;
4095
-
4096
-		print '<tr class="liste_titre">';
4097
-		print '<td>'.$langs->trans('Ref').'</td>';
4098
-		print '<td>'.$langs->trans('Description').'</td>';
4099
-		print '<td align="right">'.$langs->trans('VATRate').'</td>';
4100
-		print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
4101
-		if (!empty(Globals::$conf->multicurrency->enabled))
4102
-            print '<td align="right">' . $langs->trans('PriceUHTCurrency') . '</td>';
4103
-        print '<td align="right">'.$langs->trans('Qty').'</td>';
4104
-		if (Globals::$conf->global->PRODUCT_USE_UNITS) {
4105
-			print '<td align="left">'.$langs->trans('Unit').'</td>';
4106
-		}
4107
-		print '<td align="right">'.$langs->trans('ReductionShort').'</td></tr>';
1332
+        if (empty($this->fk_project) && ! empty($this->fk_projet)) $this->fk_project = $this->fk_projet;	// For backward compatibility
1333
+        if (empty($this->fk_project)) return 0;
4108 1334
 
4109
-		$var = true;
4110
-		$i	 = 0;
1335
+        $project = new Project($this->db);
1336
+        $result = $project->fetch($this->fk_project);
4111 1337
 
4112
-		if (! empty($this->lines))
4113
-		{
4114
-			foreach ($this->lines as $line)
4115
-			{
4116
-				if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
4117
-				{
4118
-					if (empty($line->fk_parent_line))
4119
-					{
4120
-						$parameters=array('line'=>$line,'var'=>$var,'i'=>$i);
4121
-						$action='';
4122
-						$hookmanager->executeHooks('printOriginObjectLine',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
4123
-					}
4124
-				}
4125
-				else
4126
-				{
4127
-					$this->printOriginLine($line, $var, $restrictlist);
4128
-				}
1338
+        $this->projet = $project;	// deprecated
1339
+        $this->project = $project;
1340
+        return $result;
1341
+    }
4129 1342
 
4130
-				$i++;
4131
-			}
4132
-		}
4133
-	}
4134
-
4135
-	/**
4136
-	 * 	Return HTML with a line of table array of source object lines
4137
-	 *  TODO Move this and previous function into output html class file (htmlline.class.php).
4138
-	 *  If lines are into a template, title must also be into a template
4139
-	 *  But for the moment we don't know if it's possible as we keep a method available on overloaded objects.
4140
-	 *
4141
-	 * 	@param	CommonObjectLine	$line				Line
4142
-	 * 	@param	string				$var				Var
4143
-	 *	@param	string				$restrictlist		''=All lines, 'services'=Restrict to services only (strike line if not)
4144
-	 * 	@return	void
4145
-	 */
4146
-	function printOriginLine($line, $var, $restrictlist='')
4147
-	{
4148
-		global $langs, $conf;
4149
-
4150
-		//var_dump($line);
4151
-		if (!empty($line->date_start))
4152
-		{
4153
-			$date_start=$line->date_start;
4154
-		}
4155
-		else
4156
-		{
4157
-			$date_start=$line->date_debut_prevue;
4158
-			if ($line->date_debut_reel) $date_start=$line->date_debut_reel;
4159
-		}
4160
-		if (!empty($line->date_end))
4161
-		{
4162
-			$date_end=$line->date_end;
4163
-		}
4164
-		else
4165
-		{
4166
-			$date_end=$line->date_fin_prevue;
4167
-			if ($line->date_fin_reel) $date_end=$line->date_fin_reel;
4168
-		}
4169
-
4170
-		$this->tpl['label'] = '';
4171
-		if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow');
4172
-
4173
-		if (($line->info_bits & 2) == 2)  // TODO Not sure this is used for source object
4174
-		{
4175
-			$discount=new DiscountAbsolute($this->db);
4176
-			$discount->fk_soc = $this->socid;
4177
-			$this->tpl['label'].= $discount->getNomUrl(0,'discount');
4178
-		}
4179
-		else if (! empty($line->fk_product))
4180
-		{
4181
-			$productstatic = new Product($this->db);
4182
-			$productstatic->id = $line->fk_product;
4183
-			$productstatic->ref = $line->ref;
4184
-			$productstatic->type = $line->fk_product_type;
4185
-            if(empty($productstatic->ref)){
4186
-				$line->fetch_product();
4187
-				$productstatic = $line->product;
4188
-			}
4189
-			
4190
-			$this->tpl['label'].= $productstatic->getNomUrl(1);
4191
-			$this->tpl['label'].= ' - '.(! empty($line->label)?$line->label:$line->product_label);
4192
-			// Dates
4193
-			if ($line->product_type == 1 && ($date_start || $date_end))
4194
-			{
4195
-				$this->tpl['label'].= get_date_range($date_start,$date_end);
4196
-			}
4197
-		}
4198
-		else
4199
-		{
4200
-			$this->tpl['label'].= ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
4201
-			if (!empty($line->desc)) {
4202
-				$this->tpl['label'].=$line->desc;
4203
-			}else {
4204
-				$this->tpl['label'].= ($line->label ? '&nbsp;'.$line->label : '');
4205
-			}
4206
-			
4207
-			// Dates
4208
-			if ($line->product_type == 1 && ($date_start || $date_end))
4209
-			{
4210
-				$this->tpl['label'].= get_date_range($date_start,$date_end);
4211
-			}
4212
-		}
1343
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1344
+    /**
1345
+     *		Load the product with id $this->fk_product into this->product
1346
+     *
1347
+     *		@return		int			<0 if KO, >=0 if OK
1348
+     */
1349
+    function fetch_product()
1350
+    {
1351
+        // phpcs:enable
1352
+        include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
4213 1353
 
4214
-		if (! empty($line->desc))
4215
-		{
4216
-			if ($line->desc == '(CREDIT_NOTE)')  // TODO Not sure this is used for source object
4217
-			{
4218
-				$discount=new DiscountAbsolute($this->db);
4219
-				$discount->fetch($line->fk_remise_except);
4220
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
4221
-			}
4222
-			elseif ($line->desc == '(DEPOSIT)')  // TODO Not sure this is used for source object
4223
-			{
4224
-				$discount=new DiscountAbsolute($this->db);
4225
-				$discount->fetch($line->fk_remise_except);
4226
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
4227
-			}
4228
-			elseif ($line->desc == '(EXCESS RECEIVED)')
4229
-			{
4230
-				$discount=new DiscountAbsolute($this->db);
4231
-				$discount->fetch($line->fk_remise_except);
4232
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessReceived",$discount->getNomUrl(0));
4233
-			}
4234
-			elseif ($line->desc == '(EXCESS PAID)')
4235
-			{
4236
-				$discount=new DiscountAbsolute($this->db);
4237
-				$discount->fetch($line->fk_remise_except);
4238
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessPaid",$discount->getNomUrl(0));
4239
-			}
4240
-			else
4241
-			{
4242
-				$this->tpl['description'] = dol_trunc($line->desc,60);
4243
-			}
4244
-		}
4245
-		else
4246
-		{
4247
-			$this->tpl['description'] = '&nbsp;';
4248
-		}
4249
-
4250
-        // VAT Rate
4251
-        $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
4252
-        $this->tpl['vat_rate'] .= (($line->info_bits & 1) == 1) ? '*' : '';
4253
-        if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
4254
-
4255
-		$this->tpl['price'] = price($line->subprice);
4256
-		$this->tpl['multicurrency_price'] = price($line->multicurrency_subprice);
4257
-		$this->tpl['qty'] = (($line->info_bits & 2) != 2) ? $line->qty : '&nbsp;';
4258
-		if (Globals::$conf->global->PRODUCT_USE_UNITS)
4259
-            $this->tpl['unit'] = $langs->transnoentities($line->getLabelOfUnit('long'));
4260
-        $this->tpl['remise_percent'] = (($line->info_bits & 2) != 2) ? vatrate($line->remise_percent, true) : '&nbsp;';
1354
+        if (empty($this->fk_product)) return 0;
4261 1355
 
4262
-		// Is the line strike or not
4263
-		$this->tpl['strike']=0;
4264
-		if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) $this->tpl['strike']=1;
4265
-
4266
-		// Output template part (modules that overwrite templates must declare this into descriptor)
4267
-		// Use global variables + $dateSelector + $seller and $buyer
4268
-		$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4269
-        foreach($dirtpls as $reldir)
4270
-		{
4271
-			$tpl = dol_buildpath($reldir.'/originproductline.tpl.php');
4272
-			if (empty(Globals::$conf->file->strict_mode)) {
4273
-                $res=@include $tpl;
4274
-			} else {
4275
-				$res=include $tpl; // for debug
4276
-			}
4277
-			if ($res) break;
4278
-		}
4279
-	}
1356
+        $product = new Product($this->db);
1357
+        $result = $product->fetch($this->fk_product);
4280 1358
 
1359
+        $this->product = $product;
1360
+        return $result;
1361
+    }
4281 1362
 
4282 1363
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4283
-	/**
4284
-	 *	Add resources to the current object : add entry into llx_element_resources
4285
-	 *	Need $this->element & $this->id
4286
-	 *
4287
-	 *	@param		int		$resource_id		Resource id
4288
-	 *	@param		string	$resource_type		'resource'
4289
-	 *	@param		int		$busy				Busy or not
4290
-	 *	@param		int		$mandatory			Mandatory or not
4291
-	 *	@return		int							<=0 if KO, >0 if OK
4292
-	 */
4293
-	function add_element_resource($resource_id, $resource_type, $busy=0, $mandatory=0)
4294
-	{
1364
+    /**
1365
+     *		Load the user with id $userid into this->user
1366
+     *
1367
+     *		@param	int		$userid 		Id du contact
1368
+     *		@return	int						<0 if KO, >0 if OK
1369
+     */
1370
+    function fetch_user($userid)
1371
+    {
4295 1372
         // phpcs:enable
4296
-		$this->db->begin();
4297
-
4298
-		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_resources (";
4299
-		$sql.= "resource_id";
4300
-		$sql.= ", resource_type";
4301
-		$sql.= ", element_id";
4302
-		$sql.= ", element_type";
4303
-		$sql.= ", busy";
4304
-		$sql.= ", mandatory";
4305
-		$sql.= ") VALUES (";
4306
-		$sql.= $resource_id;
4307
-		$sql.= ", '".$this->db->escape($resource_type)."'";
4308
-		$sql.= ", '".$this->db->escape($this->id)."'";
4309
-		$sql.= ", '".$this->db->escape($this->element)."'";
4310
-		$sql.= ", '".$this->db->escape($busy)."'";
4311
-		$sql.= ", '".$this->db->escape($mandatory)."'";
4312
-		$sql.= ")";
4313
-
4314
-		dol_syslog(get_class($this)."::add_element_resource", LOG_DEBUG);
4315
-		if ($this->db->query($sql))
4316
-		{
4317
-			$this->db->commit();
4318
-			return 1;
4319
-		}
4320
-		else
4321
-		{
4322
-			$this->error=$this->db->lasterror();
4323
-			$this->db->rollback();
4324
-			return  0;
4325
-		}
4326
-	}
1373
+        $user = new User($this->db);
1374
+        $result=$user->fetch($userid);
1375
+        $this->user = $user;
1376
+        return $result;
1377
+    }
4327 1378
 
4328 1379
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4329
-	/**
4330
-	 *    Delete a link to resource line
4331
-	 *
4332
-	 *    @param	int		$rowid			Id of resource line to delete
4333
-	 *    @param	int		$element		element name (for trigger) TODO: use $this->element into commonobject class
4334
-	 *    @param	int		$notrigger		Disable all triggers
4335
-	 *    @return   int						>0 if OK, <0 if KO
4336
-	 */
4337
-	function delete_resource($rowid, $element, $notrigger=0)
4338
-	{
1380
+    /**
1381
+     *	Read linked origin object
1382
+     *
1383
+     *	@return		void
1384
+     */
1385
+    function fetch_origin()
1386
+    {
4339 1387
         // phpcs:enable
4340
-		global $user;
1388
+        if ($this->origin == 'shipping') $this->origin = 'expedition';
1389
+        if ($this->origin == 'delivery') $this->origin = 'livraison';
1390
+        if ($this->origin == 'order_supplier') $this->origin = 'commandeFournisseur';
4341 1391
 
4342
-		$this->db->begin();
1392
+        $origin = $this->origin;
4343 1393
 
4344
-		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_resources";
4345
-		$sql.= " WHERE rowid=".$rowid;
1394
+        $classname = ucfirst($origin);
1395
+        $this->$origin = new $classname($this->db);
1396
+        $this->$origin->fetch($this->origin_id);
1397
+    }
4346 1398
 
4347
-		dol_syslog(get_class($this)."::delete_resource", LOG_DEBUG);
1399
+    /**
1400
+     *  Load object from specific field
1401
+     *
1402
+     *  @param	string	$table		Table element or element line
1403
+     *  @param	string	$field		Field selected
1404
+     *  @param	string	$key		Import key
1405
+     *  @param	string	$element	Element name
1406
+     *	@return	int					<0 if KO, >0 if OK
1407
+     */
1408
+    function fetchObjectFrom($table, $field, $key, $element = null)
1409
+    {
1410
+        global $conf;
4348 1411
 
4349
-		$resql=$this->db->query($sql);
4350
-		if (! $resql)
4351
-		{
4352
-			$this->error=$this->db->lasterror();
4353
-			$this->db->rollback();
4354
-			return -1;
4355
-		}
4356
-		else
4357
-		{
4358
-			if (! $notrigger)
4359
-			{
4360
-				$result=$this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user);
4361
-				if ($result < 0) { $this->db->rollback(); return -1; }
4362
-			}
4363
-			$this->db->commit();
4364
-			return 1;
4365
-		}
4366
-	}
4367
-
4368
-
4369
-	/**
4370
-	 * Overwrite magic function to solve problem of cloning object that are kept as references
4371
-	 *
4372
-	 * @return void
4373
-	 */
4374
-	function __clone()
4375
-	{
4376
-		// Force a copy of this->lines, otherwise it will point to same object.
4377
-		if (isset($this->lines) && is_array($this->lines))
4378
-		{
4379
-			$nboflines=count($this->lines);
4380
-			for($i=0; $i < $nboflines; $i++)
4381
-			{
4382
-				$this->lines[$i] = clone $this->lines[$i];
4383
-			}
4384
-		}
4385
-	}
4386
-
4387
-	/**
4388
-	 * Common function for all objects extending CommonObject for generating documents
4389
-	 *
4390
-	 * @param 	string 		$modelspath 	Relative folder where generators are placed
4391
-	 * @param 	string 		$modele 		Generator to use. Caller must set it to obj->modelpdf or GETPOST('modelpdf') for example.
4392
-	 * @param 	Translate 	$outputlangs 	Output language to use
4393
-	 * @param 	int 		$hidedetails 	1 to hide details. 0 by default
4394
-	 * @param 	int 		$hidedesc 		1 to hide product description. 0 by default
4395
-	 * @param 	int 		$hideref 		1 to hide product reference. 0 by default
4396
-	 * @param   null|array  $moreparams     Array to provide more information
4397
-	 * @return 	int 						>0 if OK, <0 if KO
4398
-	 * @see	addFileIntoDatabaseIndex
4399
-	 */
4400
-	protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
4401
-	{
4402
-		global $conf, $langs, $user;
4403
-
4404
-		$srctemplatepath='';
4405
-
4406
-		// Increase limit for PDF build
4407
-		$err=error_reporting();
4408
-		error_reporting(0);
4409
-		@set_time_limit(120);
4410
-		error_reporting($err);
4411
-
4412
-		// If selected model is a filename template (then $modele="modelname" or "modelname:filename")
4413
-		$tmp=explode(':',$modele,2);
4414
-		if (! empty($tmp[1]))
4415
-		{
4416
-			$modele=$tmp[0];
4417
-			$srctemplatepath=$tmp[1];
4418
-		}
4419
-
4420
-		// Search template files
4421
-		$file=''; $classname=''; $filefound=0;
4422
-		$dirmodels=array('/');
4423
-		if (is_array(Globals::$conf->modules_parts['models']))
4424
-            $dirmodels = array_merge($dirmodels, Globals::$conf->modules_parts['models']);
4425
-        foreach($dirmodels as $reldir)
4426
-		{
4427
-			foreach(array('doc','pdf') as $prefix)
4428
-			{
4429
-				if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php";     // Member module use prefix_module.class.php
4430
-				else $file = $prefix."_".$modele.".modules.php";
1412
+        $result=false;
4431 1413
 
4432
-				// On verifie l'emplacement du modele
4433
-				$file=dol_buildpath($reldir.$modelspath.$file,0);
4434
-				if (file_exists($file))
4435
-				{
4436
-					$filefound=1;
4437
-					$classname=$prefix.'_'.$modele;
4438
-					break;
4439
-				}
4440
-			}
4441
-			if ($filefound) break;
4442
-		}
1414
+        $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX.$table;
1415
+        $sql.= " WHERE ".$field." = '".$key."'";
1416
+        if (! empty($element)) {
1417
+            $sql.= " AND entity IN (".getEntity($element).")";
1418
+        } else {
1419
+            $sql .= " AND entity = " . Globals::$conf->entity;
1420
+        }
4443 1421
 
4444
-		// If generator was found
4445
-		if ($filefound)
4446
-		{
4447
-			global $db;  // Required to solve a conception default in commonstickergenerator.class.php making an include of code using $db
1422
+        dol_syslog(get_class($this).'::fetchObjectFrom', LOG_DEBUG);
1423
+        $resql = $this->db->query($sql);
1424
+        if ($resql)
1425
+        {
1426
+            $row = $this->db->fetch_row($resql);
1427
+            // Test for avoid error -1
1428
+            if ($row[0] > 0) {
1429
+                $result = $this->fetch($row[0]);
1430
+            }
1431
+        }
4448 1432
 
4449
-			require_once $file;
1433
+        return $result;
1434
+    }
4450 1435
 
4451
-			$obj = new $classname($this->db);
1436
+    /**
1437
+     *	Getter generic. Load value from a specific field
1438
+     *
1439
+     *	@param	string	$table		Table of element or element line
1440
+     *	@param	int		$id			Element id
1441
+     *	@param	string	$field		Field selected
1442
+     *	@return	int					<0 if KO, >0 if OK
1443
+     */
1444
+    function getValueFrom($table, $id, $field)
1445
+    {
1446
+        $result=false;
1447
+        if (!empty($id) && !empty($field) && !empty($table)) {
1448
+            $sql = "SELECT ".$field." FROM ".MAIN_DB_PREFIX.$table;
1449
+            $sql.= " WHERE rowid = ".$id;
1450
+
1451
+            dol_syslog(get_class($this).'::getValueFrom', LOG_DEBUG);
1452
+            $resql = $this->db->query($sql);
1453
+            if ($resql)
1454
+            {
1455
+                $row = $this->db->fetch_row($resql);
1456
+                $result = $row[0];
1457
+            }
1458
+        }
1459
+        return $result;
1460
+    }
4452 1461
 
4453
-			// If generator is ODT, we must have srctemplatepath defined, if not we set it.
4454
-			if ($obj->type == 'odt' && empty($srctemplatepath))
4455
-			{
4456
-				$varfortemplatedir=$obj->scandir;
4457
-				if ($varfortemplatedir && !empty(Globals::$conf->global->$varfortemplatedir)) {
4458
-					$dirtoscan = Globals::$conf->global->$varfortemplatedir;
1462
+    /**
1463
+     *	Setter generic. Update a specific field into database.
1464
+     *  Warning: Trigger is run only if param trigkey is provided.
1465
+     *
1466
+     *	@param	string		$field			Field to update
1467
+     *	@param	mixed		$value			New value
1468
+     *	@param	string		$table			To force other table element or element line (should not be used)
1469
+     *	@param	int			$id				To force other object id (should not be used)
1470
+     *	@param	string		$format			Data format ('text', 'date'). 'text' is used if not defined
1471
+     *	@param	string		$id_field		To force rowid field name. 'rowid' is used if not defined
1472
+     *	@param	User|string	$fuser			Update the user of last update field with this user. If not provided, current user is used except if value is 'none'
1473
+     *  @param  string      $trigkey    	Trigger key to run (in most cases something like 'XXX_MODIFY')
1474
+     *  @param	string		$fk_user_field	Name of field to save user id making change
1475
+     *	@return	int							<0 if KO, >0 if OK
1476
+     *  @see updateExtraField
1477
+     */
1478
+    function setValueFrom($field, $value, $table='', $id=null, $format='', $id_field='', $fuser=null, $trigkey='', $fk_user_field='fk_user_modif')
1479
+    {
1480
+        global $user,$langs,$conf;
4459 1481
 
4460
-                    $listoffiles=array();
1482
+        if (empty($table)) 	  $table=$this->table_element;
1483
+        if (empty($id))    	  $id=$this->id;
1484
+        if (empty($format))   $format='text';
1485
+        if (empty($id_field)) $id_field='rowid';
4461 1486
 
4462
-					// Now we add first model found in directories scanned
4463
-					$listofdir=explode(',',$dirtoscan);
4464
-					foreach($listofdir as $key => $tmpdir)
4465
-					{
4466
-						$tmpdir=trim($tmpdir);
4467
-						$tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir);
4468
-						if (! $tmpdir) { unset($listofdir[$key]); continue; }
4469
-						if (is_dir($tmpdir))
4470
-						{
4471
-							$tmpfiles=dol_dir_list($tmpdir,'files',0,'\.od(s|t)$','','name',SORT_ASC,0);
4472
-							if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
4473
-						}
4474
-					}
4475
-
4476
-					if (count($listoffiles))
4477
-					{
4478
-						foreach($listoffiles as $record)
4479
-						{
4480
-							$srctemplatepath=$record['fullname'];
4481
-							break;
4482
-						}
4483
-					}
4484
-				}
1487
+        $error=0;
4485 1488
 
4486
-				if (empty($srctemplatepath))
4487
-				{
4488
-					$this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined';
4489
-					return -1;
4490
-				}
4491
-			}
1489
+        $this->db->begin();
4492 1490
 
4493
-			if ($obj->type == 'odt' && ! empty($srctemplatepath))
4494
-			{
4495
-				if (! dol_is_file($srctemplatepath))
4496
-				{
4497
-					$this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound';
4498
-					return -1;
4499
-				}
4500
-			}
1491
+        // Special case
1492
+        if ($table == 'product' && $field == 'note_private') $field='note';
1493
+        if (in_array($table, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) $fk_user_field = 'fk_user_mod';
4501 1494
 
4502
-			// We save charset_output to restore it because write_file can change it if needed for
4503
-			// output format that does not support UTF8.
4504
-			$sav_charset_output=$outputlangs->charset_output;
1495
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$table." SET ";
4505 1496
 
4506
-			if (in_array(get_class($this), array('Adherent')))
4507
-			{
4508
-				$arrayofrecords = array();   // The write_file of templates of adherent class need this var
4509
-				$resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams);
4510
-			}
4511
-			else
4512
-			{
4513
-				$resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $moreparams);
4514
-			}
4515
-			// After call of write_file $obj->result['fullpath'] is set with generated file. It will be used to update the ECM database index.
1497
+        if ($format == 'text') $sql.= $field." = '".$this->db->escape($value)."'";
1498
+        else if ($format == 'int') $sql.= $field." = ".$this->db->escape($value);
1499
+        else if ($format == 'date') $sql.= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
4516 1500
 
4517
-			if ($resultwritefile > 0)
4518
-			{
4519
-				$outputlangs->charset_output=$sav_charset_output;
1501
+        if ($fk_user_field)
1502
+        {
1503
+            if (! empty($fuser) && is_object($fuser)) $sql.=", ".$fk_user_field." = ".$fuser->id;
1504
+            elseif (empty($fuser) || $fuser != 'none') $sql.=", ".$fk_user_field." = ".$user->id;
1505
+        }
4520 1506
 
4521
-				// We delete old preview
4522
-				require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
4523
-				dol_delete_preview($this);
1507
+        $sql.= " WHERE ".$id_field." = ".$id;
4524 1508
 
4525
-				// Index file in database
4526
-				if (! empty($obj->result['fullpath']))
4527
-				{
4528
-					$destfull = $obj->result['fullpath'];
4529
-					$upload_dir = dirname($destfull);
4530
-					$destfile = basename($destfull);
4531
-					$rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $upload_dir);
4532
-
4533
-					if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir))     // If not a tmp dir
4534
-					{
4535
-						$filename = basename($destfile);
4536
-						$rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
4537
-						$rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
4538
-
4539
-						include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
4540
-						$ecmfile=new EcmFiles($this->db);
4541
-						$result = $ecmfile->fetch(0, '', ($rel_dir?$rel_dir.'/':'').$filename);
4542
-
4543
-						// Set the public "share" key
4544
-						$setsharekey = false;
4545
-						if ($this->element == 'propal')
4546
-						{
4547
-							$useonlinesignature = Globals::$conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok
4548
-                            if ($useonlinesignature) $setsharekey=true;
4549
-							if (!empty(Globals::$conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD))
4550
-                                $setsharekey = true;
4551
-                        }
4552
-						if ($this->element == 'commande' && !empty(Globals::$conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD))
4553
-                            $setsharekey = true;
4554
-                        if ($this->element == 'facture' && !empty(Globals::$conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD))
4555
-                            $setsharekey = true;
4556
-                        if ($this->element == 'bank_account' && !empty(Globals::$conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD))
4557
-                            $setsharekey = true;
1509
+        dol_syslog(get_class($this)."::".__FUNCTION__."", LOG_DEBUG);
1510
+        $resql = $this->db->query($sql);
1511
+        if ($resql)
1512
+        {
1513
+            if ($trigkey)
1514
+            {
1515
+                // call trigger with updated object values
1516
+                if (empty($this->fields) && method_exists($this, 'fetch'))
1517
+                {
1518
+                    $result = $this->fetch($id);
1519
+                }
1520
+                else
1521
+                {
1522
+                    $result = $this->fetchCommon($id);
1523
+                }
1524
+                if ($result >= 0) $result=$this->call_trigger($trigkey, (! empty($fuser) && is_object($fuser)) ? $fuser : $user);   // This may set this->errors
1525
+                if ($result < 0) $error++;
1526
+            }
4558 1527
 
4559
-                        if ($setsharekey)
4560
-						{
4561
-							if (empty($ecmfile->share))	// Because object not found or share not set yet
4562
-							{
4563
-								require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
4564
-								$ecmfile->share = getRandomPassword(true);
4565
-							}
4566
-						}
1528
+            if (! $error)
1529
+            {
1530
+                if (property_exists($this, $field)) $this->$field = $value;
1531
+                $this->db->commit();
1532
+                return 1;
1533
+            }
1534
+            else
1535
+            {
1536
+                $this->db->rollback();
1537
+                return -2;
1538
+            }
1539
+        }
1540
+        else
1541
+        {
1542
+            $this->error=$this->db->lasterror();
1543
+            $this->db->rollback();
1544
+            return -1;
1545
+        }
1546
+    }
4567 1547
 
4568
-						if ($result > 0)
4569
-						{
4570
-							$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4571
-							$ecmfile->fullpath_orig = '';
4572
-							$ecmfile->gen_or_uploaded = 'generated';
4573
-							$ecmfile->description = '';    // indexed content
4574
-							$ecmfile->keyword = '';        // keyword content
4575
-							$result = $ecmfile->update($user);
4576
-							if ($result < 0)
4577
-							{
4578
-								setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
4579
-							}
4580
-						}
4581
-						else
4582
-						{
4583
-							$ecmfile->entity = Globals::$conf->entity;
4584
-                            $ecmfile->filepath = $rel_dir;
4585
-							$ecmfile->filename = $filename;
4586
-							$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4587
-							$ecmfile->fullpath_orig = '';
4588
-							$ecmfile->gen_or_uploaded = 'generated';
4589
-							$ecmfile->description = '';    // indexed content
4590
-							$ecmfile->keyword = '';        // keyword content
4591
-							$ecmfile->src_object_type = $this->table_element;
4592
-							$ecmfile->src_object_id   = $this->id;
4593
-
4594
-							$result = $ecmfile->create($user);
4595
-							if ($result < 0)
4596
-							{
4597
-								setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
4598
-							}
4599
-						}
1548
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
1549
+    /**
1550
+     *      Load properties id_previous and id_next by comparing $fieldid with $this->ref
1551
+     *
1552
+     *      @param	string	$filter		Optional filter. Example: " AND (t.field1 = 'aa' OR t.field2 = 'bb')"
1553
+     *	 	@param  string	$fieldid   	Name of field to use for the select MAX and MIN
1554
+     *		@param	int		$nodbprefix	Do not include DB prefix to forge table name
1555
+     *      @return int         		<0 if KO, >0 if OK
1556
+     */
1557
+    function load_previous_next_ref($filter, $fieldid, $nodbprefix=0)
1558
+    {
1559
+        // phpcs:enable
1560
+        global $conf, $user;
4600 1561
 
4601
-						/*$this->result['fullname']=$destfull;
4602
-						$this->result['filepath']=$ecmfile->filepath;
4603
-						$this->result['filename']=$ecmfile->filename;*/
4604
-						//var_dump($obj->update_main_doc_field);exit;
4605
-
4606
-						// Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set)
4607
-						$update_main_doc_field=0;
4608
-						if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1;
4609
-						if ($update_main_doc_field && ! empty($this->table_element))
4610
-						{
4611
-							$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".($ecmfile->filepath.'/'.$ecmfile->filename)."'";
4612
-							$sql.= ' WHERE rowid = '.$this->id;
4613
-							$resql = $this->db->query($sql);
4614
-							if (! $resql) dol_print_error($this->db);
4615
-						}
4616
-					}
4617
-				}
4618
-				else
4619
-				{
4620
-					dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING);
4621
-				}
1562
+        if (! $this->table_element)
1563
+        {
1564
+            dol_print_error('',get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
1565
+            return -1;
1566
+        }
1567
+        if ($fieldid == 'none') return 1;
4622 1568
 
4623
-				// Success in building document. We build meta file.
4624
-				dol_meta_create($this);
1569
+        // Security on socid
1570
+        $socid = 0;
1571
+        if ($user->societe_id > 0) $socid = $user->societe_id;
4625 1572
 
4626
-				return 1;
4627
-			}
4628
-			else
4629
-			{
4630
-				$outputlangs->charset_output=$sav_charset_output;
4631
-				dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors);
4632
-				return -1;
4633
-			}
4634
-		}
4635
-		else
4636
-		{
4637
-			$this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
4638
-			dol_print_error('',$this->error);
4639
-			return -1;
4640
-		}
4641
-	}
4642
-
4643
-	/**
4644
-	 *  Build thumb
4645
-	 *  @TODO Move this into files.lib.php
4646
-	 *
4647
-	 *  @param      string	$file           Path file in UTF8 to original file to create thumbs from.
4648
-	 *	@return		void
4649
-	 */
4650
-	function addThumbs($file)
4651
-	{
4652
-		global $maxwidthsmall, $maxheightsmall, $maxwidthmini, $maxheightmini, $quality;
4653
-
4654
-		require_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';		// This define also $maxwidthsmall, $quality, ...
4655
-
4656
-		$file_osencoded=dol_osencode($file);
4657
-		if (file_exists($file_osencoded))
4658
-		{
4659
-			// Create small thumbs for company (Ratio is near 16/9)
4660
-			// Used on logon for example
4661
-			vignette($file_osencoded, $maxwidthsmall, $maxheightsmall, '_small', $quality);
4662
-
4663
-			// Create mini thumbs for company (Ratio is near 16/9)
4664
-			// Used on menu or for setup page for example
4665
-			vignette($file_osencoded, $maxwidthmini, $maxheightmini, '_mini', $quality);
4666
-		}
4667
-	}
4668
-
4669
-
4670
-	/* Functions common to commonobject and commonobjectline */
4671
-
4672
-	/* For default values */
4673
-
4674
-	/**
4675
-	 * Return the default value to use for a field when showing the create form of object.
4676
-	 * Return values in this order:
4677
-	 * 1) If parameter is available into POST, we return it first.
4678
-	 * 2) If not but an alternate value was provided as parameter of function, we return it.
4679
-	 * 3) If not but a constant Globals::$conf->global->OBJECTELEMENT_FIELDNAME is set, we return it (It is better to use the dedicated table).
4680
-	 * 4) Return value found into database (TODO No yet implemented)
4681
-	 *
4682
-	 * @param   string              $fieldname          Name of field
4683
-	 * @param   string              $alternatevalue     Alternate value to use
4684
-	 * @return  string|string[]                         Default value (can be an array if the GETPOST return an array)
4685
-	 **/
4686
-	function getDefaultCreateValueFor($fieldname, $alternatevalue=null)
4687
-	{
4688
-		global $conf, $_POST;
4689
-
4690
-		// If param here has been posted, we use this value first.
4691
-		if (isset($_POST[$fieldname])) return GETPOST($fieldname, 2);
4692
-
4693
-		if (isset($alternatevalue)) return $alternatevalue;
4694
-
4695
-		$newelement=$this->element;
4696
-		if ($newelement == 'facture') $newelement='invoice';
4697
-		if ($newelement == 'commande') $newelement='order';
4698
-		if (empty($newelement))
4699
-		{
4700
-			dol_syslog("Ask a default value using common method getDefaultCreateValueForField on an object with no property ->element defined. Return empty string.", LOG_WARNING);
4701
-			return '';
4702
-		}
4703
-
4704
-		$keyforfieldname=strtoupper($newelement.'_DEFAULT_'.$fieldname);
4705
-		//var_dump($keyforfieldname);
4706
-		if (isset(Globals::$conf->global->$keyforfieldname))
4707
-            return Globals::$conf->global->$keyforfieldname;
1573
+        // this->ismultientitymanaged contains
1574
+        // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
1575
+        $alias = 's';
1576
+        if ($this->element == 'societe') $alias = 'te';
4708 1577
 
4709
-        // TODO Ad here a scan into table llx_overwrite_default with a filter on $this->element and $fieldname
4710
-	}
1578
+        $sql = "SELECT MAX(te.".$fieldid.")";
1579
+        $sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1580
+        if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1581
+            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1582
+        }
1583
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1584
+        else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1585
+        else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1586
+        if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid)  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1587
+        $sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1588
+        if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1589
+        if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1590
+        if (! empty($filter))
1591
+        {
1592
+            if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1593
+            $sql.=$filter;
1594
+        }
1595
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1596
+        else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1597
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1598
+            if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1599
+                if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1600
+                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1601
+                } else {
1602
+                    $sql.= " AND ug.fk_user = te.rowid";
1603
+                    $sql.= " AND ug.entity IN (".getEntity($this->element).")";
1604
+                }
1605
+            } else {
1606
+                $sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1607
+            }
1608
+        }
1609
+        if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1610
+        if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1611
+        if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1612
+        //print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
4711 1613
 
1614
+        $result = $this->db->query($sql);
1615
+        if (! $result)
1616
+        {
1617
+            $this->error=$this->db->lasterror();
1618
+            return -1;
1619
+        }
1620
+        $row = $this->db->fetch_row($result);
1621
+        $this->ref_previous = $row[0];
4712 1622
 
4713
-	/* For triggers */
4714 1623
 
1624
+        $sql = "SELECT MIN(te.".$fieldid.")";
1625
+        $sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1626
+        if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1627
+            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1628
+        }
1629
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1630
+        else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1631
+        else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1632
+        if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1633
+        $sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1634
+        if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1635
+        if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1636
+        if (! empty($filter))
1637
+        {
1638
+            if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1639
+            $sql.=$filter;
1640
+        }
1641
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1642
+        else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1643
+        if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1644
+            if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1645
+                if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1646
+                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1647
+                } else {
1648
+                    $sql.= " AND ug.fk_user = te.rowid";
1649
+                    $sql.= " AND ug.entity IN (".getEntity($this->element).")";
1650
+                }
1651
+            } else {
1652
+                $sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1653
+            }
1654
+        }
1655
+        if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1656
+        if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1657
+        if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1658
+        //print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1659
+        // Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
1660
+
1661
+        $result = $this->db->query($sql);
1662
+        if (! $result)
1663
+        {
1664
+            $this->error=$this->db->lasterror();
1665
+            return -2;
1666
+        }
1667
+        $row = $this->db->fetch_row($result);
1668
+        $this->ref_next = $row[0];
4715 1669
 
4716
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4717
-	/**
4718
-	 * Call trigger based on this instance.
4719
-	 * Some context information may also be provided into array property this->context.
4720
-	 * NB:  Error from trigger are stacked in interface->errors
4721
-	 * NB2: If return code of triggers are < 0, action calling trigger should cancel all transaction.
4722
-	 *
4723
-	 * @param   string    $trigger_name   trigger's name to execute
4724
-	 * @param   User      $user           Object user
4725
-	 * @return  int                       Result of run_triggers
4726
-	 */
4727
-	function call_trigger($trigger_name, $user)
4728
-	{
4729
-        // phpcs:enable
4730
-		global $langs,$conf;
1670
+        return 1;
1671
+    }
4731 1672
 
4732
-		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
4733
-		$interface=new Interfaces($this->db);
4734
-		$result=$interface->run_triggers($trigger_name,$this,$user,$langs,$conf);
4735 1673
 
4736
-		if ($result < 0)
4737
-		{
4738
-			if (!empty($this->errors))
4739
-			{
4740
-				$this->errors=array_unique(array_merge($this->errors,$interface->errors));   // We use array_unique because when a trigger call another trigger on same object, this->errors is added twice.
4741
-			}
4742
-			else
4743
-			{
4744
-				$this->errors=$interface->errors;
4745
-			}
4746
-		}
4747
-		return $result;
4748
-	}
1674
+    /**
1675
+     *      Return list of id of contacts of object
1676
+     *
1677
+     *      @param	string	$source     Source of contact: external (llx_socpeople) or internal (llx_user) or thirdparty (llx_societe)
1678
+     *      @return array				Array of id of contacts (if source=external or internal)
1679
+     * 									Array of id of third parties with at least one contact on object (if source=thirdparty)
1680
+     */
1681
+    function getListContactId($source='external')
1682
+    {
1683
+        $contactAlreadySelected = array();
1684
+        $tab = $this->liste_contact(-1,$source);
1685
+        $num=count($tab);
1686
+        $i = 0;
1687
+        while ($i < $num)
1688
+        {
1689
+            if ($source == 'thirdparty') $contactAlreadySelected[$i] = $tab[$i]['socid'];
1690
+            else  $contactAlreadySelected[$i] = $tab[$i]['id'];
1691
+            $i++;
1692
+        }
1693
+        return $contactAlreadySelected;
1694
+    }
4749 1695
 
4750 1696
 
4751
-	/* Functions for extrafields */
1697
+    /**
1698
+     *	Link element with a project
1699
+     *
1700
+     *	@param     	int		$projectid		Project id to link element to
1701
+     *	@return		int						<0 if KO, >0 if OK
1702
+     */
1703
+    function setProject($projectid)
1704
+    {
1705
+        if (! $this->table_element)
1706
+        {
1707
+            dol_syslog(get_class($this)."::setProject was called on objet with property table_element not defined",LOG_ERR);
1708
+            return -1;
1709
+        }
4752 1710
 
1711
+        $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1712
+        if ($this->table_element == 'actioncomm')
1713
+        {
1714
+            if ($projectid) $sql.= ' SET fk_project = '.$projectid;
1715
+            else $sql.= ' SET fk_project = NULL';
1716
+            $sql.= ' WHERE id = '.$this->id;
1717
+        }
1718
+        else
1719
+        {
1720
+            if ($projectid) $sql.= ' SET fk_projet = '.$projectid;
1721
+            else $sql.= ' SET fk_projet = NULL';
1722
+            $sql.= ' WHERE rowid = '.$this->id;
1723
+        }
4753 1724
 
4754
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4755
-	/**
4756
-	 *  Function to get extra fields of an object into $this->array_options
4757
-	 *  This method is in most cases called by method fetch of objects but you can call it separately.
4758
-	 *
4759
-	 *  @param	int		$rowid			Id of line. Use the id of object if not defined. Deprecated. Function must be called without parameters.
4760
-	 *  @param  array	$optionsArray   Array resulting of call of extrafields->fetch_name_optionals_label(). Deprecated. Function must be called without parameters.
4761
-	 *  @return	int						<0 if error, 0 if no values of extrafield to find nor found, 1 if an attribute is found and value loaded
4762
-	 */
4763
-	function fetch_optionals($rowid=null, $optionsArray=null)
4764
-	{
4765
-        // phpcs:enable
4766
-		if (empty($rowid)) {
4767
-            $rowid = $this->id;
1725
+        dol_syslog(get_class($this)."::setProject", LOG_DEBUG);
1726
+        if ($this->db->query($sql))
1727
+        {
1728
+            $this->fk_project = $projectid;
1729
+            return 1;
1730
+        }
1731
+        else
1732
+        {
1733
+            dol_print_error($this->db);
1734
+            return -1;
4768 1735
         }
1736
+    }
4769 1737
 
4770
-        // To avoid SQL errors. Probably not the better solution though
4771
-		if (!$this->table_element) {
4772
-			return 0;
4773
-		}
4774
-
4775
-		$this->array_options=array();
4776
-
4777
-		if (! is_array($optionsArray))
4778
-		{
4779
-			// If $extrafields is not a known object, we initialize it. Best practice is to have $extrafields defined into card.php or list.php page.
4780
-			// TODO Use of existing $extrafield is not yet ready (must mutualize code that use extrafields in form first)
4781
-			// global $extrafields;
4782
-			//if (! is_object($extrafields))
4783
-			//{
4784
-				// require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
4785
-            $extrafields = new AlExtraFields();
4786
-            //}
1738
+    /**
1739
+     *  Change the payments methods
1740
+     *
1741
+     *  @param		int		$id		Id of new payment method
1742
+     *  @return		int				>0 if OK, <0 if KO
1743
+     */
1744
+    function setPaymentMethods($id)
1745
+    {
1746
+        dol_syslog(get_class($this).'::setPaymentMethods('.$id.')');
1747
+        if ($this->statut >= 0 || $this->element == 'societe')
1748
+        {
1749
+            // TODO uniformize field name
1750
+            $fieldname = 'fk_mode_reglement';
1751
+            if ($this->element == 'societe') $fieldname = 'mode_reglement';
1752
+            if (get_class($this) == 'Fournisseur') $fieldname = 'mode_reglement_supplier';
4787 1753
 
4788
-			// Load array of extrafields for elementype = $this->table_element
4789
-			if (empty($extrafields->attributes[$this->table_element]['loaded']))
4790
-			{
4791
-				$extrafields->fetch_name_optionals_label($this->table_element);
4792
-			}
4793
-			$optionsArray = (! empty($extrafields->attributes[$this->table_element]['label'])?$extrafields->attributes[$this->table_element]['label']:null);
4794
-		}
4795
-		else
4796
-		{
4797
-			// global $extrafields;
4798
-            dol_syslog("Warning: fetch_optionals was called with param optionsArray defined when you should pass null now", LOG_WARNING);
4799
-		}
1754
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1755
+            $sql .= ' SET '.$fieldname.' = '.$id;
1756
+            $sql .= ' WHERE rowid='.$this->id;
4800 1757
 
4801
-		$table_element = $this->table_element;
4802
-		if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
1758
+            if ($this->db->query($sql))
1759
+            {
1760
+                $this->mode_reglement_id = $id;
1761
+                // for supplier
1762
+                if (get_class($this) == 'Fournisseur') $this->mode_reglement_supplier_id = $id;
1763
+                return 1;
1764
+            }
1765
+            else
1766
+            {
1767
+                dol_syslog(get_class($this).'::setPaymentMethods Erreur '.$sql.' - '.$this->db->error());
1768
+                $this->error=$this->db->error();
1769
+                return -1;
1770
+            }
1771
+        }
1772
+        else
1773
+        {
1774
+            dol_syslog(get_class($this).'::setPaymentMethods, status of the object is incompatible');
1775
+            $this->error='Status of the object is incompatible '.$this->statut;
1776
+            return -2;
1777
+        }
1778
+    }
4803 1779
 
4804
-		// Request to get complementary values
4805
-		if (is_array($optionsArray) && count($optionsArray) > 0)
4806
-		{
4807
-			$sql = "SELECT rowid";
4808
-			foreach ($optionsArray as $name => $label)
4809
-			{
4810
-				if (empty($extrafields->attributes[$this->table_element]['type'][$name]) || $extrafields->attributes[$this->table_element]['type'][$name] != 'separate')
4811
-				{
4812
-					$sql.= ", ".$name;
4813
-				}
4814
-			}
4815
-			$sql.= " FROM ".MAIN_DB_PREFIX.$table_element."_extrafields";
4816
-			$sql.= " WHERE fk_object = ".$rowid;
1780
+    /**
1781
+     *  Change the multicurrency code
1782
+     *
1783
+     *  @param		string	$code	multicurrency code
1784
+     *  @return		int				>0 if OK, <0 if KO
1785
+     */
1786
+    function setMulticurrencyCode($code)
1787
+    {
1788
+        dol_syslog(get_class($this).'::setMulticurrencyCode('.$id.')');
1789
+        if ($this->statut >= 0 || $this->element == 'societe')
1790
+        {
1791
+            $fieldname = 'multicurrency_code';
4817 1792
 
4818
-			//dol_syslog(get_class($this)."::fetch_optionals get extrafields data for ".$this->table_element, LOG_DEBUG);		// Too verbose
4819
-			$resql=$this->db->query($sql);
4820
-			if ($resql)
4821
-			{
4822
-				$this->array_options = array();
4823
-				$numrows=$this->db->num_rows($resql);
4824
-				if ($numrows)
4825
-				{
4826
-					$tab = $this->db->fetch_array($resql);
4827
-
4828
-					foreach ($tab as $key => $value)
4829
-					{
4830
-						// Test fetch_array ! is_int($key) because fetch_array result is a mix table with Key as alpha and Key as int (depend db engine)
4831
-						if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && ! is_int($key))
4832
-						{
4833
-							// we can add this attribute to object
4834
-							if (! empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date','datetime')))
4835
-							{
4836
-								//var_dump($extrafields->attributes[$this->table_element]['type'][$key]);
4837
-								$this->array_options["options_".$key]=$this->db->jdate($value);
4838
-							}
4839
-							else
4840
-							{
4841
-								$this->array_options["options_".$key]=$value;
4842
-							}
1793
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1794
+            $sql .= ' SET '.$fieldname." = '".$this->db->escape($code)."'";
1795
+            $sql .= ' WHERE rowid='.$this->id;
4843 1796
 
4844
-							//var_dump('key '.$key.' '.$value.' type='.$extrafields->attributes[$this->table_element]['type'][$key].' '.$this->array_options["options_".$key]);
4845
-						}
4846
-					}
4847
-				}
1797
+            if ($this->db->query($sql))
1798
+            {
1799
+                $this->multicurrency_code = $code;
4848 1800
 
4849
-				$this->db->free($resql);
1801
+                list($fk_multicurrency, $rate) = MultiCurrency::getIdAndTxFromCode($this->db, $code);
1802
+                if ($rate) $this->setMulticurrencyRate($rate,2);
4850 1803
 
4851
-				if ($numrows) return $numrows;
4852
-				else return 0;
4853
-			}
4854
-			else
4855
-			{
4856
-				dol_print_error($this->db);
4857
-				return -1;
4858
-			}
4859
-		}
4860
-		return 0;
4861
-	}
4862
-
4863
-	/**
4864
-	 *	Delete all extra fields values for the current object.
4865
-	 *
4866
-	 *  @return	int		<0 if KO, >0 if OK
4867
-	 */
4868
-	function deleteExtraFields()
4869
-	{
4870
-		$this->db->begin();
4871
-
4872
-		$table_element = $this->table_element;
4873
-		if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
4874
-
4875
-		$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
4876
-		dol_syslog(get_class($this)."::deleteExtraFields delete", LOG_DEBUG);
4877
-		$resql=$this->db->query($sql_del);
4878
-		if (! $resql)
4879
-		{
4880
-			$this->error=$this->db->lasterror();
4881
-			$this->db->rollback();
4882
-			return -1;
4883
-		}
4884
-		else
4885
-		{
4886
-			$this->db->commit();
4887
-			return 1;
4888
-		}
4889
-	}
4890
-
4891
-	/**
4892
-	 *	Add/Update all extra fields values for the current object.
4893
-	 *  Data to describe values to insert/update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
4894
-	 *  This function delete record with all extrafields and insert them again from the array $this->array_options.
4895
-	 *
4896
-	 *  @param	string		$trigger		If defined, call also the trigger (for example COMPANY_MODIFY)
4897
-	 *  @param	User		$userused		Object user
4898
-	 *  @return int 						-1=error, O=did nothing, 1=OK
4899
-	 *  @see updateExtraField, setValueFrom
4900
-	 */
4901
-	function insertExtraFields($trigger='', $userused=null)
4902
-	{
4903
-		global $conf,$langs,$user;
4904
-
4905
-		if (empty($userused)) $userused=$user;
4906
-
4907
-		$error=0;
4908
-
4909
-		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
4910
-            return 0; // For avoid conflicts if trigger used
1804
+                return 1;
1805
+            }
1806
+            else
1807
+            {
1808
+                dol_syslog(get_class($this).'::setMulticurrencyCode Erreur '.$sql.' - '.$this->db->error());
1809
+                $this->error=$this->db->error();
1810
+                return -1;
1811
+            }
1812
+        }
1813
+        else
1814
+        {
1815
+            dol_syslog(get_class($this).'::setMulticurrencyCode, status of the object is incompatible');
1816
+            $this->error='Status of the object is incompatible '.$this->statut;
1817
+            return -2;
1818
+        }
1819
+    }
4911 1820
 
4912
-        if (! empty($this->array_options))
4913
-		{
4914
-			// Check parameters
4915
-			$langs->load('admin');
4916
-			require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
4917
-			$extrafields = new AlExtraFields($this->db);
4918
-            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
1821
+    /**
1822
+     *  Change the multicurrency rate
1823
+     *
1824
+     *  @param		double	$rate	multicurrency rate
1825
+     *  @param		int		$mode	mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency
1826
+     *  @return		int				>0 if OK, <0 if KO
1827
+     */
1828
+    function setMulticurrencyRate($rate, $mode=1)
1829
+    {
1830
+        dol_syslog(get_class($this).'::setMulticurrencyRate('.$id.')');
1831
+        if ($this->statut >= 0 || $this->element == 'societe')
1832
+        {
1833
+            $fieldname = 'multicurrency_tx';
4919 1834
 
4920
-			//Eliminate copied source object extra_fields that do not exist in target object
4921
-			$new_array_options=array();
4922
-			foreach ($this->array_options as $key => $value) {
4923
-				if (in_array(substr($key,8), array_keys($target_extrafields)))	// We remove the 'options_' from $key for test
4924
-					$new_array_options[$key] = $value;
4925
-				elseif (in_array($key, array_keys($target_extrafields)))		// We test on $key that does not contains the 'options_' prefix
4926
-					$new_array_options['options_'.$key] = $value;
4927
-			}
1835
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1836
+            $sql .= ' SET '.$fieldname.' = '.$rate;
1837
+            $sql .= ' WHERE rowid='.$this->id;
4928 1838
 
4929
-			foreach($new_array_options as $key => $value)
4930
-			{
4931
-			   	$attributeKey      = substr($key,8);   // Remove 'options_' prefix
4932
-			   	$attributeType     = $extrafields->attributes[$this->table_element]['type'][$attributeKey];
4933
-			   	$attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$attributeKey];
4934
-			   	$attributeParam    = $extrafields->attributes[$this->table_element]['param'][$attributeKey];
4935
-			   	$attributeRequired = $extrafields->attributes[$this->table_element]['required'][$attributeKey];
4936
-
4937
-			   	if ($attributeRequired)
4938
-			   	{
4939
-			   		$mandatorypb=false;
4940
-			   		if ($attributeType == 'link' && $this->array_options[$key] == '-1') $mandatorypb=true;
4941
-			   		if ($this->array_options[$key] === '') $mandatorypb=true;
4942
-			   		if ($mandatorypb)
4943
-			   		{
4944
-			   			dol_syslog($this->error);
4945
-			   			$this->errors[]=$langs->trans('ErrorFieldRequired', $attributeLabel);
4946
-			   			return -1;
4947
-			   		}
4948
-			   	}
4949
-
4950
-				//dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG);
4951
-				//dol_syslog("attributeType=".$attributeType, LOG_DEBUG);
4952
-
4953
-			   	switch ($attributeType)
4954
-			   	{
4955
-			   		case 'int':
4956
-			  			if (!is_numeric($value) && $value!='')
4957
-			   			{
4958
-			   				$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4959
-			   				return -1;
4960
-			  			}
4961
-			   			elseif ($value=='')
4962
-			   			{
4963
-			   				$new_array_options[$key] = null;
4964
-			   			}
4965
-			 			break;
4966
-					case 'double':
4967
-						$value = price2num($value);
4968
-						if (!is_numeric($value) && $value!='')
4969
-						{
4970
-							dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
4971
-							$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4972
-							return -1;
4973
-						}
4974
-						elseif ($value=='')
4975
-						{
4976
-							$new_array_options[$key] = null;
4977
-						}
4978
-						//dol_syslog("double value"." sur ".$attributeLabel."(".$value." is '".$attributeType."')", LOG_DEBUG);
4979
-						$new_array_options[$key] = $value;
4980
-						break;
4981
-			 		/*case 'select':	// Not required, we chosed value='0' for undefined values
4982
-             			if ($value=='-1')
4983
-             			{
4984
-             				$this->array_options[$key] = null;
4985
-             			}
4986
-             			break;*/
4987
-			   		case 'password':
4988
-			   			$algo='';
4989
-			   			if ($this->array_options[$key] != '' && is_array($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']))
4990
-			   			{
4991
-			   				// If there is an encryption choice, we use it to crypt data before insert
4992
-			   				$tmparrays = array_keys($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']);
4993
-			   				$algo=reset($tmparrays);
4994
-			   				if ($algo != '')
4995
-			   				{
4996
-			   					//global $action;		// $action may be 'create', 'update', 'update_extras'...
4997
-			   					//var_dump($action);
4998
-			   					//var_dump($this->oldcopy);exit;
4999
-			   					if (is_object($this->oldcopy))		// If this->oldcopy is not defined, we can't know if we change attribute or not, so we must keep value
5000
-			   					{
5001
-			   						//var_dump($this->oldcopy->array_options[$key]); var_dump($this->array_options[$key]);
5002
-				   					if ($this->array_options[$key] == $this->oldcopy->array_options[$key])	// If old value crypted in database is same than submited new value, it means we don't change it, so we don't update.
5003
-				   					{
5004
-				   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5005
-				   					}
5006
-									else
5007
-									{
5008
-										// var_dump($algo);
5009
-										$newvalue = dol_hash($this->array_options[$key], $algo);
5010
-										$new_array_options[$key] = $newvalue;
5011
-									}
5012
-			   					}
5013
-			   					else
5014
-			   					{
5015
-			   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5016
-			   					}
5017
-			   				}
5018
-			   			}
5019
-			   			else	// Common usage
5020
-			   			{
5021
-			   				$new_array_options[$key] = $this->array_options[$key];
5022
-			   			}
5023
-			   			break;
5024
-			   		case 'price':
5025
-						$new_array_options[$key] = price2num($this->array_options[$key]);
5026
-						break;
5027
-					case 'date':
5028
-						$new_array_options[$key] = $this->db->idate($this->array_options[$key]);
5029
-						break;
5030
-					case 'datetime':
5031
-						// If data is a string instead of a timestamp, we convert it
5032
-						if (! is_int($this->array_options[$key])) {
5033
-							$this->array_options[$key] = strtotime($this->array_options[$key]);
5034
-						}
5035
-						$new_array_options[$key] = $this->db->idate($this->array_options[$key]);
5036
-						break;
5037
-		   			case 'link':
5038
-						$param_list=array_keys($attributeParam['options']);
5039
-						// 0 : ObjectName
5040
-						// 1 : classPath
5041
-						$InfoFieldList = explode(":", $param_list[0]);
5042
-						dol_include_once($InfoFieldList[1]);
5043
-						if ($InfoFieldList[0] && class_exists($InfoFieldList[0]))
5044
-						{
5045
-							if ($value == '-1')	// -1 is key for no defined in combo list of objects
5046
-							{
5047
-								$new_array_options[$key]='';
5048
-							}
5049
-							elseif ($value)
5050
-							{
5051
-								$object = new $InfoFieldList[0]($this->db);
5052
-								if (is_numeric($value)) $res=$object->fetch($value);
5053
-								else $res=$object->fetch('',$value);
5054
-
5055
-								if ($res > 0) $new_array_options[$key]=$object->id;
5056
-								else
5057
-								{
5058
-									$this->error="Id/Ref '".$value."' for object '".$object->element."' not found";
5059
-									$this->db->rollback();
5060
-									return -1;
5061
-								}
5062
-							}
5063
-						}
5064
-						else
5065
-						{
5066
-							dol_syslog('Error bad setup of extrafield', LOG_WARNING);
5067
-						}
5068
-						break;
5069
-			   	}
5070
-			}
5071
-
5072
-			$this->db->begin();
1839
+            if ($this->db->query($sql))
1840
+            {
1841
+                $this->multicurrency_tx = $rate;
1842
+
1843
+                // Update line price
1844
+                if (!empty($this->lines))
1845
+                {
1846
+                    foreach ($this->lines as &$line)
1847
+                    {
1848
+                        if($mode == 1) {
1849
+                            $line->subprice = 0;
1850
+                        }
5073 1851
 
5074
-			$table_element = $this->table_element;
5075
-			if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
1852
+                        switch ($this->element) {
1853
+                            case 'propal':
1854
+                                $this->updateline(
1855
+                                    $line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1856
+                                    ($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1857
+                                    $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start,
1858
+                                    $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1859
+                                );
1860
+                                break;
1861
+                            case 'commande':
1862
+                                $this->updateline(
1863
+                                    $line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1864
+                                    $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->date_start, $line->date_end,
1865
+                                    $line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1866
+                                    $line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1867
+                                );
1868
+                                break;
1869
+                            case 'facture':
1870
+                                $this->updateline(
1871
+                                    $line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1872
+                                    $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits,
1873
+                                    $line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1874
+                                    $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit, $line->multicurrency_subprice
1875
+                                );
1876
+                                break;
1877
+                            case 'supplier_proposal':
1878
+                                $this->updateline(
1879
+                                    $line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1880
+                                    ($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1881
+                                    $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options,
1882
+                                    $line->ref_fourn, $line->multicurrency_subprice
1883
+                                );
1884
+                                break;
1885
+                            case 'order_supplier':
1886
+                                $this->updateline(
1887
+                                    $line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1888
+                                    $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false,
1889
+                                    $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1890
+                                );
1891
+                                break;
1892
+                            case 'invoice_supplier':
1893
+                                $this->updateline(
1894
+                                    $line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->tva_tx, $line->localtax1_tx,
1895
+                                    $line->localtax2_tx, $line->qty, 0, 'HT', $line->info_bits, $line->product_type, $line->remise_percent, false,
1896
+                                    $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1897
+                                );
1898
+                                break;
1899
+                            default:
1900
+                                dol_syslog(get_class($this).'::setMulticurrencyRate no updateline defined', LOG_DEBUG);
1901
+                                break;
1902
+                        }
1903
+                    }
1904
+                }
5076 1905
 
5077
-			$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
5078
-			dol_syslog(get_class($this)."::insertExtraFields delete", LOG_DEBUG);
5079
-			$this->db->query($sql_del);
1906
+                return 1;
1907
+            }
1908
+            else
1909
+            {
1910
+                dol_syslog(get_class($this).'::setMulticurrencyRate Erreur '.$sql.' - '.$this->db->error());
1911
+                $this->error=$this->db->error();
1912
+                return -1;
1913
+            }
1914
+        }
1915
+        else
1916
+        {
1917
+            dol_syslog(get_class($this).'::setMulticurrencyRate, status of the object is incompatible');
1918
+            $this->error='Status of the object is incompatible '.$this->statut;
1919
+            return -2;
1920
+        }
1921
+    }
5080 1922
 
5081
-			$sql = "INSERT INTO ".MAIN_DB_PREFIX.$table_element."_extrafields (fk_object";
5082
-			foreach($new_array_options as $key => $value)
5083
-			{
5084
-				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5085
-				// Add field of attribut
5086
-				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator
5087
-					$sql.=",".$attributeKey;
5088
-			}
5089
-			$sql .= ") VALUES (".$this->id;
5090
-
5091
-			foreach($new_array_options as $key => $value)
5092
-			{
5093
-				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5094
-				// Add field of attribute
5095
-				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator)
5096
-				{
5097
-					if ($new_array_options[$key] != '')
5098
-					{
5099
-						$sql.=",'".$this->db->escape($new_array_options[$key])."'";
5100
-					}
5101
-					else
5102
-					{
5103
-						$sql.=",null";
5104
-					}
5105
-				}
5106
-			}
5107
-			$sql.=")";
1923
+    /**
1924
+     *  Change the payments terms
1925
+     *
1926
+     *  @param		int		$id		Id of new payment terms
1927
+     *  @return		int				>0 if OK, <0 if KO
1928
+     */
1929
+    function setPaymentTerms($id)
1930
+    {
1931
+        dol_syslog(get_class($this).'::setPaymentTerms('.$id.')');
1932
+        if ($this->statut >= 0 || $this->element == 'societe')
1933
+        {
1934
+            // TODO uniformize field name
1935
+            $fieldname = 'fk_cond_reglement';
1936
+            if ($this->element == 'societe') $fieldname = 'cond_reglement';
1937
+            if (get_class($this) == 'Fournisseur') $fieldname = 'cond_reglement_supplier';
5108 1938
 
5109
-			dol_syslog(get_class($this)."::insertExtraFields insert", LOG_DEBUG);
5110
-			$resql = $this->db->query($sql);
5111
-			if (! $resql)
5112
-			{
5113
-				$this->error=$this->db->lasterror();
5114
-				$error++;
5115
-			}
1939
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1940
+            $sql .= ' SET '.$fieldname.' = '.$id;
1941
+            $sql .= ' WHERE rowid='.$this->id;
5116 1942
 
5117
-			if (! $error && $trigger)
5118
-			{
5119
-				// Call trigger
5120
-				$this->context=array('extrafieldaddupdate'=>1);
5121
-				$result=$this->call_trigger($trigger, $userused);
5122
-				if ($result < 0) $error++;
5123
-				// End call trigger
5124
-			}
5125
-
5126
-			if ($error)
5127
-			{
5128
-				$this->db->rollback();
5129
-				return -1;
5130
-			}
5131
-			else
5132
-			{
5133
-				$this->db->commit();
5134
-				return 1;
5135
-			}
5136
-		}
5137
-		else return 0;
5138
-	}
5139
-
5140
-	/**
5141
-	 *	Update an extra field value for the current object.
5142
-	 *  Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
5143
-	 *
5144
-	 *  @param  string      $key    		Key of the extrafield (without starting 'options_')
5145
-	 *  @param	string		$trigger		If defined, call also the trigger (for example COMPANY_MODIFY)
5146
-	 *  @param	User		$userused		Object user
5147
-	 *  @return int                 		-1=error, O=did nothing, 1=OK
5148
-	 *  @see setValueFrom, insertExtraFields
5149
-	 */
5150
-	function updateExtraField($key, $trigger=null, $userused=null)
5151
-	{
5152
-		global $conf,$langs,$user;
5153
-
5154
-		if (empty($userused)) $userused=$user;
5155
-
5156
-		$error=0;
5157
-
5158
-		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
5159
-            return 0; // For avoid conflicts if trigger used
1943
+            if ($this->db->query($sql))
1944
+            {
1945
+                $this->cond_reglement_id = $id;
1946
+                // for supplier
1947
+                if (get_class($this) == 'Fournisseur') $this->cond_reglement_supplier_id = $id;
1948
+                $this->cond_reglement = $id;	// for compatibility
1949
+                return 1;
1950
+            }
1951
+            else
1952
+            {
1953
+                dol_syslog(get_class($this).'::setPaymentTerms Erreur '.$sql.' - '.$this->db->error());
1954
+                $this->error=$this->db->error();
1955
+                return -1;
1956
+            }
1957
+        }
1958
+        else
1959
+        {
1960
+            dol_syslog(get_class($this).'::setPaymentTerms, status of the object is incompatible');
1961
+            $this->error='Status of the object is incompatible '.$this->statut;
1962
+            return -2;
1963
+        }
1964
+    }
5160 1965
 
5161
-        if (! empty($this->array_options) && isset($this->array_options["options_".$key]))
5162
-		{
5163
-			// Check parameters
5164
-			$langs->load('admin');
5165
-			require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
5166
-			$extrafields = new AlExtraFields($this->db);
5167
-            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
1966
+    /**
1967
+     *	Define delivery address
1968
+     *  @deprecated
1969
+     *
1970
+     *	@param      int		$id		Address id
1971
+     *	@return     int				<0 si ko, >0 si ok
1972
+     */
1973
+    function setDeliveryAddress($id)
1974
+    {
1975
+        $fieldname = 'fk_delivery_address';
1976
+        if ($this->element == 'delivery' || $this->element == 'shipping') $fieldname = 'fk_address';
5168 1977
 
5169
-			$value=$this->array_options["options_".$key];
1978
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ".$fieldname." = ".$id;
1979
+        $sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
5170 1980
 
5171
-			$attributeType     = $extrafields->attributes[$this->table_element]['type'][$key];
5172
-			$attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$key];
5173
-			$attributeParam    = $extrafields->attributes[$this->table_element]['param'][$key];
5174
-			$attributeRequired = $extrafields->attributes[$this->table_element]['required'][$key];
1981
+        if ($this->db->query($sql))
1982
+        {
1983
+            $this->fk_delivery_address = $id;
1984
+            return 1;
1985
+        }
1986
+        else
1987
+        {
1988
+            $this->error=$this->db->error();
1989
+            dol_syslog(get_class($this).'::setDeliveryAddress Erreur '.$sql.' - '.$this->error);
1990
+            return -1;
1991
+        }
1992
+    }
5175 1993
 
5176
-			//dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG);
5177
-			//dol_syslog("attributeType=".$attributeType, LOG_DEBUG);
5178 1994
 
5179
-			switch ($attributeType)
5180
-			{
5181
-				case 'int':
5182
-					if (!is_numeric($value) && $value!='')
5183
-					{
5184
-						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue",$attributeLabel);
5185
-						return -1;
5186
-					}
5187
-					elseif ($value=='')
5188
-					{
5189
-						$this->array_options["options_".$key] = null;
5190
-					}
5191
-					break;
5192
-				case 'double':
5193
-					$value = price2num($value);
5194
-					if (!is_numeric($value) && $value!='')
5195
-					{
5196
-						dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
5197
-						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5198
-						return -1;
5199
-					}
5200
-					elseif ($value=='')
5201
-					{
5202
-						$this->array_options["options_".$key] = null;
5203
-					}
5204
-					//dol_syslog("double value"." sur ".$attributeLabel."(".$value." is '".$attributeType."')", LOG_DEBUG);
5205
-					$this->array_options["options_".$key] = $value;
5206
-					break;
5207
-			 	/*case 'select':	// Not required, we chosed value='0' for undefined values
5208
-             		if ($value=='-1')
5209
-             		{
5210
-             			$this->array_options[$key] = null;
5211
-             		}
5212
-             		break;*/
5213
-				case 'price':
5214
-					$this->array_options["options_".$key] = price2num($this->array_options["options_".$key]);
5215
-					break;
5216
-				case 'date':
5217
-					$this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5218
-					break;
5219
-				case 'datetime':
5220
-					$this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5221
-					break;
5222
-				case 'link':
5223
-					$param_list=array_keys($attributeParam['options']);
5224
-					// 0 : ObjectName
5225
-					// 1 : classPath
5226
-					$InfoFieldList = explode(":", $param_list[0]);
5227
-					dol_include_once($InfoFieldList[1]);
5228
-					if ($value)
5229
-					{
5230
-						$object = new $InfoFieldList[0]($this->db);
5231
-						$object->fetch(0,$value);
5232
-						$this->array_options["options_".$key]=$object->id;
5233
-					}
5234
-					break;
5235
-			}
5236
-
5237
-			$this->db->begin();
5238
-			$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key."='".$this->db->escape($this->array_options["options_".$key])."'";
5239
-			$sql .= " WHERE fk_object = ".$this->id;
5240
-			$resql = $this->db->query($sql);
5241
-			if (! $resql)
5242
-			{
5243
-				$error++;
5244
-				$this->error=$this->db->lasterror();
5245
-			}
1995
+    /**
1996
+     *  Change the shipping method
1997
+     *
1998
+     *  @param      int     $shipping_method_id     Id of shipping method
1999
+     *  @param      bool    $notrigger              false=launch triggers after, true=disable triggers
2000
+     *  @param      User	$userused               Object user
2001
+     *
2002
+     *  @return     int              1 if OK, 0 if KO
2003
+     */
2004
+    function setShippingMethod($shipping_method_id, $notrigger=false, $userused=null)
2005
+    {
2006
+        global $user;
5246 2007
 
5247
-			if (! $error && $trigger)
5248
-			{
5249
-				// Call trigger
5250
-				$this->context=array('extrafieldupdate'=>1);
5251
-				$result=$this->call_trigger($trigger, $userused);
5252
-				if ($result < 0) $error++;
5253
-				// End call trigger
5254
-			}
5255
-
5256
-			if ($error)
5257
-			{
5258
-				dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR);
5259
-				$this->db->rollback();
5260
-				return -1;
5261
-			}
5262
-			else
5263
-			{
5264
-				$this->db->commit();
5265
-				return 1;
5266
-			}
5267
-		}
5268
-		else return 0;
5269
-	}
5270
-
5271
-
5272
-	/**
5273
-	 * Return HTML string to put an input field into a page
5274
-	 * Code very similar with showInputField of extra fields
5275
-	 *
5276
-	 * @param  array   		$val	       Array of properties for field to show
5277
-	 * @param  string  		$key           Key of attribute
5278
-	 * @param  string  		$value         Preselected value to show (for date type it must be in timestamp format, for amount or price it must be a php numeric value)
5279
-	 * @param  string  		$moreparam     To add more parameters on html input tag
5280
-	 * @param  string  		$keysuffix     Prefix string to add into name and id of field (can be used to avoid duplicate names)
5281
-	 * @param  string  		$keyprefix     Suffix string to add into name and id of field (can be used to avoid duplicate names)
5282
-	 * @param  string|int		$morecss       Value for css to define style/length of field. May also be a numeric.
5283
-	 * @return string
5284
-	 */
5285
-	function showInputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $morecss=0)
5286
-	{
5287
-		global $conf,$langs,$form;
5288
-
5289
-		if (! is_object($form))
5290
-		{
5291
-			require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5292
-			$form=new Form($this->db);
5293
-		}
5294
-
5295
-		$val=$this->fields[$key];
5296
-
5297
-		$out='';
5298
-        $type='';
5299
-        $param = array();
5300
-        $param['options']=array();
5301
-        $size =$this->fields[$key]['size'];
5302
-        // Because we work on extrafields
5303
-        if(preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)){
5304
-            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5305
-            $type ='link';
5306
-        } elseif(preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) {
5307
-            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5308
-            $type ='link';
5309
-        } elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
5310
-            $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N');
5311
-            $type ='sellist';
5312
-        } elseif(preg_match('/varchar\((\d+)\)/', $val['type'],$reg)) {
5313
-            $param['options']=array();
5314
-            $type ='varchar';
5315
-            $size=$reg[1];
5316
-        } elseif(preg_match('/varchar/', $val['type'])) {
5317
-            $param['options']=array();
5318
-            $type ='varchar';
5319
-        } elseif(is_array($this->fields[$key]['arrayofkeyval'])) {
5320
-            $param['options']=$this->fields[$key]['arrayofkeyval'];
5321
-            $type ='select';
5322
-        } else {
5323
-            $param['options']=array();
5324
-            $type =$this->fields[$key]['type'];
5325
-        }
2008
+        if (empty($userused)) $userused=$user;
5326 2009
 
5327
-		$label=$this->fields[$key]['label'];
5328
-		//$elementtype=$this->fields[$key]['elementtype'];	// Seems not used
5329
-		$default=$this->fields[$key]['default'];
5330
-		$computed=$this->fields[$key]['computed'];
5331
-		$unique=$this->fields[$key]['unique'];
5332
-		$required=$this->fields[$key]['required'];
2010
+        $error = 0;
5333 2011
 
5334
-		$langfile=$this->fields[$key]['langfile'];
5335
-		$list=$this->fields[$key]['list'];
5336
-		$hidden=abs($this->fields[$key]['visible'])!=1?1:0;
2012
+        if (! $this->table_element) {
2013
+            dol_syslog(get_class($this)."::setShippingMethod was called on objet with property table_element not defined",LOG_ERR);
2014
+            return -1;
2015
+        }
5337 2016
 
5338
-		$objectid = $this->id;
2017
+        $this->db->begin();
5339 2018
 
2019
+        if ($shipping_method_id<0) $shipping_method_id='NULL';
2020
+        dol_syslog(get_class($this).'::setShippingMethod('.$shipping_method_id.')');
5340 2021
 
5341
-		if ($computed)
5342
-		{
5343
-			if (! preg_match('/^search_/', $keyprefix)) return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5344
-			else return '';
5345
-		}
2022
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2023
+        $sql.= " SET fk_shipping_method = ".$shipping_method_id;
2024
+        $sql.= " WHERE rowid=".$this->id;
2025
+        $resql = $this->db->query($sql);
2026
+        if (! $resql) {
2027
+            dol_syslog(get_class($this).'::setShippingMethod Error ', LOG_DEBUG);
2028
+            $this->error = $this->db->lasterror();
2029
+            $error++;
2030
+        } else {
2031
+            if (!$notrigger)
2032
+            {
2033
+                // Call trigger
2034
+                $this->context=array('shippingmethodupdate'=>1);
2035
+                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2036
+                if ($result < 0) $error++;
2037
+                // End call trigger
2038
+            }
2039
+        }
2040
+        if ($error)
2041
+        {
2042
+            $this->db->rollback();
2043
+            return -1;
2044
+        } else {
2045
+            $this->shipping_method_id = ($shipping_method_id=='NULL')?null:$shipping_method_id;
2046
+            $this->db->commit();
2047
+            return 1;
2048
+        }
2049
+    }
5346 2050
 
5347 2051
 
5348
-		// Use in priority showsize from parameters, then $val['css'] then autodefine
5349
-		if (empty($morecss) && ! empty($val['css']))
5350
-		{
5351
-			$showsize = $val['css'];
5352
-		}
5353
-		if (empty($morecss))
5354
-		{
5355
-			if ($type == 'date')
5356
-			{
5357
-				$morecss = 'minwidth100imp';
5358
-			}
5359
-			elseif ($type == 'datetime')
5360
-			{
5361
-				$morecss = 'minwidth200imp';
5362
-			}
5363
-			elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5364
-			{
5365
-				$morecss = 'maxwidth75';
5366
-                        }elseif ($type == 'url')
5367
-			{
5368
-				$morecss='minwidth400';
5369
-			}
5370
-			elseif ($type == 'boolean')
5371
-			{
5372
-				$morecss='';
5373
-			}
5374
-			else
5375
-			{
5376
-				if (round($size) < 12)
5377
-				{
5378
-					$morecss = 'minwidth100';
5379
-				}
5380
-				else if (round($size) <= 48)
5381
-				{
5382
-					$morecss = 'minwidth200';
5383
-				}
5384
-				else
5385
-				{
5386
-					$morecss = 'minwidth400';
5387
-				}
5388
-			}
5389
-		}
5390
-
5391
-		if (in_array($type,array('date','datetime')))
5392
-		{
5393
-			$tmp=explode(',',$size);
5394
-			$newsize=$tmp[0];
5395
-
5396
-			$showtime = in_array($type,array('datetime')) ? 1 : 0;
5397
-
5398
-			// Do not show current date when field not required (see selectDate() method)
5399
-			if (!$required && $value == '') $value = '-1';
5400
-
5401
-			// TODO Must also support $moreparam
5402
-			$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
5403
-		}
5404
-		elseif (in_array($type,array('int','integer')))
5405
-		{
5406
-			$tmp=explode(',',$size);
5407
-			$newsize=$tmp[0];
5408
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5409
-		}
5410
-		elseif (preg_match('/varchar/', $type))
5411
-		{
5412
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5413
-		}
5414
-		elseif (in_array($type, array('mail', 'phone', 'url')))
5415
-		{
5416
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5417
-		}
5418
-		elseif ($type == 'text')
5419
-		{
5420
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5421
-			{
5422
-				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5423
-				$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,false,ROWS_5,'90%');
5424
-				$out=$doleditor->Create(1);
5425
-			}
5426
-			else
5427
-			{
5428
-				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5429
-			}
5430
-		}
5431
-		elseif ($type == 'html')
5432
-		{
5433
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5434
-			{
5435
-				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5436
-				$doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
5437
-                $out=$doleditor->Create(1);
5438
-			}
5439
-			else
5440
-			{
5441
-				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5442
-			}
5443
-		}
5444
-		elseif ($type == 'boolean')
5445
-		{
5446
-			$checked='';
5447
-			if (!empty($value)) {
5448
-				$checked=' checked value="1" ';
5449
-			} else {
5450
-				$checked=' value="1" ';
5451
-			}
5452
-			$out='<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
5453
-		}
5454
-		elseif ($type == 'price')
5455
-		{
5456
-			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5457
-				$value=price($value);
5458
-			}
5459
-			$out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ' . $langs->getCurrencySymbol(Globals::$conf->currency);
5460
-        }
5461
-		elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5462
-		{
5463
-			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5464
-				$value=price($value);
5465
-			}
5466
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
5467
-		}
5468
-		elseif ($type == 'select')
5469
-		{
5470
-			$out = '';
5471
-			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5472
-				include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5473
-				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5474
-			}
5475
-
5476
-			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5477
-                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1))$out.='<option value="0">&nbsp;</option>';
5478
-			foreach ($param['options'] as $key => $val)
5479
-			{
5480
-				if ((string) $key == '') continue;
5481
-				list($val, $parent) = explode('|', $val);
5482
-				$out.='<option value="'.$key.'"';
5483
-				$out.= (((string) $value == (string) $key)?' selected':'');
5484
-				$out.= (!empty($parent)?' parent="'.$parent.'"':'');
5485
-				$out.='>'.$val.'</option>';
5486
-			}
5487
-			$out.='</select>';
5488
-		}
5489
-		elseif ($type == 'sellist')
5490
-		{
5491
-			$out = '';
5492
-			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5493
-				include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5494
-				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5495
-			}
5496
-
5497
-			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5498
-			if (is_array($param['options']))
5499
-			{
5500
-				$param_list=array_keys($param['options']);
5501
-				$InfoFieldList = explode(":", $param_list[0]);
5502
-				$parentName='';
5503
-				$parentField='';
5504
-				// 0 : tableName
5505
-				// 1 : label field name
5506
-				// 2 : key fields name (if differ of rowid)
5507
-				// 3 : key field parent (for dependent lists)
5508
-				// 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5509
-				$keyList=(empty($InfoFieldList[2])?'rowid':$InfoFieldList[2].' as rowid');
5510
-
5511
-
5512
-				if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4]))
5513
-				{
5514
-					if (strpos($InfoFieldList[4], 'extra.') !== false)
5515
-					{
5516
-						$keyList='main.'.$InfoFieldList[2].' as rowid';
5517
-					} else {
5518
-						$keyList=$InfoFieldList[2].' as rowid';
5519
-					}
5520
-				}
5521
-				if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3]))
5522
-				{
5523
-					list($parentName, $parentField) = explode('|', $InfoFieldList[3]);
5524
-					$keyList.= ', '.$parentField;
5525
-				}
2052
+    /**
2053
+     *  Change the warehouse
2054
+     *
2055
+     *  @param      int     $warehouse_id     Id of warehouse
2056
+     *  @return     int              1 if OK, 0 if KO
2057
+     */
2058
+    function setWarehouse($warehouse_id)
2059
+    {
2060
+        if (! $this->table_element) {
2061
+            dol_syslog(get_class($this)."::setWarehouse was called on objet with property table_element not defined",LOG_ERR);
2062
+            return -1;
2063
+        }
2064
+        if ($warehouse_id<0) $warehouse_id='NULL';
2065
+        dol_syslog(get_class($this).'::setWarehouse('.$warehouse_id.')');
5526 2066
 
5527
-				$fields_label = explode('|',$InfoFieldList[1]);
5528
-				if (is_array($fields_label))
5529
-				{
5530
-					$keyList .=', ';
5531
-					$keyList .= implode(', ', $fields_label);
5532
-				}
2067
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2068
+        $sql.= " SET fk_warehouse = ".$warehouse_id;
2069
+        $sql.= " WHERE rowid=".$this->id;
5533 2070
 
5534
-				$sqlwhere='';
5535
-				$sql = 'SELECT '.$keyList;
5536
-				$sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
5537
-				if (!empty($InfoFieldList[4]))
5538
-				{
5539
-					// can use SELECT request
5540
-					if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5541
-						$InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5542
-					}
5543
-
5544
-					// current object id can be use into filter
5545
-					if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5546
-						$InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5547
-					} else {
5548
-						$InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5549
-					}
5550
-					//We have to join on extrafield table
5551
-					if (strpos($InfoFieldList[4], 'extra')!==false)
5552
-					{
5553
-						$sql.= ' as main, '.MAIN_DB_PREFIX .$InfoFieldList[0].'_extrafields as extra';
5554
-						$sqlwhere.= ' WHERE extra.fk_object=main.'.$InfoFieldList[2]. ' AND '.$InfoFieldList[4];
5555
-					}
5556
-					else
5557
-					{
5558
-						$sqlwhere.= ' WHERE '.$InfoFieldList[4];
5559
-					}
5560
-				}
5561
-				else
5562
-				{
5563
-					$sqlwhere.= ' WHERE 1=1';
5564
-				}
5565
-				// Some tables may have field, some other not. For the moment we disable it.
5566
-				if (in_array($InfoFieldList[0],array('tablewithentity')))
5567
-				{
5568
-					$sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5569
-                }
5570
-				$sql.=$sqlwhere;
5571
-				//print $sql;
2071
+        if ($this->db->query($sql)) {
2072
+            $this->warehouse_id = ($warehouse_id=='NULL')?null:$warehouse_id;
2073
+            return 1;
2074
+        } else {
2075
+            dol_syslog(get_class($this).'::setWarehouse Error ', LOG_DEBUG);
2076
+            $this->error=$this->db->error();
2077
+            return 0;
2078
+        }
2079
+    }
5572 2080
 
5573
-				$sql .= ' ORDER BY ' . implode(', ', $fields_label);
5574 2081
 
5575
-				dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG);
5576
-				$resql = $this->db->query($sql);
5577
-				if ($resql)
5578
-				{
5579
-					$out.='<option value="0">&nbsp;</option>';
5580
-					$num = $this->db->num_rows($resql);
5581
-					$i = 0;
5582
-					while ($i < $num)
5583
-					{
5584
-						$labeltoshow='';
5585
-						$obj = $this->db->fetch_object($resql);
5586
-
5587
-						// Several field into label (eq table:code|libelle:rowid)
5588
-						$notrans = false;
5589
-						$fields_label = explode('|',$InfoFieldList[1]);
5590
-						if (is_array($fields_label))
5591
-						{
5592
-							$notrans = true;
5593
-							foreach ($fields_label as $field_toshow)
5594
-							{
5595
-								$labeltoshow.= $obj->$field_toshow.' ';
5596
-							}
5597
-						}
5598
-						else
5599
-						{
5600
-							$labeltoshow=$obj->{$InfoFieldList[1]};
5601
-						}
5602
-						$labeltoshow=dol_trunc($labeltoshow,45);
5603
-
5604
-						if ($value == $obj->rowid)
5605
-						{
5606
-							foreach ($fields_label as $field_toshow)
5607
-							{
5608
-								$translabel=$langs->trans($obj->$field_toshow);
5609
-								if ($translabel!=$obj->$field_toshow) {
5610
-									$labeltoshow=dol_trunc($translabel,18).' ';
5611
-								}else {
5612
-									$labeltoshow=dol_trunc($obj->$field_toshow,18).' ';
5613
-								}
5614
-							}
5615
-							$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5616
-						}
5617
-						else
5618
-						{
5619
-							if (! $notrans)
5620
-							{
5621
-								$translabel=$langs->trans($obj->{$InfoFieldList[1]});
5622
-								if ($translabel!=$obj->{$InfoFieldList[1]}) {
5623
-									$labeltoshow=dol_trunc($translabel,18);
5624
-								}
5625
-								else {
5626
-									$labeltoshow=dol_trunc($obj->{$InfoFieldList[1]},18);
5627
-								}
5628
-							}
5629
-							if (empty($labeltoshow)) $labeltoshow='(not defined)';
5630
-							if ($value==$obj->rowid)
5631
-							{
5632
-								$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5633
-							}
2082
+    /**
2083
+     *		Set last model used by doc generator
2084
+     *
2085
+     *		@param		User	$user		User object that make change
2086
+     *		@param		string	$modelpdf	Modele name
2087
+     *		@return		int					<0 if KO, >0 if OK
2088
+     */
2089
+    function setDocModel($user, $modelpdf)
2090
+    {
2091
+        if (! $this->table_element)
2092
+        {
2093
+            dol_syslog(get_class($this)."::setDocModel was called on objet with property table_element not defined",LOG_ERR);
2094
+            return -1;
2095
+        }
5634 2096
 
5635
-							if (!empty($InfoFieldList[3]) && $parentField)
5636
-							{
5637
-								$parent = $parentName.':'.$obj->{$parentField};
5638
-							}
2097
+        $newmodelpdf=dol_trunc($modelpdf,255);
5639 2098
 
5640
-							$out.='<option value="'.$obj->rowid.'"';
5641
-							$out.= ($value==$obj->rowid?' selected':'');
5642
-							$out.= (!empty($parent)?' parent="'.$parent.'"':'');
5643
-							$out.='>'.$labeltoshow.'</option>';
5644
-						}
2099
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2100
+        $sql.= " SET model_pdf = '".$this->db->escape($newmodelpdf)."'";
2101
+        $sql.= " WHERE rowid = ".$this->id;
2102
+        // if ($this->element == 'facture') $sql.= " AND fk_statut < 2";
2103
+        // if ($this->element == 'propal')  $sql.= " AND fk_statut = 0";
5645 2104
 
5646
-						$i++;
5647
-					}
5648
-					$this->db->free($resql);
5649
-				}
5650
-				else {
5651
-					print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.<br>';
5652
-				}
5653
-			}
5654
-			$out.='</select>';
5655
-		}
5656
-		elseif ($type == 'checkbox')
5657
-		{
5658
-			$value_arr=explode(',',$value);
5659
-			$out=$form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options'])?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
5660
-		}
5661
-		elseif ($type == 'radio')
5662
-		{
5663
-			$out='';
5664
-			foreach ($param['options'] as $keyopt => $val)
5665
-			{
5666
-				$out.='<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'');
5667
-				$out.=' value="'.$keyopt.'"';
5668
-				$out.=' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
5669
-				$out.= ($value==$keyopt?'checked':'');
5670
-				$out.='/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
5671
-			}
5672
-		}
5673
-		elseif ($type == 'chkbxlst')
5674
-		{
5675
-			if (is_array($value)) {
5676
-				$value_arr = $value;
5677
-			}
5678
-			else {
5679
-				$value_arr = explode(',', $value);
5680
-			}
5681
-
5682
-			if (is_array($param['options'])) {
5683
-				$param_list = array_keys($param['options']);
5684
-				$InfoFieldList = explode(":", $param_list[0]);
5685
-				$parentName='';
5686
-				$parentField='';
5687
-				// 0 : tableName
5688
-				// 1 : label field name
5689
-				// 2 : key fields name (if differ of rowid)
5690
-				// 3 : key field parent (for dependent lists)
5691
-				// 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5692
-				$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
5693
-
5694
-				if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) {
5695
-					list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]);
5696
-					$keyList .= ', ' . $parentField;
5697
-				}
5698
-				if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4])) {
5699
-					if (strpos($InfoFieldList[4], 'extra.') !== false) {
5700
-						$keyList = 'main.' . $InfoFieldList[2] . ' as rowid';
5701
-					} else {
5702
-						$keyList = $InfoFieldList[2] . ' as rowid';
5703
-					}
5704
-				}
2105
+        dol_syslog(get_class($this)."::setDocModel", LOG_DEBUG);
2106
+        $resql=$this->db->query($sql);
2107
+        if ($resql)
2108
+        {
2109
+            $this->modelpdf=$modelpdf;
2110
+            return 1;
2111
+        }
2112
+        else
2113
+        {
2114
+            dol_print_error($this->db);
2115
+            return 0;
2116
+        }
2117
+    }
5705 2118
 
5706
-				$fields_label = explode('|', $InfoFieldList[1]);
5707
-				if (is_array($fields_label)) {
5708
-					$keyList .= ', ';
5709
-					$keyList .= implode(', ', $fields_label);
5710
-				}
5711 2119
 
5712
-				$sqlwhere = '';
5713
-				$sql = 'SELECT ' . $keyList;
5714
-				$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
5715
-				if (! empty($InfoFieldList[4])) {
5716
-
5717
-					// can use SELECT request
5718
-					if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5719
-						$InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5720
-					}
5721
-
5722
-					// current object id can be use into filter
5723
-					if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5724
-						$InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5725
-					} else {
5726
-						$InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5727
-					}
5728
-
5729
-					// We have to join on extrafield table
5730
-					if (strpos($InfoFieldList[4], 'extra') !== false) {
5731
-						$sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList[0] . '_extrafields as extra';
5732
-						$sqlwhere .= ' WHERE extra.fk_object=main.' . $InfoFieldList[2] . ' AND ' . $InfoFieldList[4];
5733
-					} else {
5734
-						$sqlwhere .= ' WHERE ' . $InfoFieldList[4];
5735
-					}
5736
-				} else {
5737
-					$sqlwhere .= ' WHERE 1=1';
5738
-				}
5739
-				// Some tables may have field, some other not. For the moment we disable it.
5740
-				if (in_array($InfoFieldList[0], array ('tablewithentity')))
5741
-				{
5742
-					$sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5743
-                }
5744
-				// $sql.=preg_replace('/^ AND /','',$sqlwhere);
5745
-				// print $sql;
5746
-
5747
-				$sql .= $sqlwhere;
5748
-				dol_syslog(get_class($this) . '::showInputField type=chkbxlst',LOG_DEBUG);
5749
-				$resql = $this->db->query($sql);
5750
-				if ($resql) {
5751
-					$num = $this->db->num_rows($resql);
5752
-					$i = 0;
5753
-
5754
-					$data=array();
5755
-
5756
-					while ( $i < $num ) {
5757
-						$labeltoshow = '';
5758
-						$obj = $this->db->fetch_object($resql);
5759
-
5760
-						$notrans = false;
5761
-						// Several field into label (eq table:code|libelle:rowid)
5762
-						$fields_label = explode('|', $InfoFieldList[1]);
5763
-						if (is_array($fields_label)) {
5764
-							$notrans = true;
5765
-							foreach ( $fields_label as $field_toshow ) {
5766
-								$labeltoshow .= $obj->$field_toshow . ' ';
5767
-							}
5768
-						} else {
5769
-							$labeltoshow = $obj->{$InfoFieldList[1]};
5770
-						}
5771
-						$labeltoshow = dol_trunc($labeltoshow, 45);
5772
-
5773
-						if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5774
-							foreach ( $fields_label as $field_toshow ) {
5775
-								$translabel = $langs->trans($obj->$field_toshow);
5776
-								if ($translabel != $obj->$field_toshow) {
5777
-									$labeltoshow = dol_trunc($translabel, 18) . ' ';
5778
-								} else {
5779
-									$labeltoshow = dol_trunc($obj->$field_toshow, 18) . ' ';
5780
-								}
5781
-							}
2120
+    /**
2121
+     *  Change the bank account
2122
+     *
2123
+     *  @param		int		$fk_account		Id of bank account
2124
+     *  @param      bool    $notrigger      false=launch triggers after, true=disable triggers
2125
+     *  @param      User	$userused		Object user
2126
+     *  @return		int				1 if OK, 0 if KO
2127
+     */
2128
+    function setBankAccount($fk_account, $notrigger=false, $userused=null)
2129
+    {
2130
+        global $user;
5782 2131
 
5783
-							$data[$obj->rowid]=$labeltoshow;
5784
-						} else {
5785
-							if (! $notrans) {
5786
-								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
5787
-								if ($translabel != $obj->{$InfoFieldList[1]}) {
5788
-									$labeltoshow = dol_trunc($translabel, 18);
5789
-								} else {
5790
-									$labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
5791
-								}
5792
-							}
5793
-							if (empty($labeltoshow))
5794
-								$labeltoshow = '(not defined)';
2132
+        if (empty($userused)) $userused=$user;
5795 2133
 
5796
-								if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5797
-									$data[$obj->rowid]=$labeltoshow;
5798
-								}
2134
+        $error = 0;
5799 2135
 
5800
-								if (! empty($InfoFieldList[3]) && $parentField) {
5801
-									$parent = $parentName . ':' . $obj->{$parentField};
5802
-								}
2136
+        if (! $this->table_element) {
2137
+            dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined",LOG_ERR);
2138
+            return -1;
2139
+        }
2140
+        $this->db->begin();
5803 2141
 
5804
-								$data[$obj->rowid]=$labeltoshow;
5805
-						}
2142
+        if ($fk_account<0) $fk_account='NULL';
2143
+        dol_syslog(get_class($this).'::setBankAccount('.$fk_account.')');
5806 2144
 
5807
-						$i ++;
5808
-					}
5809
-					$this->db->free($resql);
2145
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2146
+        $sql.= " SET fk_account = ".$fk_account;
2147
+        $sql.= " WHERE rowid=".$this->id;
5810 2148
 
5811
-					$out=$form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
5812
-				} else {
5813
-					print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
5814
-				}
5815
-			}
5816
-		}
5817
-		elseif ($type == 'link')
5818
-		{
5819
-			$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
5820
-			$showempty=(($required && $default != '')?0:1);
5821
-			$out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
5822
-			if (Globals::$conf->global->MAIN_FEATURES_LEVEL >= 2) {
5823
-            			list($class,$classfile)=explode(':',$param_list[0]);
5824
-            			if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php',1);
5825
-            			else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php',1);
5826
-            			$out.='<a class="butActionNew" href="'.$url_path.'?action=create&backtopage='.$_SERVER['PHP_SELF'].'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5827
-            			// TODO Add Javascript code to add input fields contents to new elements urls
5828
-			}
5829
-		}
5830
-		elseif ($type == 'password')
5831
-		{
5832
-			// If prefix is 'search_', field is used as a filter, we use a common text field.
5833
-			$out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
5834
-		}
5835
-		elseif ($type == 'array')
5836
-		{
5837
-			$newval = $val;
5838
-			$newval['type'] = 'varchar(256)';
5839
-
5840
-			$out='';
5841
-
5842
-			$inputs = array();
5843
-			if(! empty($value)) {
5844
-				foreach($value as $option) {
5845
-					$out.= '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5846
-					$out.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', $option, $moreparam, '', '', $showsize).'<br></span>';
5847
-				}
5848
-			}
2149
+        $resql = $this->db->query($sql);
2150
+        if (! $resql)
2151
+        {
2152
+            dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error());
2153
+            $this->error = $this->db->lasterror();
2154
+            $error++;
2155
+        }
2156
+        else
2157
+        {
2158
+            if (!$notrigger)
2159
+            {
2160
+                // Call trigger
2161
+                $this->context=array('bankaccountupdate'=>1);
2162
+                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2163
+                if ($result < 0) $error++;
2164
+                // End call trigger
2165
+            }
2166
+        }
2167
+        if ($error)
2168
+        {
2169
+            $this->db->rollback();
2170
+            return -1;
2171
+        }
2172
+        else
2173
+        {
2174
+            $this->fk_account = ($fk_account=='NULL')?null:$fk_account;
2175
+            $this->db->commit();
2176
+            return 1;
2177
+        }
2178
+    }
5849 2179
 
5850
-			$out.= '<a id="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_add" href="javascript:;"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5851 2180
 
5852
-			$newInput = '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5853
-			$newInput.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', '', $moreparam, '', '', $showsize).'<br></span>';
2181
+    // TODO: Move line related operations to CommonObjectLine?
5854 2182
 
5855
-			if (!empty(Globals::$conf->use_javascript_ajax)) {
5856
-                $out.= '
5857
-					<script type="text/javascript">
5858
-					$(document).ready(function() {
5859
-						$("a#'.dol_escape_js($keyprefix.$key.$keysuffix).'_add").click(function() {
5860
-							$("'.dol_escape_js($newInput).'").insertBefore(this);
5861
-						});
2183
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2184
+    /**
2185
+     *  Save a new position (field rang) for details lines.
2186
+     *  You can choose to set position for lines with already a position or lines without any position defined.
2187
+     *
2188
+     * 	@param		boolean		$renum			   True to renum all already ordered lines, false to renum only not already ordered lines.
2189
+     * 	@param		string		$rowidorder		   ASC or DESC
2190
+     * 	@param		boolean		$fk_parent_line    Table with fk_parent_line field or not
2191
+     * 	@return		int                            <0 if KO, >0 if OK
2192
+     */
2193
+    function line_order($renum=false, $rowidorder='ASC', $fk_parent_line=true)
2194
+    {
2195
+        // phpcs:enable
2196
+        if (! $this->table_element_line)
2197
+        {
2198
+            dol_syslog(get_class($this)."::line_order was called on objet with property table_element_line not defined",LOG_ERR);
2199
+            return -1;
2200
+        }
2201
+        if (! $this->fk_element)
2202
+        {
2203
+            dol_syslog(get_class($this)."::line_order was called on objet with property fk_element not defined",LOG_ERR);
2204
+            return -1;
2205
+        }
2206
+
2207
+        // Count number of lines to reorder (according to choice $renum)
2208
+        $nl=0;
2209
+        $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2210
+        $sql.= ' WHERE '.$this->fk_element.'='.$this->id;
2211
+        if (! $renum) $sql.= ' AND rang = 0';
2212
+        if ($renum) $sql.= ' AND rang <> 0';
2213
+
2214
+        dol_syslog(get_class($this)."::line_order", LOG_DEBUG);
2215
+        $resql = $this->db->query($sql);
2216
+        if ($resql)
2217
+        {
2218
+            $row = $this->db->fetch_row($resql);
2219
+            $nl = $row[0];
2220
+        }
2221
+        else dol_print_error($this->db);
2222
+        if ($nl > 0)
2223
+        {
2224
+            // The goal of this part is to reorder all lines, with all children lines sharing the same
2225
+            // counter that parents.
2226
+            $rows=array();
2227
+
2228
+            // We first search all lines that are parent lines (for multilevel details lines)
2229
+            $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2230
+            $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2231
+            if ($fk_parent_line) $sql.= ' AND fk_parent_line IS NULL';
2232
+            $sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
2233
+
2234
+            dol_syslog(get_class($this)."::line_order search all parent lines", LOG_DEBUG);
2235
+            $resql = $this->db->query($sql);
2236
+            if ($resql)
2237
+            {
2238
+                $i=0;
2239
+                $num = $this->db->num_rows($resql);
2240
+                while ($i < $num)
2241
+                {
2242
+                    $row = $this->db->fetch_row($resql);
2243
+                    $rows[] = $row[0];	// Add parent line into array rows
2244
+                    $childrens = $this->getChildrenOfLine($row[0]);
2245
+                    if (! empty($childrens))
2246
+                    {
2247
+                        foreach($childrens as $child)
2248
+                        {
2249
+                            array_push($rows, $child);
2250
+                        }
2251
+                    }
2252
+                    $i++;
2253
+                }
2254
+
2255
+                // Now we set a new number for each lines (parent and children with children included into parent tree)
2256
+                if (! empty($rows))
2257
+                {
2258
+                    foreach($rows as $key => $row)
2259
+                    {
2260
+                        $this->updateRangOfLine($row, ($key+1));
2261
+                    }
2262
+                }
2263
+            }
2264
+            else
2265
+            {
2266
+                dol_print_error($this->db);
2267
+            }
2268
+        }
2269
+        return 1;
2270
+    }
2271
+
2272
+    /**
2273
+     * 	Get children of line
2274
+     *
2275
+     * 	@param	int		$id		Id of parent line
2276
+     * 	@return	array			Array with list of children lines id
2277
+     */
2278
+    function getChildrenOfLine($id)
2279
+    {
2280
+        $rows=array();
2281
+
2282
+        $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2283
+        $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2284
+        $sql.= ' AND fk_parent_line = '.$id;
2285
+        $sql.= ' ORDER BY rang ASC';
2286
+
2287
+        dol_syslog(get_class($this)."::getChildrenOfLine search children lines for line ".$id."", LOG_DEBUG);
2288
+        $resql = $this->db->query($sql);
2289
+        if ($resql)
2290
+        {
2291
+            $i=0;
2292
+            $num = $this->db->num_rows($resql);
2293
+            while ($i < $num)
2294
+            {
2295
+                $row = $this->db->fetch_row($resql);
2296
+                $rows[$i] = $row[0];
2297
+                $i++;
2298
+            }
2299
+        }
2300
+
2301
+        return $rows;
2302
+    }
2303
+
2304
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2305
+    /**
2306
+     * 	Update a line to have a lower rank
2307
+     *
2308
+     * 	@param 	int			$rowid				Id of line
2309
+     * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2310
+     * 	@return	void
2311
+     */
2312
+    function line_up($rowid, $fk_parent_line=true)
2313
+    {
2314
+        // phpcs:enable
2315
+        $this->line_order(false, 'ASC', $fk_parent_line);
2316
+
2317
+        // Get rang of line
2318
+        $rang = $this->getRangOfLine($rowid);
2319
+
2320
+        // Update position of line
2321
+        $this->updateLineUp($rowid, $rang);
2322
+    }
2323
+
2324
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2325
+    /**
2326
+     * 	Update a line to have a higher rank
2327
+     *
2328
+     * 	@param	int			$rowid				Id of line
2329
+     * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2330
+     * 	@return	void
2331
+     */
2332
+    function line_down($rowid, $fk_parent_line=true)
2333
+    {
2334
+        // phpcs:enable
2335
+        $this->line_order(false, 'ASC', $fk_parent_line);
2336
+
2337
+        // Get rang of line
2338
+        $rang = $this->getRangOfLine($rowid);
2339
+
2340
+        // Get max value for rang
2341
+        $max = $this->line_max();
2342
+
2343
+        // Update position of line
2344
+        $this->updateLineDown($rowid, $rang, $max);
2345
+    }
2346
+
2347
+    /**
2348
+     * 	Update position of line (rang)
2349
+     *
2350
+     * 	@param	int		$rowid		Id of line
2351
+     * 	@param	int		$rang		Position
2352
+     * 	@return	void
2353
+     */
2354
+    function updateRangOfLine($rowid,$rang)
2355
+    {
2356
+        $fieldposition = 'rang';
2357
+        if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2358
+
2359
+        $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2360
+        $sql.= ' WHERE rowid = '.$rowid;
2361
+
2362
+        dol_syslog(get_class($this)."::updateRangOfLine", LOG_DEBUG);
2363
+        if (! $this->db->query($sql))
2364
+        {
2365
+            dol_print_error($this->db);
2366
+        }
2367
+    }
2368
+
2369
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2370
+    /**
2371
+     * 	Update position of line with ajax (rang)
2372
+     *
2373
+     * 	@param	array	$rows	Array of rows
2374
+     * 	@return	void
2375
+     */
2376
+    function line_ajaxorder($rows)
2377
+    {
2378
+        // phpcs:enable
2379
+        $num = count($rows);
2380
+        for ($i = 0 ; $i < $num ; $i++)
2381
+        {
2382
+            $this->updateRangOfLine($rows[$i], ($i+1));
2383
+        }
2384
+    }
2385
+
2386
+    /**
2387
+     * 	Update position of line up (rang)
2388
+     *
2389
+     * 	@param	int		$rowid		Id of line
2390
+     * 	@param	int		$rang		Position
2391
+     * 	@return	void
2392
+     */
2393
+    function updateLineUp($rowid,$rang)
2394
+    {
2395
+        if ($rang > 1)
2396
+        {
2397
+            $fieldposition = 'rang';
2398
+            if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2399
+
2400
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang ;
2401
+            $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2402
+            $sql.= ' AND rang = '.($rang - 1);
2403
+            if ($this->db->query($sql) )
2404
+            {
2405
+                $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang - 1);
2406
+                $sql.= ' WHERE rowid = '.$rowid;
2407
+                if (! $this->db->query($sql) )
2408
+                {
2409
+                    dol_print_error($this->db);
2410
+                }
2411
+            }
2412
+            else
2413
+            {
2414
+                dol_print_error($this->db);
2415
+            }
2416
+        }
2417
+    }
2418
+
2419
+    /**
2420
+     * 	Update position of line down (rang)
2421
+     *
2422
+     * 	@param	int		$rowid		Id of line
2423
+     * 	@param	int		$rang		Position
2424
+     * 	@param	int		$max		Max
2425
+     * 	@return	void
2426
+     */
2427
+    function updateLineDown($rowid,$rang,$max)
2428
+    {
2429
+        if ($rang < $max)
2430
+        {
2431
+            $fieldposition = 'rang';
2432
+            if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2433
+
2434
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2435
+            $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2436
+            $sql.= ' AND rang = '.($rang+1);
2437
+            if ($this->db->query($sql) )
2438
+            {
2439
+                $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang+1);
2440
+                $sql.= ' WHERE rowid = '.$rowid;
2441
+                if (! $this->db->query($sql) )
2442
+                {
2443
+                    dol_print_error($this->db);
2444
+                }
2445
+            }
2446
+            else
2447
+            {
2448
+                dol_print_error($this->db);
2449
+            }
2450
+        }
2451
+    }
2452
+
2453
+    /**
2454
+     * 	Get position of line (rang)
2455
+     *
2456
+     * 	@param		int		$rowid		Id of line
2457
+     *  @return		int     			Value of rang in table of lines
2458
+     */
2459
+    function getRangOfLine($rowid)
2460
+    {
2461
+        $sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2462
+        $sql.= ' WHERE rowid ='.$rowid;
2463
+
2464
+        dol_syslog(get_class($this)."::getRangOfLine", LOG_DEBUG);
2465
+        $resql = $this->db->query($sql);
2466
+        if ($resql)
2467
+        {
2468
+            $row = $this->db->fetch_row($resql);
2469
+            return $row[0];
2470
+        }
2471
+    }
2472
+
2473
+    /**
2474
+     * 	Get rowid of the line relative to its position
2475
+     *
2476
+     * 	@param		int		$rang		Rang value
2477
+     *  @return     int     			Rowid of the line
2478
+     */
2479
+    function getIdOfLine($rang)
2480
+    {
2481
+        $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2482
+        $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2483
+        $sql.= ' AND rang = '.$rang;
2484
+        $resql = $this->db->query($sql);
2485
+        if ($resql)
2486
+        {
2487
+            $row = $this->db->fetch_row($resql);
2488
+            return $row[0];
2489
+        }
2490
+    }
2491
+
2492
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2493
+    /**
2494
+     * 	Get max value used for position of line (rang)
2495
+     *
2496
+     * 	@param		int		$fk_parent_line		Parent line id
2497
+     *  @return     int  			   			Max value of rang in table of lines
2498
+     */
2499
+    function line_max($fk_parent_line=0)
2500
+    {
2501
+        // phpcs:enable
2502
+        // Search the last rang with fk_parent_line
2503
+        if ($fk_parent_line)
2504
+        {
2505
+            $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2506
+            $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2507
+            $sql.= ' AND fk_parent_line = '.$fk_parent_line;
2508
+
2509
+            dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2510
+            $resql = $this->db->query($sql);
2511
+            if ($resql)
2512
+            {
2513
+                $row = $this->db->fetch_row($resql);
2514
+                if (! empty($row[0]))
2515
+                {
2516
+                    return $row[0];
2517
+                }
2518
+                else
2519
+                {
2520
+                    return $this->getRangOfLine($fk_parent_line);
2521
+                }
2522
+            }
2523
+        }
2524
+        // If not, search the last rang of element
2525
+        else
2526
+        {
2527
+            $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2528
+            $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2529
+
2530
+            dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2531
+            $resql = $this->db->query($sql);
2532
+            if ($resql)
2533
+            {
2534
+                $row = $this->db->fetch_row($resql);
2535
+                return $row[0];
2536
+            }
2537
+        }
2538
+    }
2539
+
2540
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2541
+    /**
2542
+     *  Update external ref of element
2543
+     *
2544
+     *  @param      string		$ref_ext	Update field ref_ext
2545
+     *  @return     int      		   		<0 if KO, >0 if OK
2546
+     */
2547
+    function update_ref_ext($ref_ext)
2548
+    {
2549
+        // phpcs:enable
2550
+        if (! $this->table_element)
2551
+        {
2552
+            dol_syslog(get_class($this)."::update_ref_ext was called on objet with property table_element not defined", LOG_ERR);
2553
+            return -1;
2554
+        }
2555
+
2556
+        $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2557
+        $sql.= " SET ref_ext = '".$this->db->escape($ref_ext)."'";
2558
+        $sql.= " WHERE ".(isset($this->table_rowid)?$this->table_rowid:'rowid')." = ". $this->id;
2559
+
2560
+        dol_syslog(get_class($this)."::update_ref_ext", LOG_DEBUG);
2561
+        if ($this->db->query($sql))
2562
+        {
2563
+            $this->ref_ext = $ref_ext;
2564
+            return 1;
2565
+        }
2566
+        else
2567
+        {
2568
+            $this->error=$this->db->error();
2569
+            return -1;
2570
+        }
2571
+    }
2572
+
2573
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2574
+    /**
2575
+     *  Update note of element
2576
+     *
2577
+     *  @param      string		$note		New value for note
2578
+     *  @param		string		$suffix		'', '_public' or '_private'
2579
+     *  @return     int      		   		<0 if KO, >0 if OK
2580
+     */
2581
+    function update_note($note, $suffix='')
2582
+    {
2583
+        // phpcs:enable
2584
+        global $user;
2585
+
2586
+        if (! $this->table_element)
2587
+        {
2588
+            $this->error='update_note was called on objet with property table_element not defined';
2589
+            dol_syslog(get_class($this)."::update_note was called on objet with property table_element not defined", LOG_ERR);
2590
+            return -1;
2591
+        }
2592
+        if (! in_array($suffix,array('','_public','_private')))
2593
+        {
2594
+            $this->error='update_note Parameter suffix must be empty, \'_private\' or \'_public\'';
2595
+            dol_syslog(get_class($this)."::update_note Parameter suffix must be empty, '_private' or '_public'", LOG_ERR);
2596
+            return -2;
2597
+        }
2598
+        // Special cas
2599
+        //var_dump($this->table_element);exit;
2600
+        if ($this->table_element == 'product') $suffix='';
2601
+
2602
+        $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2603
+        $sql.= " SET note".$suffix." = ".(!empty($note)?("'".$this->db->escape($note)."'"):"NULL");
2604
+        $sql.= " ,".(in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))?"fk_user_mod":"fk_user_modif")." = ".$user->id;
2605
+        $sql.= " WHERE rowid =". $this->id;
2606
+
2607
+        dol_syslog(get_class($this)."::update_note", LOG_DEBUG);
2608
+        if ($this->db->query($sql))
2609
+        {
2610
+            if ($suffix == '_public') $this->note_public = $note;
2611
+            else if ($suffix == '_private') $this->note_private = $note;
2612
+            else
2613
+            {
2614
+                $this->note = $note;      // deprecated
2615
+                $this->note_private = $note;
2616
+            }
2617
+            return 1;
2618
+        }
2619
+        else
2620
+        {
2621
+            $this->error=$this->db->lasterror();
2622
+            return -1;
2623
+        }
2624
+    }
2625
+
2626
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2627
+    /**
2628
+     * 	Update public note (kept for backward compatibility)
2629
+     *
2630
+     * @param      string		$note		New value for note
2631
+     * @return     int      		   		<0 if KO, >0 if OK
2632
+     * @deprecated
2633
+     * @see update_note()
2634
+     */
2635
+    function update_note_public($note)
2636
+    {
2637
+        // phpcs:enable
2638
+        return $this->update_note($note,'_public');
2639
+    }
2640
+
2641
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2642
+    /**
2643
+     *	Update total_ht, total_ttc, total_vat, total_localtax1, total_localtax2 for an object (sum of lines).
2644
+     *  Must be called at end of methods addline or updateline.
2645
+     *
2646
+     *	@param	int		$exclspec          	>0 = Exclude special product (product_type=9)
2647
+     *  @param  string	$roundingadjust    	'none'=Do nothing, 'auto'=Use default method (MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND if defined, or '0'), '0'=Force mode total of rounding, '1'=Force mode rounding of total
2648
+     *  @param	int		$nodatabaseupdate	1=Do not update database. Update only properties of object.
2649
+     *  @param	Societe	$seller				If roundingadjust is '0' or '1' or maybe 'auto', it means we recalculate total for lines before calculating total for object and for this, we need seller object.
2650
+     *	@return	int    			           	<0 if KO, >0 if OK
2651
+     */
2652
+    function update_price($exclspec=0,$roundingadjust='none',$nodatabaseupdate=0,$seller=null)
2653
+    {
2654
+        // phpcs:enable
2655
+        global $conf, $hookmanager, $action;
2656
+
2657
+        // Some external module want no update price after a trigger because they have another method to calculate the total (ex: with an extrafield)
2658
+        $MODULE = "";
2659
+        if ($this->element == 'propal')
2660
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL";
2661
+        elseif ($this->element == 'order')
2662
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER";
2663
+        elseif ($this->element == 'facture')
2664
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE";
2665
+        elseif ($this->element == 'facture_fourn')
2666
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE";
2667
+        elseif ($this->element == 'order_supplier')
2668
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER";
2669
+        elseif ($this->element == 'supplier_proposal')
2670
+            $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
2671
+
2672
+        if (! empty($MODULE)) {
2673
+            if (!empty(Globals::$conf->global->$MODULE)) {
2674
+                $modsactivated = explode(',', Globals::$conf->global->$MODULE);
2675
+                foreach ($modsactivated as $mod) {
2676
+                    if (Globals::$conf->$mod->enabled)
2677
+                        return 1; // update was disabled by specific setup
2678
+                }
2679
+            }
2680
+        }
2681
+
2682
+        include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
2683
+
2684
+        if ($roundingadjust == '-1') $roundingadjust='auto';	// For backward compatibility
2685
+
2686
+        $forcedroundingmode=$roundingadjust;
2687
+        if ($forcedroundingmode == 'auto' && isset(Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND))
2688
+            $forcedroundingmode = Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND;
2689
+        elseif ($forcedroundingmode == 'auto') $forcedroundingmode='0';
2690
+
2691
+        $error=0;
2692
+
2693
+        $multicurrency_tx = !empty($this->multicurrency_tx) ? $this->multicurrency_tx : 1;
2694
+
2695
+        // Define constants to find lines to sum
2696
+        $fieldtva='total_tva';
2697
+        $fieldlocaltax1='total_localtax1';
2698
+        $fieldlocaltax2='total_localtax2';
2699
+        $fieldup='subprice';
2700
+        if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier')
2701
+        {
2702
+            $fieldtva='tva';
2703
+            $fieldup='pu_ht';
2704
+        }
2705
+        if ($this->element == 'expensereport')
2706
+        {
2707
+            $fieldup='value_unit';
2708
+        }
2709
+
2710
+        $sql = 'SELECT rowid, qty, '.$fieldup.' as up, remise_percent, total_ht, '.$fieldtva.' as total_tva, total_ttc, '.$fieldlocaltax1.' as total_localtax1, '.$fieldlocaltax2.' as total_localtax2,';
2711
+        $sql.= ' tva_tx as vatrate, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, info_bits, product_type';
2712
+            if ($this->table_element_line == 'facturedet') $sql.= ', situation_percent';
2713
+            $sql.= ', multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
2714
+        $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2715
+        $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2716
+        if ($exclspec)
2717
+        {
2718
+            $product_field='product_type';
2719
+            if ($this->table_element_line == 'contratdet') $product_field='';    // contratdet table has no product_type field
2720
+            if ($product_field) $sql.= ' AND '.$product_field.' <> 9';
2721
+        }
2722
+        $sql.= ' ORDER by rowid';	// We want to be sure to always use same order of line to not change lines differently when option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND is used
2723
+
2724
+        dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2725
+        $resql = $this->db->query($sql);
2726
+        if ($resql)
2727
+        {
2728
+            $this->total_ht  = 0;
2729
+            $this->total_tva = 0;
2730
+            $this->total_localtax1 = 0;
2731
+            $this->total_localtax2 = 0;
2732
+            $this->total_ttc = 0;
2733
+            $total_ht_by_vats  = array();
2734
+            $total_tva_by_vats = array();
2735
+            $total_ttc_by_vats = array();
2736
+            $this->multicurrency_total_ht	= 0;
2737
+            $this->multicurrency_total_tva	= 0;
2738
+            $this->multicurrency_total_ttc	= 0;
2739
+
2740
+            $num = $this->db->num_rows($resql);
2741
+            $i = 0;
2742
+            while ($i < $num)
2743
+            {
2744
+                $obj = $this->db->fetch_object($resql);
2745
+
2746
+                // Note: There is no check on detail line and no check on total, if $forcedroundingmode = 'none'
2747
+                $parameters=array('fk_element' => $obj->rowid);
2748
+                $reshook = $hookmanager->executeHooks('changeRoundingMode', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
2749
+
2750
+                if (empty($reshook) && $forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
2751
+                {
2752
+                    $localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
2753
+                    $tmpcal=calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
2754
+                    $diff=price2num($tmpcal[1] - $obj->total_tva, 'MT', 1);
2755
+                    if ($diff)
2756
+                    {
2757
+                        $sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".$tmpcal[1].", total_ttc = ".$tmpcal[2]." WHERE rowid = ".$obj->rowid;
2758
+                        dol_syslog('We found unconsistent data into detailed line (difference of '.$diff.') for line rowid = '.$obj->rowid." (total vat of line calculated=".$tmpcal[1].", database=".$obj->total_tva."). We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2759
+                                $resqlfix=$this->db->query($sqlfix);
2760
+                                if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2761
+                                $obj->total_tva = $tmpcal[1];
2762
+                                $obj->total_ttc = $tmpcal[2];
2763
+                        //
2764
+                    }
2765
+                }
2766
+
2767
+                $this->total_ht        += $obj->total_ht;		// The field visible at end of line detail
2768
+                $this->total_tva       += $obj->total_tva;
2769
+                $this->total_localtax1 += $obj->total_localtax1;
2770
+                $this->total_localtax2 += $obj->total_localtax2;
2771
+                $this->total_ttc       += $obj->total_ttc;
2772
+                $this->multicurrency_total_ht        += $obj->multicurrency_total_ht;		// The field visible at end of line detail
2773
+                $this->multicurrency_total_tva       += $obj->multicurrency_total_tva;
2774
+                $this->multicurrency_total_ttc       += $obj->multicurrency_total_ttc;
2775
+
2776
+                if (! isset($total_ht_by_vats[$obj->vatrate]))  $total_ht_by_vats[$obj->vatrate]=0;
2777
+                if (! isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate]=0;
2778
+                if (! isset($total_ttc_by_vats[$obj->vatrate])) $total_ttc_by_vats[$obj->vatrate]=0;
2779
+                $total_ht_by_vats[$obj->vatrate]  += $obj->total_ht;
2780
+                $total_tva_by_vats[$obj->vatrate] += $obj->total_tva;
2781
+                $total_ttc_by_vats[$obj->vatrate] += $obj->total_ttc;
2782
+
2783
+                if ($forcedroundingmode == '1')	// Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
2784
+                {
2785
+                    $tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
2786
+                    $diff=price2num($total_tva_by_vats[$obj->vatrate]-$tmpvat, 'MT', 1);
2787
+                    //print 'Line '.$i.' rowid='.$obj->rowid.' vat_rate='.$obj->vatrate.' total_ht='.$obj->total_ht.' total_tva='.$obj->total_tva.' total_ttc='.$obj->total_ttc.' total_ht_by_vats='.$total_ht_by_vats[$obj->vatrate].' total_tva_by_vats='.$total_tva_by_vats[$obj->vatrate].' (new calculation = '.$tmpvat.') total_ttc_by_vats='.$total_ttc_by_vats[$obj->vatrate].($diff?" => DIFF":"")."<br>\n";
2788
+                    if ($diff)
2789
+                    {
2790
+                        if (abs($diff) > 0.1) { dol_syslog('A rounding difference was detected into TOTAL but is too high to be corrected', LOG_WARNING); exit; }
2791
+                        $sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".($obj->total_tva - $diff).", total_ttc = ".($obj->total_ttc - $diff)." WHERE rowid = ".$obj->rowid;
2792
+                        dol_syslog('We found a difference of '.$diff.' for line rowid = '.$obj->rowid.". We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2793
+                                $resqlfix=$this->db->query($sqlfix);
2794
+                                if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2795
+                                $this->total_tva -= $diff;
2796
+                                $this->total_ttc -= $diff;
2797
+                                $total_tva_by_vats[$obj->vatrate] -= $diff;
2798
+                                $total_ttc_by_vats[$obj->vatrate] -= $diff;
2799
+                    }
2800
+                }
2801
+
2802
+                $i++;
2803
+            }
2804
+
2805
+            // Add revenue stamp to total
2806
+            $this->total_ttc       			+= isset($this->revenuestamp)?$this->revenuestamp:0;
2807
+            $this->multicurrency_total_ttc  += isset($this->revenuestamp)?($this->revenuestamp * $multicurrency_tx):0;
2808
+
2809
+            // Situations totals
2810
+            if ($this->situation_cycle_ref && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits') && $this->type != $this::TYPE_CREDIT_NOTE )
2811
+            {
2812
+                $prev_sits = $this->get_prev_sits();
2813
+
2814
+                foreach ($prev_sits as $sit) {				// $sit is an object Facture loaded with a fetch.
2815
+                    $this->total_ht -= $sit->total_ht;
2816
+                    $this->total_tva -= $sit->total_tva;
2817
+                    $this->total_localtax1 -= $sit->total_localtax1;
2818
+                    $this->total_localtax2 -= $sit->total_localtax2;
2819
+                    $this->total_ttc -= $sit->total_ttc;
2820
+                    $this->multicurrency_total_ht -= $sit->multicurrency_total_ht;
2821
+                    $this->multicurrency_total_tva -= $sit->multicurrency_total_tva;
2822
+                    $this->multicurrency_total_ttc -= $sit->multicurrency_total_ttc;
2823
+                }
2824
+            }
2825
+
2826
+            $this->db->free($resql);
2827
+
2828
+            // Now update global field total_ht, total_ttc and tva
2829
+            $fieldht='total_ht';
2830
+            $fieldtva='tva';
2831
+            $fieldlocaltax1='localtax1';
2832
+            $fieldlocaltax2='localtax2';
2833
+            $fieldttc='total_ttc';
2834
+            // Specific code for backward compatibility with old field names
2835
+            if ($this->element == 'facture' || $this->element == 'facturerec')             $fieldht='total';
2836
+            if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva='total_tva';
2837
+            if ($this->element == 'propal')                                                $fieldttc='total';
2838
+            if ($this->element == 'expensereport')                                         $fieldtva='total_tva';
2839
+            if ($this->element == 'supplier_proposal')                                     $fieldttc='total';
2840
+
2841
+            if (empty($nodatabaseupdate))
2842
+            {
2843
+                $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET';
2844
+                $sql .= " ".$fieldht."='".price2num($this->total_ht)."',";
2845
+                $sql .= " ".$fieldtva."='".price2num($this->total_tva)."',";
2846
+                $sql .= " ".$fieldlocaltax1."='".price2num($this->total_localtax1)."',";
2847
+                $sql .= " ".$fieldlocaltax2."='".price2num($this->total_localtax2)."',";
2848
+                $sql .= " ".$fieldttc."='".price2num($this->total_ttc)."'";
2849
+                        $sql .= ", multicurrency_total_ht='".price2num($this->multicurrency_total_ht, 'MT', 1)."'";
2850
+                        $sql .= ", multicurrency_total_tva='".price2num($this->multicurrency_total_tva, 'MT', 1)."'";
2851
+                        $sql .= ", multicurrency_total_ttc='".price2num($this->multicurrency_total_ttc, 'MT', 1)."'";
2852
+                $sql .= ' WHERE rowid = '.$this->id;
2853
+
2854
+
2855
+                dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2856
+                $resql=$this->db->query($sql);
2857
+                if (! $resql)
2858
+                {
2859
+                    $error++;
2860
+                    $this->error=$this->db->lasterror();
2861
+                    $this->errors[]=$this->db->lasterror();
2862
+                }
2863
+            }
2864
+
2865
+            if (! $error)
2866
+            {
2867
+                return 1;
2868
+            }
2869
+            else
2870
+            {
2871
+                return -1;
2872
+            }
2873
+        }
2874
+        else
2875
+        {
2876
+            dol_print_error($this->db,'Bad request in update_price');
2877
+            return -1;
2878
+        }
2879
+    }
2880
+
2881
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
2882
+    /**
2883
+     *	Add objects linked in llx_element_element.
2884
+     *
2885
+     *	@param		string	$origin		Linked element type
2886
+     *	@param		int		$origin_id	Linked element id
2887
+     *	@return		int					<=0 if KO, >0 if OK
2888
+     *	@see		fetchObjectLinked, updateObjectLinked, deleteObjectLinked
2889
+     */
2890
+    function add_object_linked($origin=null, $origin_id=null)
2891
+    {
2892
+        // phpcs:enable
2893
+        $origin = (! empty($origin) ? $origin : $this->origin);
2894
+        $origin_id = (! empty($origin_id) ? $origin_id : $this->origin_id);
2895
+
2896
+        // Special case
2897
+        if ($origin == 'order') $origin='commande';
2898
+        if ($origin == 'invoice') $origin='facture';
2899
+        if ($origin == 'invoice_template') $origin='facturerec';
2900
+        if ($origin == 'supplierorder') $origin='order_supplier';
2901
+        $this->db->begin();
2902
+
2903
+        $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_element (";
2904
+        $sql.= "fk_source";
2905
+        $sql.= ", sourcetype";
2906
+        $sql.= ", fk_target";
2907
+        $sql.= ", targettype";
2908
+        $sql.= ") VALUES (";
2909
+        $sql.= $origin_id;
2910
+        $sql.= ", '".$this->db->escape($origin)."'";
2911
+        $sql.= ", ".$this->id;
2912
+        $sql.= ", '".$this->db->escape($this->element)."'";
2913
+        $sql.= ")";
2914
+
2915
+        dol_syslog(get_class($this)."::add_object_linked", LOG_DEBUG);
2916
+        if ($this->db->query($sql))
2917
+            {
2918
+                $this->db->commit();
2919
+                return 1;
2920
+            }
2921
+            else
2922
+            {
2923
+                $this->error=$this->db->lasterror();
2924
+                $this->db->rollback();
2925
+                return 0;
2926
+            }
2927
+    }
2928
+
2929
+    /**
2930
+     *	Fetch array of objects linked to current object (object of enabled modules only). Links are loaded into
2931
+     *		this->linkedObjectsIds array and
2932
+     *		this->linkedObjects array if $loadalsoobjects = 1
2933
+     *  Possible usage for parameters:
2934
+     *  - all parameters empty -> we look all link to current object (current object can be source or target)
2935
+     *  - source id+type -> will get target list linked to source
2936
+     *  - target id+type -> will get source list linked to target
2937
+     *  - source id+type + target type -> will get target list of the type
2938
+     *  - target id+type + target source -> will get source list of the type
2939
+     *
2940
+     *	@param	int		$sourceid			Object source id (if not defined, id of object)
2941
+     *	@param  string	$sourcetype			Object source type (if not defined, element name of object)
2942
+     *	@param  int		$targetid			Object target id (if not defined, id of object)
2943
+     *	@param  string	$targettype			Object target type (if not defined, elemennt name of object)
2944
+     *	@param  string	$clause				'OR' or 'AND' clause used when both source id and target id are provided
2945
+     *  @param  int		$alsosametype		0=Return only links to object that differs from source type. 1=Include also link to objects of same type.
2946
+     *  @param  string	$orderby			SQL 'ORDER BY' clause
2947
+     *  @param	int		$loadalsoobjects	Load also array this->linkedObjects (Use 0 to increase performances)
2948
+     *	@return int							<0 if KO, >0 if OK
2949
+     *  @see	add_object_linked, updateObjectLinked, deleteObjectLinked
2950
+     */
2951
+    function fetchObjectLinked($sourceid=null,$sourcetype='',$targetid=null,$targettype='',$clause='OR',$alsosametype=1,$orderby='sourcetype',$loadalsoobjects=1)
2952
+    {
2953
+        global $conf;
2954
+
2955
+        $this->linkedObjectsIds=array();
2956
+        $this->linkedObjects=array();
2957
+
2958
+        $justsource=false;
2959
+        $justtarget=false;
2960
+        $withtargettype=false;
2961
+        $withsourcetype=false;
2962
+
2963
+        if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid))
2964
+        {
2965
+            $justsource=true;  // the source (id and type) is a search criteria
2966
+            if (! empty($targettype)) $withtargettype=true;
2967
+        }
2968
+        if (! empty($targetid) && ! empty($targettype) && empty($sourceid))
2969
+        {
2970
+            $justtarget=true;  // the target (id and type) is a search criteria
2971
+            if (! empty($sourcetype)) $withsourcetype=true;
2972
+        }
2973
+
2974
+        $sourceid = (! empty($sourceid) ? $sourceid : $this->id);
2975
+        $targetid = (! empty($targetid) ? $targetid : $this->id);
2976
+        $sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
2977
+        $targettype = (! empty($targettype) ? $targettype : $this->element);
2978
+
2979
+        /*if (empty($sourceid) && empty($targetid))
2980
+		 {
2981
+		 dol_syslog('Bad usage of function. No source nor target id defined (nor as parameter nor as object id)', LOG_ERR);
2982
+		 return -1;
2983
+		 }*/
2984
+
2985
+        // Links between objects are stored in table element_element
2986
+        $sql = 'SELECT rowid, fk_source, sourcetype, fk_target, targettype';
2987
+        $sql.= ' FROM '.MAIN_DB_PREFIX.'element_element';
2988
+        $sql.= " WHERE ";
2989
+        if ($justsource || $justtarget)
2990
+        {
2991
+            if ($justsource)
2992
+            {
2993
+                $sql.= "fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."'";
2994
+                if ($withtargettype) $sql.= " AND targettype = '".$targettype."'";
2995
+            }
2996
+            else if ($justtarget)
2997
+            {
2998
+                $sql.= "fk_target = ".$targetid." AND targettype = '".$targettype."'";
2999
+                if ($withsourcetype) $sql.= " AND sourcetype = '".$sourcetype."'";
3000
+            }
3001
+        }
3002
+        else
3003
+        {
3004
+            $sql.= "(fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."')";
3005
+            $sql.= " ".$clause." (fk_target = ".$targetid." AND targettype = '".$targettype."')";
3006
+        }
3007
+        $sql .= ' ORDER BY '.$orderby;
3008
+
3009
+        dol_syslog(get_class($this)."::fetchObjectLink", LOG_DEBUG);
3010
+        $resql = $this->db->query($sql);
3011
+        if ($resql)
3012
+        {
3013
+            $num = $this->db->num_rows($resql);
3014
+            $i = 0;
3015
+            while ($i < $num)
3016
+            {
3017
+                $obj = $this->db->fetch_object($resql);
3018
+                if ($justsource || $justtarget)
3019
+                {
3020
+                    if ($justsource)
3021
+                    {
3022
+                        $this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3023
+                    }
3024
+                    else if ($justtarget)
3025
+                    {
3026
+                        $this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3027
+                    }
3028
+                }
3029
+                else
3030
+                {
3031
+                    if ($obj->fk_source == $sourceid && $obj->sourcetype == $sourcetype)
3032
+                    {
3033
+                        $this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3034
+                    }
3035
+                    if ($obj->fk_target == $targetid && $obj->targettype == $targettype)
3036
+                    {
3037
+                        $this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3038
+                    }
3039
+                }
3040
+                $i++;
3041
+            }
3042
+
3043
+            if (! empty($this->linkedObjectsIds))
3044
+            {
3045
+                $tmparray = $this->linkedObjectsIds;
3046
+                foreach($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3047
+                {
3048
+                    // Parse element/subelement (ex: project_task, cabinetmed_consultation, ...)
3049
+                    $module = $element = $subelement = $objecttype;
3050
+                    if ($objecttype != 'supplier_proposal' && $objecttype != 'order_supplier' && $objecttype != 'invoice_supplier'
3051
+                        && preg_match('/^([^_]+)_([^_]+)/i',$objecttype,$regs))
3052
+                    {
3053
+                        $module = $element = $regs[1];
3054
+                        $subelement = $regs[2];
3055
+                    }
3056
+
3057
+                    $classpath = $element.'/class';
3058
+                    // To work with non standard classpath or module name
3059
+                    if ($objecttype == 'facture')			{
3060
+                        $classpath = 'compta/facture/class';
3061
+                    }
3062
+                    else if ($objecttype == 'facturerec')			{
3063
+                        $classpath = 'compta/facture/class'; $module = 'facture';
3064
+                    }
3065
+                    else if ($objecttype == 'propal')			{
3066
+                        $classpath = 'comm/propal/class';
3067
+                    }
3068
+                    else if ($objecttype == 'supplier_proposal')			{
3069
+                        $classpath = 'supplier_proposal/class';
3070
+                    }
3071
+                    else if ($objecttype == 'shipping')			{
3072
+                        $classpath = 'expedition/class'; $subelement = 'expedition'; $module = 'expedition_bon';
3073
+                    }
3074
+                    else if ($objecttype == 'delivery')			{
3075
+                        $classpath = 'livraison/class'; $subelement = 'livraison'; $module = 'livraison_bon';
3076
+                    }
3077
+                    else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier')	{
3078
+                        $classpath = 'fourn/class'; $module = 'fournisseur';
3079
+                    }
3080
+                    else if ($objecttype == 'fichinter')			{
3081
+                        $classpath = 'fichinter/class'; $subelement = 'fichinter'; $module = 'ficheinter';
3082
+                    }
3083
+                    else if ($objecttype == 'subscription')			{
3084
+                        $classpath = 'adherents/class'; $module = 'adherent';
3085
+                    }
3086
+
3087
+                    // Set classfile
3088
+                    $classfile = strtolower($subelement); $classname = ucfirst($subelement);
3089
+
3090
+                    if ($objecttype == 'order') {
3091
+                        $classfile = 'commande'; $classname = 'Commande';
3092
+                    }
3093
+                    else if ($objecttype == 'invoice_supplier') {
3094
+                        $classfile = 'fournisseur.facture'; $classname = 'FactureFournisseur';
3095
+                    }
3096
+                    else if ($objecttype == 'order_supplier')   {
3097
+                        $classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur';
3098
+                    }
3099
+                    else if ($objecttype == 'supplier_proposal')   {
3100
+                        $classfile = 'supplier_proposal'; $classname = 'SupplierProposal';
3101
+                    }
3102
+                    else if ($objecttype == 'facturerec')   {
3103
+                        $classfile = 'facture-rec'; $classname = 'FactureRec';
3104
+                    }
3105
+                    else if ($objecttype == 'subscription')   {
3106
+                        $classfile = 'subscription'; $classname = 'Subscription';
3107
+                    }
3108
+
3109
+                    // Here $module, $classfile and $classname are set
3110
+                    if (Globals::$conf->$module->enabled && (($element != $this->element) || $alsosametype)) {
3111
+                        if ($loadalsoobjects)
3112
+                        {
3113
+                            dol_include_once('/'.$classpath.'/'.$classfile.'.class.php');
3114
+                            //print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
3115
+                            if (class_exists($classname))
3116
+                            {
3117
+                                foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
3118
+                                {
3119
+                                    $object = new $classname($this->db);
3120
+                                    $ret = $object->fetch($objectid);
3121
+                                    if ($ret >= 0)
3122
+                                    {
3123
+                                        $this->linkedObjects[$objecttype][$i] = $object;
3124
+                                    }
3125
+                                }
3126
+                            }
3127
+                        }
3128
+                    }
3129
+                    else
3130
+                    {
3131
+                        unset($this->linkedObjectsIds[$objecttype]);
3132
+                    }
3133
+                }
3134
+            }
3135
+            return 1;
3136
+        }
3137
+        else
3138
+        {
3139
+            dol_print_error($this->db);
3140
+            return -1;
3141
+        }
3142
+    }
3143
+
3144
+    /**
3145
+     *	Update object linked of a current object
3146
+     *
3147
+     *	@param	int		$sourceid		Object source id
3148
+     *	@param  string	$sourcetype		Object source type
3149
+     *	@param  int		$targetid		Object target id
3150
+     *	@param  string	$targettype		Object target type
3151
+     *	@return							int	>0 if OK, <0 if KO
3152
+     *	@see	add_object_linked, fetObjectLinked, deleteObjectLinked
3153
+     */
3154
+    function updateObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='')
3155
+    {
3156
+        $updatesource=false;
3157
+        $updatetarget=false;
3158
+
3159
+        if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $updatesource=true;
3160
+        else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $updatetarget=true;
3161
+
3162
+        $sql = "UPDATE ".MAIN_DB_PREFIX."element_element SET ";
3163
+        if ($updatesource)
3164
+        {
3165
+            $sql.= "fk_source = ".$sourceid;
3166
+            $sql.= ", sourcetype = '".$this->db->escape($sourcetype)."'";
3167
+            $sql.= " WHERE fk_target = ".$this->id;
3168
+            $sql.= " AND targettype = '".$this->db->escape($this->element)."'";
3169
+        }
3170
+        else if ($updatetarget)
3171
+        {
3172
+            $sql.= "fk_target = ".$targetid;
3173
+            $sql.= ", targettype = '".$this->db->escape($targettype)."'";
3174
+            $sql.= " WHERE fk_source = ".$this->id;
3175
+            $sql.= " AND sourcetype = '".$this->db->escape($this->element)."'";
3176
+        }
3177
+
3178
+        dol_syslog(get_class($this)."::updateObjectLinked", LOG_DEBUG);
3179
+        if ($this->db->query($sql))
3180
+        {
3181
+            return 1;
3182
+        }
3183
+        else
3184
+        {
3185
+            $this->error=$this->db->lasterror();
3186
+            return -1;
3187
+        }
3188
+    }
3189
+
3190
+    /**
3191
+     *	Delete all links between an object $this
3192
+     *
3193
+     *	@param	int		$sourceid		Object source id
3194
+     *	@param  string	$sourcetype		Object source type
3195
+     *	@param  int		$targetid		Object target id
3196
+     *	@param  string	$targettype		Object target type
3197
+     *  @param	int		$rowid			Row id of line to delete. If defined, other parameters are not used.
3198
+     *	@return     					int	>0 if OK, <0 if KO
3199
+     *	@see	add_object_linked, updateObjectLinked, fetchObjectLinked
3200
+     */
3201
+    function deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid='')
3202
+    {
3203
+        $deletesource=false;
3204
+        $deletetarget=false;
3205
+
3206
+        if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $deletesource=true;
3207
+        else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $deletetarget=true;
3208
+
3209
+        $sourceid = (! empty($sourceid) ? $sourceid : $this->id);
3210
+        $sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
3211
+        $targetid = (! empty($targetid) ? $targetid : $this->id);
3212
+        $targettype = (! empty($targettype) ? $targettype : $this->element);
3213
+
3214
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
3215
+        $sql.= " WHERE";
3216
+        if ($rowid > 0)
3217
+        {
3218
+            $sql.=" rowid = ".$rowid;
3219
+        }
3220
+        else
3221
+        {
3222
+            if ($deletesource)
3223
+            {
3224
+                $sql.= " fk_source = ".$sourceid." AND sourcetype = '".$this->db->escape($sourcetype)."'";
3225
+                $sql.= " AND fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."'";
3226
+            }
3227
+            else if ($deletetarget)
3228
+            {
3229
+                $sql.= " fk_target = ".$targetid." AND targettype = '".$this->db->escape($targettype)."'";
3230
+                $sql.= " AND fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."'";
3231
+            }
3232
+            else
3233
+            {
3234
+                $sql.= " (fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."')";
3235
+                $sql.= " OR";
3236
+                $sql.= " (fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."')";
3237
+            }
3238
+        }
3239
+
3240
+        dol_syslog(get_class($this)."::deleteObjectLinked", LOG_DEBUG);
3241
+        if ($this->db->query($sql))
3242
+        {
3243
+            return 1;
3244
+        }
3245
+        else
3246
+        {
3247
+            $this->error=$this->db->lasterror();
3248
+            $this->errors[]=$this->error;
3249
+            return -1;
3250
+        }
3251
+    }
3252
+
3253
+    /**
3254
+     *      Set status of an object
3255
+     *
3256
+     *      @param	int		$status			Status to set
3257
+     *      @param	int		$elementId		Id of element to force (use this->id by default)
3258
+     *      @param	string	$elementType	Type of element to force (use this->table_element by default)
3259
+     *      @param	string	$trigkey		Trigger key to use for trigger
3260
+     *      @return int						<0 if KO, >0 if OK
3261
+     */
3262
+    function setStatut($status, $elementId=null, $elementType='', $trigkey='')
3263
+    {
3264
+        global $user,$langs,$conf;
3265
+
3266
+        $savElementId=$elementId;  // To be used later to know if we were using the method using the id of this or not.
3267
+
3268
+        $elementId = (!empty($elementId)?$elementId:$this->id);
3269
+        $elementTable = (!empty($elementType)?$elementType:$this->table_element);
3270
+
3271
+        $this->db->begin();
3272
+
3273
+        $fieldstatus="fk_statut";
3274
+        if ($elementTable == 'facture_rec') $fieldstatus="suspended";
3275
+        if ($elementTable == 'mailing') $fieldstatus="statut";
3276
+        if ($elementTable == 'cronjob') $fieldstatus="status";
3277
+        if ($elementTable == 'user') $fieldstatus="statut";
3278
+        if ($elementTable == 'expensereport') $fieldstatus="fk_statut";
3279
+        if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status";
3280
+
3281
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable;
3282
+        $sql.= " SET ".$fieldstatus." = ".$status;
3283
+        // If status = 1 = validated, update also fk_user_valid
3284
+        if ($status == 1 && $elementTable == 'expensereport') $sql.=", fk_user_valid = ".$user->id;
3285
+        $sql.= " WHERE rowid=".$elementId;
3286
+
3287
+        dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
3288
+        if ($this->db->query($sql))
3289
+        {
3290
+            $error = 0;
3291
+
3292
+            // Try autoset of trigkey
3293
+            if (empty($trigkey))
3294
+            {
3295
+                if ($this->element == 'supplier_proposal' && $status == 2) $trigkey='SUPPLIER_PROPOSAL_SIGN';   // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3296
+                if ($this->element == 'supplier_proposal' && $status == 3) $trigkey='SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3297
+                if ($this->element == 'supplier_proposal' && $status == 4) $trigkey='SUPPLIER_PROPOSAL_CLOSE';  // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3298
+                if ($this->element == 'fichinter' && $status == 3) $trigkey='FICHINTER_CLASSIFY_DONE';
3299
+                if ($this->element == 'fichinter' && $status == 2) $trigkey='FICHINTER_CLASSIFY_BILLED';
3300
+                if ($this->element == 'fichinter' && $status == 1) $trigkey='FICHINTER_CLASSIFY_UNBILLED';
3301
+            }
3302
+
3303
+            if ($trigkey)
3304
+            {
3305
+                // Appel des triggers
3306
+                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
3307
+                $interface=new Interfaces($this->db);
3308
+                $result=$interface->run_triggers($trigkey,$this,$user,$langs,$conf);
3309
+                if ($result < 0) {
3310
+                    $error++; $this->errors=$interface->errors;
3311
+                }
3312
+                // Fin appel triggers
3313
+            }
3314
+
3315
+            if (! $error)
3316
+            {
3317
+                $this->db->commit();
3318
+
3319
+                if (empty($savElementId))    // If the element we update was $this (so $elementId is null)
3320
+                {
3321
+                    $this->statut = $status;
3322
+                    $this->status = $status;
3323
+                }
3324
+
3325
+                return 1;
3326
+            }
3327
+            else
3328
+            {
3329
+                $this->db->rollback();
3330
+                dol_syslog(get_class($this)."::setStatus ".$this->error,LOG_ERR);
3331
+                return -1;
3332
+            }
3333
+        }
3334
+        else
3335
+        {
3336
+            $this->error=$this->db->lasterror();
3337
+            $this->db->rollback();
3338
+            return -1;
3339
+        }
3340
+    }
3341
+
3342
+
3343
+    /**
3344
+     *  Load type of canvas of an object if it exists
3345
+     *
3346
+     *  @param      int		$id     Record id
3347
+     *  @param      string	$ref    Record ref
3348
+     *  @return		int				<0 if KO, 0 if nothing done, >0 if OK
3349
+     */
3350
+    function getCanvas($id=0,$ref='')
3351
+    {
3352
+        global $conf;
3353
+
3354
+        if (empty($id) && empty($ref)) return 0;
3355
+        if (!empty(Globals::$conf->global->MAIN_DISABLE_CANVAS))
3356
+            return 0;    // To increase speed. Not enabled by default.
3357
+
3358
+            // Clean parameters
3359
+        $ref = trim($ref);
3360
+
3361
+        $sql = "SELECT rowid, canvas";
3362
+        $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
3363
+        $sql.= " WHERE entity IN (".getEntity($this->element).")";
3364
+        if (! empty($id))  $sql.= " AND rowid = ".$id;
3365
+        if (! empty($ref)) $sql.= " AND ref = '".$this->db->escape($ref)."'";
3366
+
3367
+        $resql = $this->db->query($sql);
3368
+        if ($resql)
3369
+        {
3370
+            $obj = $this->db->fetch_object($resql);
3371
+            if ($obj)
3372
+            {
3373
+                $this->canvas   = $obj->canvas;
3374
+                return 1;
3375
+            }
3376
+            else return 0;
3377
+        }
3378
+        else
3379
+        {
3380
+            dol_print_error($this->db);
3381
+            return -1;
3382
+        }
3383
+    }
3384
+
3385
+
3386
+    /**
3387
+     * 	Get special code of a line
3388
+     *
3389
+     * 	@param	int		$lineid		Id of line
3390
+     * 	@return	int					Special code
3391
+     */
3392
+    function getSpecialCode($lineid)
3393
+    {
3394
+        $sql = 'SELECT special_code FROM '.MAIN_DB_PREFIX.$this->table_element_line;
3395
+        $sql.= ' WHERE rowid = '.$lineid;
3396
+        $resql = $this->db->query($sql);
3397
+        if ($resql)
3398
+        {
3399
+            $row = $this->db->fetch_row($resql);
3400
+            return $row[0];
3401
+        }
3402
+    }
3403
+
3404
+    /**
3405
+     *  Function to check if an object is used by others.
3406
+     *  Check is done into this->childtables. There is no check into llx_element_element.
3407
+     *
3408
+     *  @param	int		$id			Force id of object
3409
+     *  @return	int					<0 if KO, 0 if not used, >0 if already used
3410
+     */
3411
+    function isObjectUsed($id=0)
3412
+    {
3413
+        global $langs;
3414
+
3415
+        if (empty($id)) $id=$this->id;
3416
+
3417
+        // Check parameters
3418
+        if (! isset($this->childtables) || ! is_array($this->childtables) || count($this->childtables) == 0)
3419
+        {
3420
+            dol_print_error('Called isObjectUsed on a class with property this->childtables not defined');
3421
+            return -1;
3422
+        }
3423
+
3424
+        $arraytoscan = $this->childtables;
3425
+        // For backward compatibility, we check if array is old format array('table1', 'table2', ...)
3426
+        $tmparray=array_keys($this->childtables);
3427
+        if (is_numeric($tmparray[0]))
3428
+        {
3429
+            $arraytoscan = array_flip($this->childtables);
3430
+        }
3431
+
3432
+        // Test if child exists
3433
+        $haschild=0;
3434
+        foreach($arraytoscan as $table => $elementname)
3435
+        {
3436
+            //print $id.'-'.$table.'-'.$elementname.'<br>';
3437
+            // Check if third party can be deleted
3438
+            $sql = "SELECT COUNT(*) as nb from ".MAIN_DB_PREFIX.$table;
3439
+            $sql.= " WHERE ".$this->fk_element." = ".$id;
3440
+            $resql=$this->db->query($sql);
3441
+            if ($resql)
3442
+            {
3443
+                $obj=$this->db->fetch_object($resql);
3444
+                if ($obj->nb > 0)
3445
+                {
3446
+                    $langs->load("errors");
3447
+                    //print 'Found into table '.$table.', type '.$langs->transnoentitiesnoconv($elementname).', haschild='.$haschild;
3448
+                    $haschild += $obj->nb;
3449
+                    if (is_numeric($elementname))	// old usage
3450
+                    {
3451
+                        $this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3452
+                    }
3453
+                    else	// new usage: $elementname=Translation key
3454
+                    {
3455
+                        $this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $langs->transnoentitiesnoconv($elementname));
3456
+                    }
3457
+                    break;    // We found at least one, we stop here
3458
+                }
3459
+            }
3460
+            else
3461
+            {
3462
+                $this->errors[]=$this->db->lasterror();
3463
+                return -1;
3464
+            }
3465
+        }
3466
+        if ($haschild > 0)
3467
+        {
3468
+            $this->errors[]="ErrorRecordHasChildren";
3469
+            return $haschild;
3470
+        }
3471
+        else return 0;
3472
+    }
3473
+
3474
+    /**
3475
+     *  Function to say how many lines object contains
3476
+     *
3477
+     *	@param	int		$predefined		-1=All, 0=Count free product/service only, 1=Count predefined product/service only, 2=Count predefined product, 3=Count predefined service
3478
+     *  @return	int						<0 if KO, 0 if no predefined products, nb of lines with predefined products if found
3479
+     */
3480
+    function hasProductsOrServices($predefined=-1)
3481
+    {
3482
+        $nb=0;
3483
+
3484
+        foreach($this->lines as $key => $val)
3485
+        {
3486
+            $qualified=0;
3487
+            if ($predefined == -1) $qualified=1;
3488
+            if ($predefined == 1 && $val->fk_product > 0) $qualified=1;
3489
+            if ($predefined == 0 && $val->fk_product <= 0) $qualified=1;
3490
+            if ($predefined == 2 && $val->fk_product > 0 && $val->product_type==0) $qualified=1;
3491
+            if ($predefined == 3 && $val->fk_product > 0 && $val->product_type==1) $qualified=1;
3492
+            if ($qualified) $nb++;
3493
+        }
3494
+        dol_syslog(get_class($this).'::hasProductsOrServices we found '.$nb.' qualified lines of products/servcies');
3495
+        return $nb;
3496
+    }
3497
+
3498
+    /**
3499
+     * Function that returns the total amount HT of discounts applied for all lines.
3500
+     *
3501
+     * @return 	float
3502
+     */
3503
+    function getTotalDiscount()
3504
+    {
3505
+        $total_discount=0.00;
3506
+
3507
+        $sql = "SELECT subprice as pu_ht, qty, remise_percent, total_ht";
3508
+        $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element."det";
3509
+        $sql.= " WHERE ".$this->fk_element." = ".$this->id;
3510
+
3511
+        dol_syslog(get_class($this).'::getTotalDiscount', LOG_DEBUG);
3512
+        $resql = $this->db->query($sql);
3513
+        if ($resql)
3514
+        {
3515
+            $num=$this->db->num_rows($resql);
3516
+            $i=0;
3517
+            while ($i < $num)
3518
+            {
3519
+                $obj = $this->db->fetch_object($resql);
3520
+
3521
+                $pu_ht = $obj->pu_ht;
3522
+                $qty= $obj->qty;
3523
+                $total_ht = $obj->total_ht;
3524
+
3525
+                $total_discount_line = floatval(price2num(($pu_ht * $qty) - $total_ht, 'MT'));
3526
+                $total_discount += $total_discount_line;
3527
+
3528
+                $i++;
3529
+            }
3530
+        }
3531
+
3532
+        //print $total_discount; exit;
3533
+        return price2num($total_discount);
3534
+    }
3535
+
3536
+
3537
+    /**
3538
+     * Return into unit=0, the calculated total of weight and volume of all lines * qty
3539
+     * Calculate by adding weight and volume of each product line, so properties ->volume/volume_units/weight/weight_units must be loaded on line.
3540
+     *
3541
+     * @return  array                           array('weight'=>...,'volume'=>...)
3542
+     */
3543
+    function getTotalWeightVolume()
3544
+    {
3545
+        $totalWeight = 0;
3546
+        $totalVolume = 0;
3547
+        // defined for shipment only
3548
+        $totalOrdered = '';
3549
+        // defined for shipment only
3550
+        $totalToShip = '';
3551
+
3552
+        foreach ($this->lines as $line)
3553
+        {
3554
+            if (isset($line->qty_asked))
3555
+            {
3556
+                if (empty($totalOrdered)) $totalOrdered=0;  // Avoid warning because $totalOrdered is ''
3557
+                $totalOrdered+=$line->qty_asked;    // defined for shipment only
3558
+            }
3559
+            if (isset($line->qty_shipped))
3560
+            {
3561
+                if (empty($totalToShip)) $totalToShip=0;    // Avoid warning because $totalToShip is ''
3562
+                $totalToShip+=$line->qty_shipped;   // defined for shipment only
3563
+            }else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
3564
+            {
3565
+                if (empty($totalToShip)) $totalToShip=0;
3566
+                $totalToShip+=$line->qty;   // defined for reception only
3567
+            }
3568
+
3569
+            // Define qty, weight, volume, weight_units, volume_units
3570
+            if ($this->element == 'shipping') {
3571
+                // for shipments
3572
+                $qty = $line->qty_shipped ? $line->qty_shipped : 0;
3573
+            }
3574
+            else {
3575
+                $qty = $line->qty ? $line->qty : 0;
3576
+            }
3577
+
3578
+            $weight = $line->weight ? $line->weight : 0;
3579
+            ($weight==0 && !empty($line->product->weight))? $weight=$line->product->weight: 0;
3580
+            $volume = $line->volume ? $line->volume : 0;
3581
+            ($volume==0 && !empty($line->product->volume))? $volume=$line->product->volume: 0;
3582
+
3583
+            $weight_units=$line->weight_units;
3584
+            ($weight_units==0 && !empty($line->product->weight_units))? $weight_units=$line->product->weight_units: 0;
3585
+            $volume_units=$line->volume_units;
3586
+            ($volume_units==0 && !empty($line->product->volume_units))? $volume_units=$line->product->volume_units: 0;
3587
+
3588
+            $weightUnit=0;
3589
+            $volumeUnit=0;
3590
+            if (! empty($weight_units)) $weightUnit = $weight_units;
3591
+            if (! empty($volume_units)) $volumeUnit = $volume_units;
3592
+
3593
+            if (empty($totalWeight)) $totalWeight=0;  // Avoid warning because $totalWeight is ''
3594
+            if (empty($totalVolume)) $totalVolume=0;  // Avoid warning because $totalVolume is ''
3595
+
3596
+            //var_dump($line->volume_units);
3597
+            if ($weight_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3598
+            {
3599
+                $trueWeightUnit=pow(10, $weightUnit);
3600
+                $totalWeight += $weight * $qty * $trueWeightUnit;
3601
+            }
3602
+            else {
3603
+        if ($weight_units == 99) {
3604
+            // conversion 1 Pound = 0.45359237 KG
3605
+            $trueWeightUnit = 0.45359237;
3606
+            $totalWeight += $weight * $qty * $trueWeightUnit;
3607
+        } elseif ($weight_units == 98) {
3608
+            // conversion 1 Ounce = 0.0283495 KG
3609
+            $trueWeightUnit = 0.0283495;
3610
+            $totalWeight += $weight * $qty * $trueWeightUnit;
3611
+        }
3612
+        else
3613
+                    $totalWeight += $weight * $qty;   // This may be wrong if we mix different units
3614
+            }
3615
+            if ($volume_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3616
+            {
3617
+                //print $line->volume."x".$line->volume_units."x".($line->volume_units < 50)."x".$volumeUnit;
3618
+                $trueVolumeUnit=pow(10, $volumeUnit);
3619
+                //print $line->volume;
3620
+                $totalVolume += $volume * $qty * $trueVolumeUnit;
3621
+            }
3622
+            else
3623
+            {
3624
+                $totalVolume += $volume * $qty;   // This may be wrong if we mix different units
3625
+            }
3626
+        }
3627
+
3628
+        return array('weight'=>$totalWeight, 'volume'=>$totalVolume, 'ordered'=>$totalOrdered, 'toship'=>$totalToShip);
3629
+    }
3630
+
3631
+
3632
+    /**
3633
+     *	Set extra parameters
3634
+     *
3635
+     *	@return	int      <0 if KO, >0 if OK
3636
+     */
3637
+    function setExtraParameters()
3638
+    {
3639
+        $this->db->begin();
3640
+
3641
+        $extraparams = (! empty($this->extraparams) ? json_encode($this->extraparams) : null);
3642
+
3643
+        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3644
+        $sql.= " SET extraparams = ".(! empty($extraparams) ? "'".$this->db->escape($extraparams)."'" : "null");
3645
+        $sql.= " WHERE rowid = ".$this->id;
3646
+
3647
+        dol_syslog(get_class($this)."::setExtraParameters", LOG_DEBUG);
3648
+        $resql = $this->db->query($sql);
3649
+        if (! $resql)
3650
+        {
3651
+            $this->error=$this->db->lasterror();
3652
+            $this->db->rollback();
3653
+            return -1;
3654
+        }
3655
+        else
3656
+        {
3657
+            $this->db->commit();
3658
+            return 1;
3659
+        }
3660
+    }
3661
+
3662
+
3663
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
3664
+    /**
3665
+     *    Return incoterms informations
3666
+     *    TODO Use a cache for label get
3667
+     *
3668
+     *    @return	string	incoterms info
3669
+     */
3670
+    function display_incoterms()
3671
+    {
3672
+        // phpcs:enable
3673
+        $out = '';
3674
+        $this->libelle_incoterms = '';
3675
+        if (!empty($this->fk_incoterms))
3676
+        {
3677
+            $sql = 'SELECT code FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3678
+            $result = $this->db->query($sql);
3679
+            if ($result)
3680
+            {
3681
+                $res = $this->db->fetch_object($result);
3682
+                $out .= $res->code;
3683
+            }
3684
+        }
3685
+
3686
+        $out .= (($res->code && $this->location_incoterms)?' - ':'').$this->location_incoterms;
3687
+
3688
+        return $out;
3689
+    }
3690
+
3691
+    /**
3692
+     *    Return incoterms informations for pdf display
3693
+     *
3694
+     *    @return	string		incoterms info
3695
+     */
3696
+    function getIncotermsForPDF()
3697
+    {
3698
+        $sql = 'SELECT code FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3699
+        $resql = $this->db->query($sql);
3700
+        if ($resql)
3701
+        {
3702
+            $num = $this->db->num_rows($resql);
3703
+            if ($num > 0)
3704
+            {
3705
+                $res = $this->db->fetch_object($resql);
3706
+                return 'Incoterm : '.$res->code.' - '.$this->location_incoterms;
3707
+            }
3708
+            else
3709
+            {
3710
+                return '';
3711
+            }
3712
+        }
3713
+        else
3714
+        {
3715
+            $this->errors[] = $this->db->lasterror();
3716
+            return false;
3717
+        }
3718
+    }
3719
+
3720
+    /**
3721
+     *    Define incoterms values of current object
3722
+     *
3723
+     *    @param	int		$id_incoterm     Id of incoterm to set or '' to remove
3724
+     * 	  @param 	string  $location		 location of incoterm
3725
+     *    @return	int     		<0 if KO, >0 if OK
3726
+     */
3727
+    function setIncoterms($id_incoterm, $location)
3728
+    {
3729
+        if ($this->id && $this->table_element)
3730
+        {
3731
+            $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3732
+            $sql.= " SET fk_incoterms = ".($id_incoterm > 0 ? $id_incoterm : "null");
3733
+            $sql.= ", location_incoterms = ".($id_incoterm > 0 ? "'".$this->db->escape($location)."'" : "null");
3734
+            $sql.= " WHERE rowid = " . $this->id;
3735
+            dol_syslog(get_class($this).'::setIncoterms', LOG_DEBUG);
3736
+            $resql=$this->db->query($sql);
3737
+            if ($resql)
3738
+            {
3739
+                $this->fk_incoterms = $id_incoterm;
3740
+                $this->location_incoterms = $location;
3741
+
3742
+                $sql = 'SELECT libelle FROM '.MAIN_DB_PREFIX.'c_incoterms WHERE rowid = '.(int) $this->fk_incoterms;
3743
+                $res = $this->db->query($sql);
3744
+                if ($res)
3745
+                {
3746
+                    $obj = $this->db->fetch_object($res);
3747
+                    $this->libelle_incoterms = $obj->libelle;
3748
+                }
3749
+                return 1;
3750
+            }
3751
+            else
3752
+            {
3753
+                $this->errors[] = $this->db->lasterror();
3754
+                return -1;
3755
+            }
3756
+        }
3757
+        else return -1;
3758
+    }
3759
+
3760
+
3761
+    // --------------------
3762
+    // TODO: All functions here must be redesigned and moved as they are not business functions but output functions
3763
+    // --------------------
3764
+
3765
+    /* This is to show add lines */
3766
+
3767
+    /**
3768
+     *	Show add free and predefined products/services form
3769
+     *
3770
+     *  @param	int		        $dateSelector       1=Show also date range input fields
3771
+     *  @param	Societe			$seller				Object thirdparty who sell
3772
+     *  @param	Societe			$buyer				Object thirdparty who buy
3773
+     *	@return	void
3774
+     */
3775
+    function formAddObjectLine($dateSelector, $seller, $buyer)
3776
+    {
3777
+        global $conf,$user,$langs,$object,$hookmanager;
3778
+        global $form,$bcnd,$var;
3779
+
3780
+        // Line extrafield
3781
+        require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3782
+        $extrafieldsline = new AlExtraFields($this->db);
3783
+        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3784
+
3785
+        // Output template part (modules that overwrite templates must declare this into descriptor)
3786
+        // Use global variables + $dateSelector + $seller and $buyer
3787
+        $dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
3788
+        foreach($dirtpls as $reldir)
3789
+        {
3790
+            $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php');
3791
+            if (empty(Globals::$conf->file->strict_mode)) {
3792
+                $res=@include $tpl;
3793
+            } else {
3794
+                $res=include $tpl; // for debug
3795
+            }
3796
+            if ($res) break;
3797
+        }
3798
+    }
3799
+
3800
+
3801
+
3802
+    /* This is to show array of line of details */
3803
+
3804
+
3805
+    /**
3806
+     *	Return HTML table for object lines
3807
+     *	TODO Move this into an output class file (htmlline.class.php)
3808
+     *	If lines are into a template, title must also be into a template
3809
+     *	But for the moment we don't know if it's possible as we keep a method available on overloaded objects.
3810
+     *
3811
+     *	@param	string		$action				Action code
3812
+     *	@param  string		$seller            	Object of seller third party
3813
+     *	@param  string  	$buyer             	Object of buyer third party
3814
+     *	@param	int			$selected		   	Object line selected
3815
+     *	@param  int	    	$dateSelector      	1=Show also date range input fields
3816
+     *	@return	void
3817
+     */
3818
+    function printObjectLines($action, $seller, $buyer, $selected=0, $dateSelector=0)
3819
+    {
3820
+        global $conf, $hookmanager, $langs, $user;
3821
+        // TODO We should not use global var for this !
3822
+        global $inputalsopricewithtax, $usemargins, $disableedit, $disablemove, $disableremove, $outputalsopricetotalwithtax;
3823
+
3824
+        // Define usemargins
3825
+        $usemargins=0;
3826
+        if (!empty(Globals::$conf->margin->enabled) && !empty($this->element) && in_array($this->element, array('facture', 'propal', 'commande')))
3827
+            $usemargins = 1;
3828
+
3829
+        $num = count($this->lines);
3830
+
3831
+        // Line extrafield
3832
+        require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3833
+        $extrafieldsline = new AlExtraFields($this->db);
3834
+        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3835
+
3836
+        $parameters = array('num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3837
+        $reshook = $hookmanager->executeHooks('printObjectLineTitle', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
3838
+        if (empty($reshook))
3839
+        {
3840
+            // Title line
3841
+            print "<thead>\n";
3842
+
3843
+            print '<tr class="liste_titre nodrag nodrop">';
3844
+
3845
+            // Adds a line numbering column
3846
+            if (!empty(Globals::$conf->global->MAIN_VIEW_LINE_NUMBER))
3847
+                print '<td class="linecolnum" align="center" width="5">&nbsp;</td>';
3848
+
3849
+            // Description
3850
+            print '<td class="linecoldescription">'.$langs->trans('Description').'</td>';
3851
+
3852
+            if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier' || $this->element == 'invoice_supplier')
3853
+            {
3854
+                print '<td class="linerefsupplier"><span id="title_fourn_ref">'.$langs->trans("SupplierRef").'</span></td>';
3855
+            }
3856
+
3857
+            // VAT
3858
+            print '<td class="linecolvat" align="right" width="80">'.$langs->trans('VAT').'</td>';
3859
+
3860
+            // Price HT
3861
+            print '<td class="linecoluht" align="right" width="80">'.$langs->trans('PriceUHT').'</td>';
3862
+
3863
+            // Multicurrency
3864
+            if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3865
+                print '<td class="linecoluht_currency" align="right" width="80">' . $langs->trans('PriceUHTCurrency', $this->multicurrency_code) . '</td>';
3866
+
3867
+            if ($inputalsopricewithtax) print '<td align="right" width="80">'.$langs->trans('PriceUTTC').'</td>';
3868
+
3869
+            // Qty
3870
+            print '<td class="linecolqty" align="right">'.$langs->trans('Qty').'</td>';
3871
+
3872
+            if (Globals::$conf->global->PRODUCT_USE_UNITS) {
3873
+                print '<td class="linecoluseunit" align="left">'.$langs->trans('Unit').'</td>';
3874
+            }
3875
+
3876
+            // Reduction short
3877
+            print '<td class="linecoldiscount" align="right">'.$langs->trans('ReductionShort').'</td>';
3878
+
3879
+            if ($this->situation_cycle_ref) {
3880
+                print '<td class="linecolcycleref" align="right">' . $langs->trans('Progress') . '</td>';
3881
+            }
3882
+
3883
+            if ($usemargins && !empty(Globals::$conf->margin->enabled) && empty($user->societe_id)) {
3884
+                if (!empty($user->rights->margins->creer))
3885
+                {
3886
+                    if (Globals::$conf->global->MARGIN_TYPE == "1")
3887
+                        print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('BuyingPrice').'</td>';
3888
+                    else
3889
+                        print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('CostPrice').'</td>';
3890
+                }
3891
+
3892
+                if (!empty(Globals::$conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous)
3893
+                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarginRate').'</td>';
3894
+                if (!empty(Globals::$conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous)
3895
+                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarkRate').'</td>';
3896
+            }
3897
+
3898
+            // Total HT
3899
+            print '<td class="linecolht" align="right">'.$langs->trans('TotalHTShort').'</td>';
3900
+
3901
+            // Multicurrency
3902
+            if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3903
+                print '<td class="linecoltotalht_currency" align="right">' . $langs->trans('TotalHTShortCurrency', $this->multicurrency_code) . '</td>';
3904
+
3905
+            if ($outputalsopricetotalwithtax) print '<td align="right" width="80">'.$langs->trans('TotalTTCShort').'</td>';
3906
+
3907
+            print '<td class="linecoledit"></td>';  // No width to allow autodim
3908
+
3909
+            print '<td class="linecoldelete" width="10"></td>';
3910
+
3911
+            print '<td class="linecolmove" width="10"></td>';
3912
+
3913
+            if($action == 'selectlines')
3914
+            {
3915
+                print '<td class="linecolcheckall" align="center">';
3916
+                print '<input type="checkbox" class="linecheckboxtoggle" />';
3917
+                print '<script type="text/javascript">$(document).ready(function() {$(".linecheckboxtoggle").click(function() {var checkBoxes = $(".linecheckbox");checkBoxes.prop("checked", this.checked);})});</script>';
3918
+                print '</td>';
3919
+            }
3920
+
3921
+            print "</tr>\n";
3922
+            print "</thead>\n";
3923
+        }
3924
+
3925
+        $var = true;
3926
+        $i	 = 0;
3927
+
3928
+        print "<tbody>\n";
3929
+        foreach ($this->lines as $line)
3930
+        {
3931
+            //Line extrafield
3932
+            $line->fetch_optionals();
3933
+
3934
+            //if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
3935
+            if (is_object($hookmanager))   // Old code is commented on preceding line.
3936
+            {
3937
+                if (empty($line->fk_parent_line))
3938
+                {
3939
+                    $parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3940
+                    $reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3941
+                }
3942
+                else
3943
+                {
3944
+                    $parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline, 'fk_parent_line'=>$line->fk_parent_line);
3945
+                    $reshook = $hookmanager->executeHooks('printObjectSubLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3946
+                }
3947
+            }
3948
+            if (empty($reshook))
3949
+            {
3950
+                $this->printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected,$extrafieldsline);
3951
+            }
3952
+
3953
+            $i++;
3954
+        }
3955
+        print "</tbody>\n";
3956
+    }
3957
+
3958
+    /**
3959
+     *	Return HTML content of a detail line
3960
+     *	TODO Move this into an output class file (htmlline.class.php)
3961
+     *
3962
+     *	@param	string		$action				GET/POST action
3963
+     *	@param CommonObjectLine $line		       	Selected object line to output
3964
+     *	@param  string	    $var               	Is it a an odd line (true)
3965
+     *	@param  int		    $num               	Number of line (0)
3966
+     *	@param  int		    $i					I
3967
+     *	@param  int		    $dateSelector      	1=Show also date range input fields
3968
+     *	@param  string	    $seller            	Object of seller third party
3969
+     *	@param  string	    $buyer             	Object of buyer third party
3970
+     *	@param	int			$selected		   	Object line selected
3971
+     *  @param  int			$extrafieldsline	Object of extrafield line attribute
3972
+     *	@return	void
3973
+     */
3974
+    function printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected=0,$extrafieldsline=0)
3975
+    {
3976
+        global $conf,$langs,$user,$object,$hookmanager;
3977
+        global $form,$bc,$bcdd;
3978
+        global $object_rights, $disableedit, $disablemove, $disableremove;   // TODO We should not use global var for this !
3979
+
3980
+        $object_rights = $this->getRights();
3981
+
3982
+        $element=$this->element;
3983
+
3984
+        $text=''; $description=''; $type=0;
3985
+
3986
+        // Show product and description
3987
+        $type=(! empty($line->product_type)?$line->product_type:$line->fk_product_type);
3988
+        // Try to enhance type detection using date_start and date_end for free lines where type was not saved.
3989
+        if (! empty($line->date_start)) $type=1; // deprecated
3990
+        if (! empty($line->date_end)) $type=1; // deprecated
3991
+
3992
+        // Ligne en mode visu
3993
+        if ($action != 'editline' || $selected != $line->id)
3994
+        {
3995
+            // Product
3996
+            if ($line->fk_product > 0)
3997
+            {
3998
+                $product_static = new Product($this->db);
3999
+                $product_static->fetch($line->fk_product);
4000
+
4001
+                $product_static->ref = $line->ref; //can change ref in hook
4002
+                $product_static->label = $line->label; //can change label in hook
4003
+                $text=$product_static->getNomUrl(1);
4004
+
4005
+                // Define output language and label
4006
+                if (!empty(Globals::$conf->global->MAIN_MULTILANGS)) {
4007
+                    if (! is_object($this->thirdparty))
4008
+                    {
4009
+                        dol_print_error('','Error: Method printObjectLine was called on an object and object->fetch_thirdparty was not done before');
4010
+                        return;
4011
+                    }
4012
+
4013
+                    $prod = new Product($this->db);
4014
+                    $prod->fetch($line->fk_product);
4015
+
4016
+                    $outputlangs = $langs;
4017
+                    $newlang='';
4018
+                    if (empty($newlang) && GETPOST('lang_id','aZ09')) $newlang=GETPOST('lang_id','aZ09');
4019
+                    if (!empty(Globals::$conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang))
4020
+                        $newlang = $this->thirdparty->default_lang;  // For language to language of customer
4021
+                    if (! empty($newlang))
4022
+                    {
4023
+                        $outputlangs = new Translate("",$conf);
4024
+                        $outputlangs->setDefaultLang($newlang);
4025
+                    }
4026
+
4027
+                    $label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $line->product_label;
4028
+                }
4029
+                else
4030
+                {
4031
+                    $label = $line->product_label;
4032
+                }
4033
+
4034
+                $text.= ' - '.(! empty($line->label)?$line->label:$label);
4035
+                $description .= (!empty(Globals::$conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($line->description)); // Description is what to show on popup. We shown nothing if already into desc.
4036
+            }
4037
+
4038
+            $line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
4039
+
4040
+            // Output template part (modules that overwrite templates must declare this into descriptor)
4041
+            // Use global variables + $dateSelector + $seller and $buyer
4042
+            $dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4043
+            foreach($dirtpls as $reldir)
4044
+            {
4045
+                $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php');
4046
+                if (empty(Globals::$conf->file->strict_mode)) {
4047
+                    $res=@include $tpl;
4048
+                } else {
4049
+                    $res=include $tpl; // for debug
4050
+                }
4051
+                if ($res) break;
4052
+            }
4053
+        }
4054
+
4055
+        // Ligne en mode update
4056
+        if ($this->statut == 0 && $action == 'editline' && $selected == $line->id)
4057
+        {
4058
+            $label = (! empty($line->label) ? $line->label : (($line->fk_product > 0) ? $line->product_label : ''));
4059
+            $placeholder=' placeholder="'.$langs->trans("Label").'"';
4060
+
4061
+            $line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
4062
+
4063
+            // Output template part (modules that overwrite templates must declare this into descriptor)
4064
+            // Use global variables + $dateSelector + $seller and $buyer
4065
+            $dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4066
+            foreach($dirtpls as $reldir)
4067
+            {
4068
+                $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php');
4069
+                if (empty(Globals::$conf->file->strict_mode)) {
4070
+                    $res=@include $tpl;
4071
+                } else {
4072
+                    $res=include $tpl; // for debug
4073
+                }
4074
+                if ($res) break;
4075
+            }
4076
+        }
4077
+    }
4078
+
4079
+
4080
+    /* This is to show array of line of details of source object */
4081
+
4082
+
4083
+    /**
4084
+     * 	Return HTML table table of source object lines
4085
+     *  TODO Move this and previous function into output html class file (htmlline.class.php).
4086
+     *  If lines are into a template, title must also be into a template
4087
+     *  But for the moment we don't know if it's possible, so we keep the method available on overloaded objects.
4088
+     *
4089
+     *	@param	string		$restrictlist		''=All lines, 'services'=Restrict to services only
4090
+     *  @return	void
4091
+     */
4092
+    function printOriginLinesList($restrictlist='')
4093
+    {
4094
+        global $langs, $hookmanager, $conf;
4095
+
4096
+        print '<tr class="liste_titre">';
4097
+        print '<td>'.$langs->trans('Ref').'</td>';
4098
+        print '<td>'.$langs->trans('Description').'</td>';
4099
+        print '<td align="right">'.$langs->trans('VATRate').'</td>';
4100
+        print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
4101
+        if (!empty(Globals::$conf->multicurrency->enabled))
4102
+            print '<td align="right">' . $langs->trans('PriceUHTCurrency') . '</td>';
4103
+        print '<td align="right">'.$langs->trans('Qty').'</td>';
4104
+        if (Globals::$conf->global->PRODUCT_USE_UNITS) {
4105
+            print '<td align="left">'.$langs->trans('Unit').'</td>';
4106
+        }
4107
+        print '<td align="right">'.$langs->trans('ReductionShort').'</td></tr>';
4108
+
4109
+        $var = true;
4110
+        $i	 = 0;
4111
+
4112
+        if (! empty($this->lines))
4113
+        {
4114
+            foreach ($this->lines as $line)
4115
+            {
4116
+                if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
4117
+                {
4118
+                    if (empty($line->fk_parent_line))
4119
+                    {
4120
+                        $parameters=array('line'=>$line,'var'=>$var,'i'=>$i);
4121
+                        $action='';
4122
+                        $hookmanager->executeHooks('printOriginObjectLine',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
4123
+                    }
4124
+                }
4125
+                else
4126
+                {
4127
+                    $this->printOriginLine($line, $var, $restrictlist);
4128
+                }
4129
+
4130
+                $i++;
4131
+            }
4132
+        }
4133
+    }
4134
+
4135
+    /**
4136
+     * 	Return HTML with a line of table array of source object lines
4137
+     *  TODO Move this and previous function into output html class file (htmlline.class.php).
4138
+     *  If lines are into a template, title must also be into a template
4139
+     *  But for the moment we don't know if it's possible as we keep a method available on overloaded objects.
4140
+     *
4141
+     * 	@param	CommonObjectLine	$line				Line
4142
+     * 	@param	string				$var				Var
4143
+     *	@param	string				$restrictlist		''=All lines, 'services'=Restrict to services only (strike line if not)
4144
+     * 	@return	void
4145
+     */
4146
+    function printOriginLine($line, $var, $restrictlist='')
4147
+    {
4148
+        global $langs, $conf;
4149
+
4150
+        //var_dump($line);
4151
+        if (!empty($line->date_start))
4152
+        {
4153
+            $date_start=$line->date_start;
4154
+        }
4155
+        else
4156
+        {
4157
+            $date_start=$line->date_debut_prevue;
4158
+            if ($line->date_debut_reel) $date_start=$line->date_debut_reel;
4159
+        }
4160
+        if (!empty($line->date_end))
4161
+        {
4162
+            $date_end=$line->date_end;
4163
+        }
4164
+        else
4165
+        {
4166
+            $date_end=$line->date_fin_prevue;
4167
+            if ($line->date_fin_reel) $date_end=$line->date_fin_reel;
4168
+        }
4169
+
4170
+        $this->tpl['label'] = '';
4171
+        if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow');
4172
+
4173
+        if (($line->info_bits & 2) == 2)  // TODO Not sure this is used for source object
4174
+        {
4175
+            $discount=new DiscountAbsolute($this->db);
4176
+            $discount->fk_soc = $this->socid;
4177
+            $this->tpl['label'].= $discount->getNomUrl(0,'discount');
4178
+        }
4179
+        else if (! empty($line->fk_product))
4180
+        {
4181
+            $productstatic = new Product($this->db);
4182
+            $productstatic->id = $line->fk_product;
4183
+            $productstatic->ref = $line->ref;
4184
+            $productstatic->type = $line->fk_product_type;
4185
+            if(empty($productstatic->ref)){
4186
+                $line->fetch_product();
4187
+                $productstatic = $line->product;
4188
+            }
4189
+			
4190
+            $this->tpl['label'].= $productstatic->getNomUrl(1);
4191
+            $this->tpl['label'].= ' - '.(! empty($line->label)?$line->label:$line->product_label);
4192
+            // Dates
4193
+            if ($line->product_type == 1 && ($date_start || $date_end))
4194
+            {
4195
+                $this->tpl['label'].= get_date_range($date_start,$date_end);
4196
+            }
4197
+        }
4198
+        else
4199
+        {
4200
+            $this->tpl['label'].= ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
4201
+            if (!empty($line->desc)) {
4202
+                $this->tpl['label'].=$line->desc;
4203
+            }else {
4204
+                $this->tpl['label'].= ($line->label ? '&nbsp;'.$line->label : '');
4205
+            }
4206
+			
4207
+            // Dates
4208
+            if ($line->product_type == 1 && ($date_start || $date_end))
4209
+            {
4210
+                $this->tpl['label'].= get_date_range($date_start,$date_end);
4211
+            }
4212
+        }
4213
+
4214
+        if (! empty($line->desc))
4215
+        {
4216
+            if ($line->desc == '(CREDIT_NOTE)')  // TODO Not sure this is used for source object
4217
+            {
4218
+                $discount=new DiscountAbsolute($this->db);
4219
+                $discount->fetch($line->fk_remise_except);
4220
+                $this->tpl['description'] = $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
4221
+            }
4222
+            elseif ($line->desc == '(DEPOSIT)')  // TODO Not sure this is used for source object
4223
+            {
4224
+                $discount=new DiscountAbsolute($this->db);
4225
+                $discount->fetch($line->fk_remise_except);
4226
+                $this->tpl['description'] = $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
4227
+            }
4228
+            elseif ($line->desc == '(EXCESS RECEIVED)')
4229
+            {
4230
+                $discount=new DiscountAbsolute($this->db);
4231
+                $discount->fetch($line->fk_remise_except);
4232
+                $this->tpl['description'] = $langs->transnoentities("DiscountFromExcessReceived",$discount->getNomUrl(0));
4233
+            }
4234
+            elseif ($line->desc == '(EXCESS PAID)')
4235
+            {
4236
+                $discount=new DiscountAbsolute($this->db);
4237
+                $discount->fetch($line->fk_remise_except);
4238
+                $this->tpl['description'] = $langs->transnoentities("DiscountFromExcessPaid",$discount->getNomUrl(0));
4239
+            }
4240
+            else
4241
+            {
4242
+                $this->tpl['description'] = dol_trunc($line->desc,60);
4243
+            }
4244
+        }
4245
+        else
4246
+        {
4247
+            $this->tpl['description'] = '&nbsp;';
4248
+        }
4249
+
4250
+        // VAT Rate
4251
+        $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
4252
+        $this->tpl['vat_rate'] .= (($line->info_bits & 1) == 1) ? '*' : '';
4253
+        if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
4254
+
4255
+        $this->tpl['price'] = price($line->subprice);
4256
+        $this->tpl['multicurrency_price'] = price($line->multicurrency_subprice);
4257
+        $this->tpl['qty'] = (($line->info_bits & 2) != 2) ? $line->qty : '&nbsp;';
4258
+        if (Globals::$conf->global->PRODUCT_USE_UNITS)
4259
+            $this->tpl['unit'] = $langs->transnoentities($line->getLabelOfUnit('long'));
4260
+        $this->tpl['remise_percent'] = (($line->info_bits & 2) != 2) ? vatrate($line->remise_percent, true) : '&nbsp;';
4261
+
4262
+        // Is the line strike or not
4263
+        $this->tpl['strike']=0;
4264
+        if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) $this->tpl['strike']=1;
4265
+
4266
+        // Output template part (modules that overwrite templates must declare this into descriptor)
4267
+        // Use global variables + $dateSelector + $seller and $buyer
4268
+        $dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4269
+        foreach($dirtpls as $reldir)
4270
+        {
4271
+            $tpl = dol_buildpath($reldir.'/originproductline.tpl.php');
4272
+            if (empty(Globals::$conf->file->strict_mode)) {
4273
+                $res=@include $tpl;
4274
+            } else {
4275
+                $res=include $tpl; // for debug
4276
+            }
4277
+            if ($res) break;
4278
+        }
4279
+    }
4280
+
4281
+
4282
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4283
+    /**
4284
+     *	Add resources to the current object : add entry into llx_element_resources
4285
+     *	Need $this->element & $this->id
4286
+     *
4287
+     *	@param		int		$resource_id		Resource id
4288
+     *	@param		string	$resource_type		'resource'
4289
+     *	@param		int		$busy				Busy or not
4290
+     *	@param		int		$mandatory			Mandatory or not
4291
+     *	@return		int							<=0 if KO, >0 if OK
4292
+     */
4293
+    function add_element_resource($resource_id, $resource_type, $busy=0, $mandatory=0)
4294
+    {
4295
+        // phpcs:enable
4296
+        $this->db->begin();
4297
+
4298
+        $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_resources (";
4299
+        $sql.= "resource_id";
4300
+        $sql.= ", resource_type";
4301
+        $sql.= ", element_id";
4302
+        $sql.= ", element_type";
4303
+        $sql.= ", busy";
4304
+        $sql.= ", mandatory";
4305
+        $sql.= ") VALUES (";
4306
+        $sql.= $resource_id;
4307
+        $sql.= ", '".$this->db->escape($resource_type)."'";
4308
+        $sql.= ", '".$this->db->escape($this->id)."'";
4309
+        $sql.= ", '".$this->db->escape($this->element)."'";
4310
+        $sql.= ", '".$this->db->escape($busy)."'";
4311
+        $sql.= ", '".$this->db->escape($mandatory)."'";
4312
+        $sql.= ")";
4313
+
4314
+        dol_syslog(get_class($this)."::add_element_resource", LOG_DEBUG);
4315
+        if ($this->db->query($sql))
4316
+        {
4317
+            $this->db->commit();
4318
+            return 1;
4319
+        }
4320
+        else
4321
+        {
4322
+            $this->error=$this->db->lasterror();
4323
+            $this->db->rollback();
4324
+            return  0;
4325
+        }
4326
+    }
4327
+
4328
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4329
+    /**
4330
+     *    Delete a link to resource line
4331
+     *
4332
+     *    @param	int		$rowid			Id of resource line to delete
4333
+     *    @param	int		$element		element name (for trigger) TODO: use $this->element into commonobject class
4334
+     *    @param	int		$notrigger		Disable all triggers
4335
+     *    @return   int						>0 if OK, <0 if KO
4336
+     */
4337
+    function delete_resource($rowid, $element, $notrigger=0)
4338
+    {
4339
+        // phpcs:enable
4340
+        global $user;
4341
+
4342
+        $this->db->begin();
4343
+
4344
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_resources";
4345
+        $sql.= " WHERE rowid=".$rowid;
4346
+
4347
+        dol_syslog(get_class($this)."::delete_resource", LOG_DEBUG);
4348
+
4349
+        $resql=$this->db->query($sql);
4350
+        if (! $resql)
4351
+        {
4352
+            $this->error=$this->db->lasterror();
4353
+            $this->db->rollback();
4354
+            return -1;
4355
+        }
4356
+        else
4357
+        {
4358
+            if (! $notrigger)
4359
+            {
4360
+                $result=$this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user);
4361
+                if ($result < 0) { $this->db->rollback(); return -1; }
4362
+            }
4363
+            $this->db->commit();
4364
+            return 1;
4365
+        }
4366
+    }
4367
+
4368
+
4369
+    /**
4370
+     * Overwrite magic function to solve problem of cloning object that are kept as references
4371
+     *
4372
+     * @return void
4373
+     */
4374
+    function __clone()
4375
+    {
4376
+        // Force a copy of this->lines, otherwise it will point to same object.
4377
+        if (isset($this->lines) && is_array($this->lines))
4378
+        {
4379
+            $nboflines=count($this->lines);
4380
+            for($i=0; $i < $nboflines; $i++)
4381
+            {
4382
+                $this->lines[$i] = clone $this->lines[$i];
4383
+            }
4384
+        }
4385
+    }
4386
+
4387
+    /**
4388
+     * Common function for all objects extending CommonObject for generating documents
4389
+     *
4390
+     * @param 	string 		$modelspath 	Relative folder where generators are placed
4391
+     * @param 	string 		$modele 		Generator to use. Caller must set it to obj->modelpdf or GETPOST('modelpdf') for example.
4392
+     * @param 	Translate 	$outputlangs 	Output language to use
4393
+     * @param 	int 		$hidedetails 	1 to hide details. 0 by default
4394
+     * @param 	int 		$hidedesc 		1 to hide product description. 0 by default
4395
+     * @param 	int 		$hideref 		1 to hide product reference. 0 by default
4396
+     * @param   null|array  $moreparams     Array to provide more information
4397
+     * @return 	int 						>0 if OK, <0 if KO
4398
+     * @see	addFileIntoDatabaseIndex
4399
+     */
4400
+    protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
4401
+    {
4402
+        global $conf, $langs, $user;
4403
+
4404
+        $srctemplatepath='';
4405
+
4406
+        // Increase limit for PDF build
4407
+        $err=error_reporting();
4408
+        error_reporting(0);
4409
+        @set_time_limit(120);
4410
+        error_reporting($err);
4411
+
4412
+        // If selected model is a filename template (then $modele="modelname" or "modelname:filename")
4413
+        $tmp=explode(':',$modele,2);
4414
+        if (! empty($tmp[1]))
4415
+        {
4416
+            $modele=$tmp[0];
4417
+            $srctemplatepath=$tmp[1];
4418
+        }
4419
+
4420
+        // Search template files
4421
+        $file=''; $classname=''; $filefound=0;
4422
+        $dirmodels=array('/');
4423
+        if (is_array(Globals::$conf->modules_parts['models']))
4424
+            $dirmodels = array_merge($dirmodels, Globals::$conf->modules_parts['models']);
4425
+        foreach($dirmodels as $reldir)
4426
+        {
4427
+            foreach(array('doc','pdf') as $prefix)
4428
+            {
4429
+                if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php";     // Member module use prefix_module.class.php
4430
+                else $file = $prefix."_".$modele.".modules.php";
4431
+
4432
+                // On verifie l'emplacement du modele
4433
+                $file=dol_buildpath($reldir.$modelspath.$file,0);
4434
+                if (file_exists($file))
4435
+                {
4436
+                    $filefound=1;
4437
+                    $classname=$prefix.'_'.$modele;
4438
+                    break;
4439
+                }
4440
+            }
4441
+            if ($filefound) break;
4442
+        }
4443
+
4444
+        // If generator was found
4445
+        if ($filefound)
4446
+        {
4447
+            global $db;  // Required to solve a conception default in commonstickergenerator.class.php making an include of code using $db
4448
+
4449
+            require_once $file;
4450
+
4451
+            $obj = new $classname($this->db);
4452
+
4453
+            // If generator is ODT, we must have srctemplatepath defined, if not we set it.
4454
+            if ($obj->type == 'odt' && empty($srctemplatepath))
4455
+            {
4456
+                $varfortemplatedir=$obj->scandir;
4457
+                if ($varfortemplatedir && !empty(Globals::$conf->global->$varfortemplatedir)) {
4458
+                    $dirtoscan = Globals::$conf->global->$varfortemplatedir;
4459
+
4460
+                    $listoffiles=array();
4461
+
4462
+                    // Now we add first model found in directories scanned
4463
+                    $listofdir=explode(',',$dirtoscan);
4464
+                    foreach($listofdir as $key => $tmpdir)
4465
+                    {
4466
+                        $tmpdir=trim($tmpdir);
4467
+                        $tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir);
4468
+                        if (! $tmpdir) { unset($listofdir[$key]); continue; }
4469
+                        if (is_dir($tmpdir))
4470
+                        {
4471
+                            $tmpfiles=dol_dir_list($tmpdir,'files',0,'\.od(s|t)$','','name',SORT_ASC,0);
4472
+                            if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
4473
+                        }
4474
+                    }
4475
+
4476
+                    if (count($listoffiles))
4477
+                    {
4478
+                        foreach($listoffiles as $record)
4479
+                        {
4480
+                            $srctemplatepath=$record['fullname'];
4481
+                            break;
4482
+                        }
4483
+                    }
4484
+                }
4485
+
4486
+                if (empty($srctemplatepath))
4487
+                {
4488
+                    $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined';
4489
+                    return -1;
4490
+                }
4491
+            }
4492
+
4493
+            if ($obj->type == 'odt' && ! empty($srctemplatepath))
4494
+            {
4495
+                if (! dol_is_file($srctemplatepath))
4496
+                {
4497
+                    $this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound';
4498
+                    return -1;
4499
+                }
4500
+            }
4501
+
4502
+            // We save charset_output to restore it because write_file can change it if needed for
4503
+            // output format that does not support UTF8.
4504
+            $sav_charset_output=$outputlangs->charset_output;
4505
+
4506
+            if (in_array(get_class($this), array('Adherent')))
4507
+            {
4508
+                $arrayofrecords = array();   // The write_file of templates of adherent class need this var
4509
+                $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams);
4510
+            }
4511
+            else
4512
+            {
4513
+                $resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $moreparams);
4514
+            }
4515
+            // After call of write_file $obj->result['fullpath'] is set with generated file. It will be used to update the ECM database index.
4516
+
4517
+            if ($resultwritefile > 0)
4518
+            {
4519
+                $outputlangs->charset_output=$sav_charset_output;
4520
+
4521
+                // We delete old preview
4522
+                require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
4523
+                dol_delete_preview($this);
4524
+
4525
+                // Index file in database
4526
+                if (! empty($obj->result['fullpath']))
4527
+                {
4528
+                    $destfull = $obj->result['fullpath'];
4529
+                    $upload_dir = dirname($destfull);
4530
+                    $destfile = basename($destfull);
4531
+                    $rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $upload_dir);
4532
+
4533
+                    if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir))     // If not a tmp dir
4534
+                    {
4535
+                        $filename = basename($destfile);
4536
+                        $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
4537
+                        $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
4538
+
4539
+                        include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
4540
+                        $ecmfile=new EcmFiles($this->db);
4541
+                        $result = $ecmfile->fetch(0, '', ($rel_dir?$rel_dir.'/':'').$filename);
4542
+
4543
+                        // Set the public "share" key
4544
+                        $setsharekey = false;
4545
+                        if ($this->element == 'propal')
4546
+                        {
4547
+                            $useonlinesignature = Globals::$conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok
4548
+                            if ($useonlinesignature) $setsharekey=true;
4549
+                            if (!empty(Globals::$conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD))
4550
+                                $setsharekey = true;
4551
+                        }
4552
+                        if ($this->element == 'commande' && !empty(Globals::$conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD))
4553
+                            $setsharekey = true;
4554
+                        if ($this->element == 'facture' && !empty(Globals::$conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD))
4555
+                            $setsharekey = true;
4556
+                        if ($this->element == 'bank_account' && !empty(Globals::$conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD))
4557
+                            $setsharekey = true;
4558
+
4559
+                        if ($setsharekey)
4560
+                        {
4561
+                            if (empty($ecmfile->share))	// Because object not found or share not set yet
4562
+                            {
4563
+                                require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
4564
+                                $ecmfile->share = getRandomPassword(true);
4565
+                            }
4566
+                        }
4567
+
4568
+                        if ($result > 0)
4569
+                        {
4570
+                            $ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4571
+                            $ecmfile->fullpath_orig = '';
4572
+                            $ecmfile->gen_or_uploaded = 'generated';
4573
+                            $ecmfile->description = '';    // indexed content
4574
+                            $ecmfile->keyword = '';        // keyword content
4575
+                            $result = $ecmfile->update($user);
4576
+                            if ($result < 0)
4577
+                            {
4578
+                                setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
4579
+                            }
4580
+                        }
4581
+                        else
4582
+                        {
4583
+                            $ecmfile->entity = Globals::$conf->entity;
4584
+                            $ecmfile->filepath = $rel_dir;
4585
+                            $ecmfile->filename = $filename;
4586
+                            $ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4587
+                            $ecmfile->fullpath_orig = '';
4588
+                            $ecmfile->gen_or_uploaded = 'generated';
4589
+                            $ecmfile->description = '';    // indexed content
4590
+                            $ecmfile->keyword = '';        // keyword content
4591
+                            $ecmfile->src_object_type = $this->table_element;
4592
+                            $ecmfile->src_object_id   = $this->id;
4593
+
4594
+                            $result = $ecmfile->create($user);
4595
+                            if ($result < 0)
4596
+                            {
4597
+                                setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
4598
+                            }
4599
+                        }
4600
+
4601
+                        /*$this->result['fullname']=$destfull;
4602
+						$this->result['filepath']=$ecmfile->filepath;
4603
+						$this->result['filename']=$ecmfile->filename;*/
4604
+                        //var_dump($obj->update_main_doc_field);exit;
4605
+
4606
+                        // Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set)
4607
+                        $update_main_doc_field=0;
4608
+                        if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1;
4609
+                        if ($update_main_doc_field && ! empty($this->table_element))
4610
+                        {
4611
+                            $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".($ecmfile->filepath.'/'.$ecmfile->filename)."'";
4612
+                            $sql.= ' WHERE rowid = '.$this->id;
4613
+                            $resql = $this->db->query($sql);
4614
+                            if (! $resql) dol_print_error($this->db);
4615
+                        }
4616
+                    }
4617
+                }
4618
+                else
4619
+                {
4620
+                    dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING);
4621
+                }
4622
+
4623
+                // Success in building document. We build meta file.
4624
+                dol_meta_create($this);
4625
+
4626
+                return 1;
4627
+            }
4628
+            else
4629
+            {
4630
+                $outputlangs->charset_output=$sav_charset_output;
4631
+                dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors);
4632
+                return -1;
4633
+            }
4634
+        }
4635
+        else
4636
+        {
4637
+            $this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
4638
+            dol_print_error('',$this->error);
4639
+            return -1;
4640
+        }
4641
+    }
4642
+
4643
+    /**
4644
+     *  Build thumb
4645
+     *  @TODO Move this into files.lib.php
4646
+     *
4647
+     *  @param      string	$file           Path file in UTF8 to original file to create thumbs from.
4648
+     *	@return		void
4649
+     */
4650
+    function addThumbs($file)
4651
+    {
4652
+        global $maxwidthsmall, $maxheightsmall, $maxwidthmini, $maxheightmini, $quality;
4653
+
4654
+        require_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';		// This define also $maxwidthsmall, $quality, ...
4655
+
4656
+        $file_osencoded=dol_osencode($file);
4657
+        if (file_exists($file_osencoded))
4658
+        {
4659
+            // Create small thumbs for company (Ratio is near 16/9)
4660
+            // Used on logon for example
4661
+            vignette($file_osencoded, $maxwidthsmall, $maxheightsmall, '_small', $quality);
4662
+
4663
+            // Create mini thumbs for company (Ratio is near 16/9)
4664
+            // Used on menu or for setup page for example
4665
+            vignette($file_osencoded, $maxwidthmini, $maxheightmini, '_mini', $quality);
4666
+        }
4667
+    }
4668
+
4669
+
4670
+    /* Functions common to commonobject and commonobjectline */
4671
+
4672
+    /* For default values */
4673
+
4674
+    /**
4675
+     * Return the default value to use for a field when showing the create form of object.
4676
+     * Return values in this order:
4677
+     * 1) If parameter is available into POST, we return it first.
4678
+     * 2) If not but an alternate value was provided as parameter of function, we return it.
4679
+     * 3) If not but a constant Globals::$conf->global->OBJECTELEMENT_FIELDNAME is set, we return it (It is better to use the dedicated table).
4680
+     * 4) Return value found into database (TODO No yet implemented)
4681
+     *
4682
+     * @param   string              $fieldname          Name of field
4683
+     * @param   string              $alternatevalue     Alternate value to use
4684
+     * @return  string|string[]                         Default value (can be an array if the GETPOST return an array)
4685
+     **/
4686
+    function getDefaultCreateValueFor($fieldname, $alternatevalue=null)
4687
+    {
4688
+        global $conf, $_POST;
4689
+
4690
+        // If param here has been posted, we use this value first.
4691
+        if (isset($_POST[$fieldname])) return GETPOST($fieldname, 2);
4692
+
4693
+        if (isset($alternatevalue)) return $alternatevalue;
4694
+
4695
+        $newelement=$this->element;
4696
+        if ($newelement == 'facture') $newelement='invoice';
4697
+        if ($newelement == 'commande') $newelement='order';
4698
+        if (empty($newelement))
4699
+        {
4700
+            dol_syslog("Ask a default value using common method getDefaultCreateValueForField on an object with no property ->element defined. Return empty string.", LOG_WARNING);
4701
+            return '';
4702
+        }
4703
+
4704
+        $keyforfieldname=strtoupper($newelement.'_DEFAULT_'.$fieldname);
4705
+        //var_dump($keyforfieldname);
4706
+        if (isset(Globals::$conf->global->$keyforfieldname))
4707
+            return Globals::$conf->global->$keyforfieldname;
4708
+
4709
+        // TODO Ad here a scan into table llx_overwrite_default with a filter on $this->element and $fieldname
4710
+    }
4711
+
4712
+
4713
+    /* For triggers */
4714
+
4715
+
4716
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4717
+    /**
4718
+     * Call trigger based on this instance.
4719
+     * Some context information may also be provided into array property this->context.
4720
+     * NB:  Error from trigger are stacked in interface->errors
4721
+     * NB2: If return code of triggers are < 0, action calling trigger should cancel all transaction.
4722
+     *
4723
+     * @param   string    $trigger_name   trigger's name to execute
4724
+     * @param   User      $user           Object user
4725
+     * @return  int                       Result of run_triggers
4726
+     */
4727
+    function call_trigger($trigger_name, $user)
4728
+    {
4729
+        // phpcs:enable
4730
+        global $langs,$conf;
4731
+
4732
+        include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
4733
+        $interface=new Interfaces($this->db);
4734
+        $result=$interface->run_triggers($trigger_name,$this,$user,$langs,$conf);
4735
+
4736
+        if ($result < 0)
4737
+        {
4738
+            if (!empty($this->errors))
4739
+            {
4740
+                $this->errors=array_unique(array_merge($this->errors,$interface->errors));   // We use array_unique because when a trigger call another trigger on same object, this->errors is added twice.
4741
+            }
4742
+            else
4743
+            {
4744
+                $this->errors=$interface->errors;
4745
+            }
4746
+        }
4747
+        return $result;
4748
+    }
4749
+
4750
+
4751
+    /* Functions for extrafields */
4752
+
4753
+
4754
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
4755
+    /**
4756
+     *  Function to get extra fields of an object into $this->array_options
4757
+     *  This method is in most cases called by method fetch of objects but you can call it separately.
4758
+     *
4759
+     *  @param	int		$rowid			Id of line. Use the id of object if not defined. Deprecated. Function must be called without parameters.
4760
+     *  @param  array	$optionsArray   Array resulting of call of extrafields->fetch_name_optionals_label(). Deprecated. Function must be called without parameters.
4761
+     *  @return	int						<0 if error, 0 if no values of extrafield to find nor found, 1 if an attribute is found and value loaded
4762
+     */
4763
+    function fetch_optionals($rowid=null, $optionsArray=null)
4764
+    {
4765
+        // phpcs:enable
4766
+        if (empty($rowid)) {
4767
+            $rowid = $this->id;
4768
+        }
4769
+
4770
+        // To avoid SQL errors. Probably not the better solution though
4771
+        if (!$this->table_element) {
4772
+            return 0;
4773
+        }
4774
+
4775
+        $this->array_options=array();
4776
+
4777
+        if (! is_array($optionsArray))
4778
+        {
4779
+            // If $extrafields is not a known object, we initialize it. Best practice is to have $extrafields defined into card.php or list.php page.
4780
+            // TODO Use of existing $extrafield is not yet ready (must mutualize code that use extrafields in form first)
4781
+            // global $extrafields;
4782
+            //if (! is_object($extrafields))
4783
+            //{
4784
+                // require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
4785
+            $extrafields = new AlExtraFields();
4786
+            //}
4787
+
4788
+            // Load array of extrafields for elementype = $this->table_element
4789
+            if (empty($extrafields->attributes[$this->table_element]['loaded']))
4790
+            {
4791
+                $extrafields->fetch_name_optionals_label($this->table_element);
4792
+            }
4793
+            $optionsArray = (! empty($extrafields->attributes[$this->table_element]['label'])?$extrafields->attributes[$this->table_element]['label']:null);
4794
+        }
4795
+        else
4796
+        {
4797
+            // global $extrafields;
4798
+            dol_syslog("Warning: fetch_optionals was called with param optionsArray defined when you should pass null now", LOG_WARNING);
4799
+        }
4800
+
4801
+        $table_element = $this->table_element;
4802
+        if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
4803
+
4804
+        // Request to get complementary values
4805
+        if (is_array($optionsArray) && count($optionsArray) > 0)
4806
+        {
4807
+            $sql = "SELECT rowid";
4808
+            foreach ($optionsArray as $name => $label)
4809
+            {
4810
+                if (empty($extrafields->attributes[$this->table_element]['type'][$name]) || $extrafields->attributes[$this->table_element]['type'][$name] != 'separate')
4811
+                {
4812
+                    $sql.= ", ".$name;
4813
+                }
4814
+            }
4815
+            $sql.= " FROM ".MAIN_DB_PREFIX.$table_element."_extrafields";
4816
+            $sql.= " WHERE fk_object = ".$rowid;
4817
+
4818
+            //dol_syslog(get_class($this)."::fetch_optionals get extrafields data for ".$this->table_element, LOG_DEBUG);		// Too verbose
4819
+            $resql=$this->db->query($sql);
4820
+            if ($resql)
4821
+            {
4822
+                $this->array_options = array();
4823
+                $numrows=$this->db->num_rows($resql);
4824
+                if ($numrows)
4825
+                {
4826
+                    $tab = $this->db->fetch_array($resql);
4827
+
4828
+                    foreach ($tab as $key => $value)
4829
+                    {
4830
+                        // Test fetch_array ! is_int($key) because fetch_array result is a mix table with Key as alpha and Key as int (depend db engine)
4831
+                        if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && ! is_int($key))
4832
+                        {
4833
+                            // we can add this attribute to object
4834
+                            if (! empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date','datetime')))
4835
+                            {
4836
+                                //var_dump($extrafields->attributes[$this->table_element]['type'][$key]);
4837
+                                $this->array_options["options_".$key]=$this->db->jdate($value);
4838
+                            }
4839
+                            else
4840
+                            {
4841
+                                $this->array_options["options_".$key]=$value;
4842
+                            }
4843
+
4844
+                            //var_dump('key '.$key.' '.$value.' type='.$extrafields->attributes[$this->table_element]['type'][$key].' '.$this->array_options["options_".$key]);
4845
+                        }
4846
+                    }
4847
+                }
4848
+
4849
+                $this->db->free($resql);
4850
+
4851
+                if ($numrows) return $numrows;
4852
+                else return 0;
4853
+            }
4854
+            else
4855
+            {
4856
+                dol_print_error($this->db);
4857
+                return -1;
4858
+            }
4859
+        }
4860
+        return 0;
4861
+    }
4862
+
4863
+    /**
4864
+     *	Delete all extra fields values for the current object.
4865
+     *
4866
+     *  @return	int		<0 if KO, >0 if OK
4867
+     */
4868
+    function deleteExtraFields()
4869
+    {
4870
+        $this->db->begin();
4871
+
4872
+        $table_element = $this->table_element;
4873
+        if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
4874
+
4875
+        $sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
4876
+        dol_syslog(get_class($this)."::deleteExtraFields delete", LOG_DEBUG);
4877
+        $resql=$this->db->query($sql_del);
4878
+        if (! $resql)
4879
+        {
4880
+            $this->error=$this->db->lasterror();
4881
+            $this->db->rollback();
4882
+            return -1;
4883
+        }
4884
+        else
4885
+        {
4886
+            $this->db->commit();
4887
+            return 1;
4888
+        }
4889
+    }
4890
+
4891
+    /**
4892
+     *	Add/Update all extra fields values for the current object.
4893
+     *  Data to describe values to insert/update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
4894
+     *  This function delete record with all extrafields and insert them again from the array $this->array_options.
4895
+     *
4896
+     *  @param	string		$trigger		If defined, call also the trigger (for example COMPANY_MODIFY)
4897
+     *  @param	User		$userused		Object user
4898
+     *  @return int 						-1=error, O=did nothing, 1=OK
4899
+     *  @see updateExtraField, setValueFrom
4900
+     */
4901
+    function insertExtraFields($trigger='', $userused=null)
4902
+    {
4903
+        global $conf,$langs,$user;
4904
+
4905
+        if (empty($userused)) $userused=$user;
4906
+
4907
+        $error=0;
4908
+
4909
+        if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
4910
+            return 0; // For avoid conflicts if trigger used
4911
+
4912
+        if (! empty($this->array_options))
4913
+        {
4914
+            // Check parameters
4915
+            $langs->load('admin');
4916
+            require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
4917
+            $extrafields = new AlExtraFields($this->db);
4918
+            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
4919
+
4920
+            //Eliminate copied source object extra_fields that do not exist in target object
4921
+            $new_array_options=array();
4922
+            foreach ($this->array_options as $key => $value) {
4923
+                if (in_array(substr($key,8), array_keys($target_extrafields)))	// We remove the 'options_' from $key for test
4924
+                    $new_array_options[$key] = $value;
4925
+                elseif (in_array($key, array_keys($target_extrafields)))		// We test on $key that does not contains the 'options_' prefix
4926
+                    $new_array_options['options_'.$key] = $value;
4927
+            }
4928
+
4929
+            foreach($new_array_options as $key => $value)
4930
+            {
4931
+                    $attributeKey      = substr($key,8);   // Remove 'options_' prefix
4932
+                    $attributeType     = $extrafields->attributes[$this->table_element]['type'][$attributeKey];
4933
+                    $attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$attributeKey];
4934
+                    $attributeParam    = $extrafields->attributes[$this->table_element]['param'][$attributeKey];
4935
+                    $attributeRequired = $extrafields->attributes[$this->table_element]['required'][$attributeKey];
4936
+
4937
+                    if ($attributeRequired)
4938
+                    {
4939
+                        $mandatorypb=false;
4940
+                        if ($attributeType == 'link' && $this->array_options[$key] == '-1') $mandatorypb=true;
4941
+                        if ($this->array_options[$key] === '') $mandatorypb=true;
4942
+                        if ($mandatorypb)
4943
+                        {
4944
+                            dol_syslog($this->error);
4945
+                            $this->errors[]=$langs->trans('ErrorFieldRequired', $attributeLabel);
4946
+                            return -1;
4947
+                        }
4948
+                    }
4949
+
4950
+                //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG);
4951
+                //dol_syslog("attributeType=".$attributeType, LOG_DEBUG);
4952
+
4953
+                    switch ($attributeType)
4954
+                    {
4955
+                        case 'int':
4956
+                          if (!is_numeric($value) && $value!='')
4957
+                            {
4958
+                                $this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4959
+                                return -1;
4960
+                            }
4961
+                            elseif ($value=='')
4962
+                            {
4963
+                                $new_array_options[$key] = null;
4964
+                            }
4965
+                            break;
4966
+                    case 'double':
4967
+                        $value = price2num($value);
4968
+                        if (!is_numeric($value) && $value!='')
4969
+                        {
4970
+                            dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
4971
+                            $this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4972
+                            return -1;
4973
+                        }
4974
+                        elseif ($value=='')
4975
+                        {
4976
+                            $new_array_options[$key] = null;
4977
+                        }
4978
+                        //dol_syslog("double value"." sur ".$attributeLabel."(".$value." is '".$attributeType."')", LOG_DEBUG);
4979
+                        $new_array_options[$key] = $value;
4980
+                        break;
4981
+                        /*case 'select':	// Not required, we chosed value='0' for undefined values
4982
+             			if ($value=='-1')
4983
+             			{
4984
+             				$this->array_options[$key] = null;
4985
+             			}
4986
+             			break;*/
4987
+                        case 'password':
4988
+                           $algo='';
4989
+                            if ($this->array_options[$key] != '' && is_array($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']))
4990
+                            {
4991
+                                // If there is an encryption choice, we use it to crypt data before insert
4992
+                                $tmparrays = array_keys($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']);
4993
+                                $algo=reset($tmparrays);
4994
+                                if ($algo != '')
4995
+                                {
4996
+                                    //global $action;		// $action may be 'create', 'update', 'update_extras'...
4997
+                                    //var_dump($action);
4998
+                                    //var_dump($this->oldcopy);exit;
4999
+                                    if (is_object($this->oldcopy))		// If this->oldcopy is not defined, we can't know if we change attribute or not, so we must keep value
5000
+                                    {
5001
+                                        //var_dump($this->oldcopy->array_options[$key]); var_dump($this->array_options[$key]);
5002
+                                        if ($this->array_options[$key] == $this->oldcopy->array_options[$key])	// If old value crypted in database is same than submited new value, it means we don't change it, so we don't update.
5003
+                                        {
5004
+                                            $new_array_options[$key] = $this->array_options[$key];	// Value is kept
5005
+                                        }
5006
+                                    else
5007
+                                    {
5008
+                                        // var_dump($algo);
5009
+                                        $newvalue = dol_hash($this->array_options[$key], $algo);
5010
+                                        $new_array_options[$key] = $newvalue;
5011
+                                    }
5012
+                                    }
5013
+                                    else
5014
+                                    {
5015
+                                        $new_array_options[$key] = $this->array_options[$key];	// Value is kept
5016
+                                    }
5017
+                                }
5018
+                            }
5019
+                            else	// Common usage
5020
+                            {
5021
+                                $new_array_options[$key] = $this->array_options[$key];
5022
+                            }
5023
+                            break;
5024
+                        case 'price':
5025
+                        $new_array_options[$key] = price2num($this->array_options[$key]);
5026
+                        break;
5027
+                    case 'date':
5028
+                        $new_array_options[$key] = $this->db->idate($this->array_options[$key]);
5029
+                        break;
5030
+                    case 'datetime':
5031
+                        // If data is a string instead of a timestamp, we convert it
5032
+                        if (! is_int($this->array_options[$key])) {
5033
+                            $this->array_options[$key] = strtotime($this->array_options[$key]);
5034
+                        }
5035
+                        $new_array_options[$key] = $this->db->idate($this->array_options[$key]);
5036
+                        break;
5037
+                        case 'link':
5038
+                        $param_list=array_keys($attributeParam['options']);
5039
+                        // 0 : ObjectName
5040
+                        // 1 : classPath
5041
+                        $InfoFieldList = explode(":", $param_list[0]);
5042
+                        dol_include_once($InfoFieldList[1]);
5043
+                        if ($InfoFieldList[0] && class_exists($InfoFieldList[0]))
5044
+                        {
5045
+                            if ($value == '-1')	// -1 is key for no defined in combo list of objects
5046
+                            {
5047
+                                $new_array_options[$key]='';
5048
+                            }
5049
+                            elseif ($value)
5050
+                            {
5051
+                                $object = new $InfoFieldList[0]($this->db);
5052
+                                if (is_numeric($value)) $res=$object->fetch($value);
5053
+                                else $res=$object->fetch('',$value);
5054
+
5055
+                                if ($res > 0) $new_array_options[$key]=$object->id;
5056
+                                else
5057
+                                {
5058
+                                    $this->error="Id/Ref '".$value."' for object '".$object->element."' not found";
5059
+                                    $this->db->rollback();
5060
+                                    return -1;
5061
+                                }
5062
+                            }
5063
+                        }
5064
+                        else
5065
+                        {
5066
+                            dol_syslog('Error bad setup of extrafield', LOG_WARNING);
5067
+                        }
5068
+                        break;
5069
+                    }
5070
+            }
5071
+
5072
+            $this->db->begin();
5073
+
5074
+            $table_element = $this->table_element;
5075
+            if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
5076
+
5077
+            $sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
5078
+            dol_syslog(get_class($this)."::insertExtraFields delete", LOG_DEBUG);
5079
+            $this->db->query($sql_del);
5080
+
5081
+            $sql = "INSERT INTO ".MAIN_DB_PREFIX.$table_element."_extrafields (fk_object";
5082
+            foreach($new_array_options as $key => $value)
5083
+            {
5084
+                $attributeKey = substr($key,8);   // Remove 'options_' prefix
5085
+                // Add field of attribut
5086
+                if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator
5087
+                    $sql.=",".$attributeKey;
5088
+            }
5089
+            $sql .= ") VALUES (".$this->id;
5090
+
5091
+            foreach($new_array_options as $key => $value)
5092
+            {
5093
+                $attributeKey = substr($key,8);   // Remove 'options_' prefix
5094
+                // Add field of attribute
5095
+                if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator)
5096
+                {
5097
+                    if ($new_array_options[$key] != '')
5098
+                    {
5099
+                        $sql.=",'".$this->db->escape($new_array_options[$key])."'";
5100
+                    }
5101
+                    else
5102
+                    {
5103
+                        $sql.=",null";
5104
+                    }
5105
+                }
5106
+            }
5107
+            $sql.=")";
5108
+
5109
+            dol_syslog(get_class($this)."::insertExtraFields insert", LOG_DEBUG);
5110
+            $resql = $this->db->query($sql);
5111
+            if (! $resql)
5112
+            {
5113
+                $this->error=$this->db->lasterror();
5114
+                $error++;
5115
+            }
5116
+
5117
+            if (! $error && $trigger)
5118
+            {
5119
+                // Call trigger
5120
+                $this->context=array('extrafieldaddupdate'=>1);
5121
+                $result=$this->call_trigger($trigger, $userused);
5122
+                if ($result < 0) $error++;
5123
+                // End call trigger
5124
+            }
5125
+
5126
+            if ($error)
5127
+            {
5128
+                $this->db->rollback();
5129
+                return -1;
5130
+            }
5131
+            else
5132
+            {
5133
+                $this->db->commit();
5134
+                return 1;
5135
+            }
5136
+        }
5137
+        else return 0;
5138
+    }
5139
+
5140
+    /**
5141
+     *	Update an extra field value for the current object.
5142
+     *  Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
5143
+     *
5144
+     *  @param  string      $key    		Key of the extrafield (without starting 'options_')
5145
+     *  @param	string		$trigger		If defined, call also the trigger (for example COMPANY_MODIFY)
5146
+     *  @param	User		$userused		Object user
5147
+     *  @return int                 		-1=error, O=did nothing, 1=OK
5148
+     *  @see setValueFrom, insertExtraFields
5149
+     */
5150
+    function updateExtraField($key, $trigger=null, $userused=null)
5151
+    {
5152
+        global $conf,$langs,$user;
5153
+
5154
+        if (empty($userused)) $userused=$user;
5155
+
5156
+        $error=0;
5157
+
5158
+        if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
5159
+            return 0; // For avoid conflicts if trigger used
5160
+
5161
+        if (! empty($this->array_options) && isset($this->array_options["options_".$key]))
5162
+        {
5163
+            // Check parameters
5164
+            $langs->load('admin');
5165
+            require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
5166
+            $extrafields = new AlExtraFields($this->db);
5167
+            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
5168
+
5169
+            $value=$this->array_options["options_".$key];
5170
+
5171
+            $attributeType     = $extrafields->attributes[$this->table_element]['type'][$key];
5172
+            $attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$key];
5173
+            $attributeParam    = $extrafields->attributes[$this->table_element]['param'][$key];
5174
+            $attributeRequired = $extrafields->attributes[$this->table_element]['required'][$key];
5175
+
5176
+            //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG);
5177
+            //dol_syslog("attributeType=".$attributeType, LOG_DEBUG);
5178
+
5179
+            switch ($attributeType)
5180
+            {
5181
+                case 'int':
5182
+                    if (!is_numeric($value) && $value!='')
5183
+                    {
5184
+                        $this->errors[]=$langs->trans("ExtraFieldHasWrongValue",$attributeLabel);
5185
+                        return -1;
5186
+                    }
5187
+                    elseif ($value=='')
5188
+                    {
5189
+                        $this->array_options["options_".$key] = null;
5190
+                    }
5191
+                    break;
5192
+                case 'double':
5193
+                    $value = price2num($value);
5194
+                    if (!is_numeric($value) && $value!='')
5195
+                    {
5196
+                        dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
5197
+                        $this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5198
+                        return -1;
5199
+                    }
5200
+                    elseif ($value=='')
5201
+                    {
5202
+                        $this->array_options["options_".$key] = null;
5203
+                    }
5204
+                    //dol_syslog("double value"." sur ".$attributeLabel."(".$value." is '".$attributeType."')", LOG_DEBUG);
5205
+                    $this->array_options["options_".$key] = $value;
5206
+                    break;
5207
+                    /*case 'select':	// Not required, we chosed value='0' for undefined values
5208
+             		if ($value=='-1')
5209
+             		{
5210
+             			$this->array_options[$key] = null;
5211
+             		}
5212
+             		break;*/
5213
+                case 'price':
5214
+                    $this->array_options["options_".$key] = price2num($this->array_options["options_".$key]);
5215
+                    break;
5216
+                case 'date':
5217
+                    $this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5218
+                    break;
5219
+                case 'datetime':
5220
+                    $this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5221
+                    break;
5222
+                case 'link':
5223
+                    $param_list=array_keys($attributeParam['options']);
5224
+                    // 0 : ObjectName
5225
+                    // 1 : classPath
5226
+                    $InfoFieldList = explode(":", $param_list[0]);
5227
+                    dol_include_once($InfoFieldList[1]);
5228
+                    if ($value)
5229
+                    {
5230
+                        $object = new $InfoFieldList[0]($this->db);
5231
+                        $object->fetch(0,$value);
5232
+                        $this->array_options["options_".$key]=$object->id;
5233
+                    }
5234
+                    break;
5235
+            }
5236
+
5237
+            $this->db->begin();
5238
+            $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key."='".$this->db->escape($this->array_options["options_".$key])."'";
5239
+            $sql .= " WHERE fk_object = ".$this->id;
5240
+            $resql = $this->db->query($sql);
5241
+            if (! $resql)
5242
+            {
5243
+                $error++;
5244
+                $this->error=$this->db->lasterror();
5245
+            }
5246
+
5247
+            if (! $error && $trigger)
5248
+            {
5249
+                // Call trigger
5250
+                $this->context=array('extrafieldupdate'=>1);
5251
+                $result=$this->call_trigger($trigger, $userused);
5252
+                if ($result < 0) $error++;
5253
+                // End call trigger
5254
+            }
5255
+
5256
+            if ($error)
5257
+            {
5258
+                dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR);
5259
+                $this->db->rollback();
5260
+                return -1;
5261
+            }
5262
+            else
5263
+            {
5264
+                $this->db->commit();
5265
+                return 1;
5266
+            }
5267
+        }
5268
+        else return 0;
5269
+    }
5270
+
5271
+
5272
+    /**
5273
+     * Return HTML string to put an input field into a page
5274
+     * Code very similar with showInputField of extra fields
5275
+     *
5276
+     * @param  array   		$val	       Array of properties for field to show
5277
+     * @param  string  		$key           Key of attribute
5278
+     * @param  string  		$value         Preselected value to show (for date type it must be in timestamp format, for amount or price it must be a php numeric value)
5279
+     * @param  string  		$moreparam     To add more parameters on html input tag
5280
+     * @param  string  		$keysuffix     Prefix string to add into name and id of field (can be used to avoid duplicate names)
5281
+     * @param  string  		$keyprefix     Suffix string to add into name and id of field (can be used to avoid duplicate names)
5282
+     * @param  string|int		$morecss       Value for css to define style/length of field. May also be a numeric.
5283
+     * @return string
5284
+     */
5285
+    function showInputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $morecss=0)
5286
+    {
5287
+        global $conf,$langs,$form;
5288
+
5289
+        if (! is_object($form))
5290
+        {
5291
+            require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5292
+            $form=new Form($this->db);
5293
+        }
5294
+
5295
+        $val=$this->fields[$key];
5296
+
5297
+        $out='';
5298
+        $type='';
5299
+        $param = array();
5300
+        $param['options']=array();
5301
+        $size =$this->fields[$key]['size'];
5302
+        // Because we work on extrafields
5303
+        if(preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)){
5304
+            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5305
+            $type ='link';
5306
+        } elseif(preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) {
5307
+            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5308
+            $type ='link';
5309
+        } elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
5310
+            $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N');
5311
+            $type ='sellist';
5312
+        } elseif(preg_match('/varchar\((\d+)\)/', $val['type'],$reg)) {
5313
+            $param['options']=array();
5314
+            $type ='varchar';
5315
+            $size=$reg[1];
5316
+        } elseif(preg_match('/varchar/', $val['type'])) {
5317
+            $param['options']=array();
5318
+            $type ='varchar';
5319
+        } elseif(is_array($this->fields[$key]['arrayofkeyval'])) {
5320
+            $param['options']=$this->fields[$key]['arrayofkeyval'];
5321
+            $type ='select';
5322
+        } else {
5323
+            $param['options']=array();
5324
+            $type =$this->fields[$key]['type'];
5325
+        }
5326
+
5327
+        $label=$this->fields[$key]['label'];
5328
+        //$elementtype=$this->fields[$key]['elementtype'];	// Seems not used
5329
+        $default=$this->fields[$key]['default'];
5330
+        $computed=$this->fields[$key]['computed'];
5331
+        $unique=$this->fields[$key]['unique'];
5332
+        $required=$this->fields[$key]['required'];
5333
+
5334
+        $langfile=$this->fields[$key]['langfile'];
5335
+        $list=$this->fields[$key]['list'];
5336
+        $hidden=abs($this->fields[$key]['visible'])!=1?1:0;
5337
+
5338
+        $objectid = $this->id;
5339
+
5340
+
5341
+        if ($computed)
5342
+        {
5343
+            if (! preg_match('/^search_/', $keyprefix)) return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5344
+            else return '';
5345
+        }
5346
+
5347
+
5348
+        // Use in priority showsize from parameters, then $val['css'] then autodefine
5349
+        if (empty($morecss) && ! empty($val['css']))
5350
+        {
5351
+            $showsize = $val['css'];
5352
+        }
5353
+        if (empty($morecss))
5354
+        {
5355
+            if ($type == 'date')
5356
+            {
5357
+                $morecss = 'minwidth100imp';
5358
+            }
5359
+            elseif ($type == 'datetime')
5360
+            {
5361
+                $morecss = 'minwidth200imp';
5362
+            }
5363
+            elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5364
+            {
5365
+                $morecss = 'maxwidth75';
5366
+                        }elseif ($type == 'url')
5367
+            {
5368
+                $morecss='minwidth400';
5369
+            }
5370
+            elseif ($type == 'boolean')
5371
+            {
5372
+                $morecss='';
5373
+            }
5374
+            else
5375
+            {
5376
+                if (round($size) < 12)
5377
+                {
5378
+                    $morecss = 'minwidth100';
5379
+                }
5380
+                else if (round($size) <= 48)
5381
+                {
5382
+                    $morecss = 'minwidth200';
5383
+                }
5384
+                else
5385
+                {
5386
+                    $morecss = 'minwidth400';
5387
+                }
5388
+            }
5389
+        }
5390
+
5391
+        if (in_array($type,array('date','datetime')))
5392
+        {
5393
+            $tmp=explode(',',$size);
5394
+            $newsize=$tmp[0];
5395
+
5396
+            $showtime = in_array($type,array('datetime')) ? 1 : 0;
5397
+
5398
+            // Do not show current date when field not required (see selectDate() method)
5399
+            if (!$required && $value == '') $value = '-1';
5400
+
5401
+            // TODO Must also support $moreparam
5402
+            $out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
5403
+        }
5404
+        elseif (in_array($type,array('int','integer')))
5405
+        {
5406
+            $tmp=explode(',',$size);
5407
+            $newsize=$tmp[0];
5408
+            $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5409
+        }
5410
+        elseif (preg_match('/varchar/', $type))
5411
+        {
5412
+            $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5413
+        }
5414
+        elseif (in_array($type, array('mail', 'phone', 'url')))
5415
+        {
5416
+            $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5417
+        }
5418
+        elseif ($type == 'text')
5419
+        {
5420
+            if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5421
+            {
5422
+                require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5423
+                $doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,false,ROWS_5,'90%');
5424
+                $out=$doleditor->Create(1);
5425
+            }
5426
+            else
5427
+            {
5428
+                $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5429
+            }
5430
+        }
5431
+        elseif ($type == 'html')
5432
+        {
5433
+            if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5434
+            {
5435
+                require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5436
+                $doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
5437
+                $out=$doleditor->Create(1);
5438
+            }
5439
+            else
5440
+            {
5441
+                $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5442
+            }
5443
+        }
5444
+        elseif ($type == 'boolean')
5445
+        {
5446
+            $checked='';
5447
+            if (!empty($value)) {
5448
+                $checked=' checked value="1" ';
5449
+            } else {
5450
+                $checked=' value="1" ';
5451
+            }
5452
+            $out='<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
5453
+        }
5454
+        elseif ($type == 'price')
5455
+        {
5456
+            if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5457
+                $value=price($value);
5458
+            }
5459
+            $out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ' . $langs->getCurrencySymbol(Globals::$conf->currency);
5460
+        }
5461
+        elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5462
+        {
5463
+            if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5464
+                $value=price($value);
5465
+            }
5466
+            $out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
5467
+        }
5468
+        elseif ($type == 'select')
5469
+        {
5470
+            $out = '';
5471
+            if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5472
+                include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5473
+                $out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5474
+            }
5475
+
5476
+            $out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5477
+                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1))$out.='<option value="0">&nbsp;</option>';
5478
+            foreach ($param['options'] as $key => $val)
5479
+            {
5480
+                if ((string) $key == '') continue;
5481
+                list($val, $parent) = explode('|', $val);
5482
+                $out.='<option value="'.$key.'"';
5483
+                $out.= (((string) $value == (string) $key)?' selected':'');
5484
+                $out.= (!empty($parent)?' parent="'.$parent.'"':'');
5485
+                $out.='>'.$val.'</option>';
5486
+            }
5487
+            $out.='</select>';
5488
+        }
5489
+        elseif ($type == 'sellist')
5490
+        {
5491
+            $out = '';
5492
+            if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5493
+                include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5494
+                $out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5495
+            }
5496
+
5497
+            $out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5498
+            if (is_array($param['options']))
5499
+            {
5500
+                $param_list=array_keys($param['options']);
5501
+                $InfoFieldList = explode(":", $param_list[0]);
5502
+                $parentName='';
5503
+                $parentField='';
5504
+                // 0 : tableName
5505
+                // 1 : label field name
5506
+                // 2 : key fields name (if differ of rowid)
5507
+                // 3 : key field parent (for dependent lists)
5508
+                // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5509
+                $keyList=(empty($InfoFieldList[2])?'rowid':$InfoFieldList[2].' as rowid');
5510
+
5511
+
5512
+                if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4]))
5513
+                {
5514
+                    if (strpos($InfoFieldList[4], 'extra.') !== false)
5515
+                    {
5516
+                        $keyList='main.'.$InfoFieldList[2].' as rowid';
5517
+                    } else {
5518
+                        $keyList=$InfoFieldList[2].' as rowid';
5519
+                    }
5520
+                }
5521
+                if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3]))
5522
+                {
5523
+                    list($parentName, $parentField) = explode('|', $InfoFieldList[3]);
5524
+                    $keyList.= ', '.$parentField;
5525
+                }
5526
+
5527
+                $fields_label = explode('|',$InfoFieldList[1]);
5528
+                if (is_array($fields_label))
5529
+                {
5530
+                    $keyList .=', ';
5531
+                    $keyList .= implode(', ', $fields_label);
5532
+                }
5533
+
5534
+                $sqlwhere='';
5535
+                $sql = 'SELECT '.$keyList;
5536
+                $sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
5537
+                if (!empty($InfoFieldList[4]))
5538
+                {
5539
+                    // can use SELECT request
5540
+                    if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5541
+                        $InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5542
+                    }
5543
+
5544
+                    // current object id can be use into filter
5545
+                    if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5546
+                        $InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5547
+                    } else {
5548
+                        $InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5549
+                    }
5550
+                    //We have to join on extrafield table
5551
+                    if (strpos($InfoFieldList[4], 'extra')!==false)
5552
+                    {
5553
+                        $sql.= ' as main, '.MAIN_DB_PREFIX .$InfoFieldList[0].'_extrafields as extra';
5554
+                        $sqlwhere.= ' WHERE extra.fk_object=main.'.$InfoFieldList[2]. ' AND '.$InfoFieldList[4];
5555
+                    }
5556
+                    else
5557
+                    {
5558
+                        $sqlwhere.= ' WHERE '.$InfoFieldList[4];
5559
+                    }
5560
+                }
5561
+                else
5562
+                {
5563
+                    $sqlwhere.= ' WHERE 1=1';
5564
+                }
5565
+                // Some tables may have field, some other not. For the moment we disable it.
5566
+                if (in_array($InfoFieldList[0],array('tablewithentity')))
5567
+                {
5568
+                    $sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5569
+                }
5570
+                $sql.=$sqlwhere;
5571
+                //print $sql;
5572
+
5573
+                $sql .= ' ORDER BY ' . implode(', ', $fields_label);
5574
+
5575
+                dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG);
5576
+                $resql = $this->db->query($sql);
5577
+                if ($resql)
5578
+                {
5579
+                    $out.='<option value="0">&nbsp;</option>';
5580
+                    $num = $this->db->num_rows($resql);
5581
+                    $i = 0;
5582
+                    while ($i < $num)
5583
+                    {
5584
+                        $labeltoshow='';
5585
+                        $obj = $this->db->fetch_object($resql);
5586
+
5587
+                        // Several field into label (eq table:code|libelle:rowid)
5588
+                        $notrans = false;
5589
+                        $fields_label = explode('|',$InfoFieldList[1]);
5590
+                        if (is_array($fields_label))
5591
+                        {
5592
+                            $notrans = true;
5593
+                            foreach ($fields_label as $field_toshow)
5594
+                            {
5595
+                                $labeltoshow.= $obj->$field_toshow.' ';
5596
+                            }
5597
+                        }
5598
+                        else
5599
+                        {
5600
+                            $labeltoshow=$obj->{$InfoFieldList[1]};
5601
+                        }
5602
+                        $labeltoshow=dol_trunc($labeltoshow,45);
5603
+
5604
+                        if ($value == $obj->rowid)
5605
+                        {
5606
+                            foreach ($fields_label as $field_toshow)
5607
+                            {
5608
+                                $translabel=$langs->trans($obj->$field_toshow);
5609
+                                if ($translabel!=$obj->$field_toshow) {
5610
+                                    $labeltoshow=dol_trunc($translabel,18).' ';
5611
+                                }else {
5612
+                                    $labeltoshow=dol_trunc($obj->$field_toshow,18).' ';
5613
+                                }
5614
+                            }
5615
+                            $out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5616
+                        }
5617
+                        else
5618
+                        {
5619
+                            if (! $notrans)
5620
+                            {
5621
+                                $translabel=$langs->trans($obj->{$InfoFieldList[1]});
5622
+                                if ($translabel!=$obj->{$InfoFieldList[1]}) {
5623
+                                    $labeltoshow=dol_trunc($translabel,18);
5624
+                                }
5625
+                                else {
5626
+                                    $labeltoshow=dol_trunc($obj->{$InfoFieldList[1]},18);
5627
+                                }
5628
+                            }
5629
+                            if (empty($labeltoshow)) $labeltoshow='(not defined)';
5630
+                            if ($value==$obj->rowid)
5631
+                            {
5632
+                                $out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5633
+                            }
5634
+
5635
+                            if (!empty($InfoFieldList[3]) && $parentField)
5636
+                            {
5637
+                                $parent = $parentName.':'.$obj->{$parentField};
5638
+                            }
5639
+
5640
+                            $out.='<option value="'.$obj->rowid.'"';
5641
+                            $out.= ($value==$obj->rowid?' selected':'');
5642
+                            $out.= (!empty($parent)?' parent="'.$parent.'"':'');
5643
+                            $out.='>'.$labeltoshow.'</option>';
5644
+                        }
5645
+
5646
+                        $i++;
5647
+                    }
5648
+                    $this->db->free($resql);
5649
+                }
5650
+                else {
5651
+                    print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.<br>';
5652
+                }
5653
+            }
5654
+            $out.='</select>';
5655
+        }
5656
+        elseif ($type == 'checkbox')
5657
+        {
5658
+            $value_arr=explode(',',$value);
5659
+            $out=$form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options'])?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
5660
+        }
5661
+        elseif ($type == 'radio')
5662
+        {
5663
+            $out='';
5664
+            foreach ($param['options'] as $keyopt => $val)
5665
+            {
5666
+                $out.='<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'');
5667
+                $out.=' value="'.$keyopt.'"';
5668
+                $out.=' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
5669
+                $out.= ($value==$keyopt?'checked':'');
5670
+                $out.='/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
5671
+            }
5672
+        }
5673
+        elseif ($type == 'chkbxlst')
5674
+        {
5675
+            if (is_array($value)) {
5676
+                $value_arr = $value;
5677
+            }
5678
+            else {
5679
+                $value_arr = explode(',', $value);
5680
+            }
5681
+
5682
+            if (is_array($param['options'])) {
5683
+                $param_list = array_keys($param['options']);
5684
+                $InfoFieldList = explode(":", $param_list[0]);
5685
+                $parentName='';
5686
+                $parentField='';
5687
+                // 0 : tableName
5688
+                // 1 : label field name
5689
+                // 2 : key fields name (if differ of rowid)
5690
+                // 3 : key field parent (for dependent lists)
5691
+                // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5692
+                $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
5693
+
5694
+                if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) {
5695
+                    list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]);
5696
+                    $keyList .= ', ' . $parentField;
5697
+                }
5698
+                if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4])) {
5699
+                    if (strpos($InfoFieldList[4], 'extra.') !== false) {
5700
+                        $keyList = 'main.' . $InfoFieldList[2] . ' as rowid';
5701
+                    } else {
5702
+                        $keyList = $InfoFieldList[2] . ' as rowid';
5703
+                    }
5704
+                }
5705
+
5706
+                $fields_label = explode('|', $InfoFieldList[1]);
5707
+                if (is_array($fields_label)) {
5708
+                    $keyList .= ', ';
5709
+                    $keyList .= implode(', ', $fields_label);
5710
+                }
5711
+
5712
+                $sqlwhere = '';
5713
+                $sql = 'SELECT ' . $keyList;
5714
+                $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
5715
+                if (! empty($InfoFieldList[4])) {
5716
+
5717
+                    // can use SELECT request
5718
+                    if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5719
+                        $InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5720
+                    }
5721
+
5722
+                    // current object id can be use into filter
5723
+                    if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5724
+                        $InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5725
+                    } else {
5726
+                        $InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5727
+                    }
5728
+
5729
+                    // We have to join on extrafield table
5730
+                    if (strpos($InfoFieldList[4], 'extra') !== false) {
5731
+                        $sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList[0] . '_extrafields as extra';
5732
+                        $sqlwhere .= ' WHERE extra.fk_object=main.' . $InfoFieldList[2] . ' AND ' . $InfoFieldList[4];
5733
+                    } else {
5734
+                        $sqlwhere .= ' WHERE ' . $InfoFieldList[4];
5735
+                    }
5736
+                } else {
5737
+                    $sqlwhere .= ' WHERE 1=1';
5738
+                }
5739
+                // Some tables may have field, some other not. For the moment we disable it.
5740
+                if (in_array($InfoFieldList[0], array ('tablewithentity')))
5741
+                {
5742
+                    $sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5743
+                }
5744
+                // $sql.=preg_replace('/^ AND /','',$sqlwhere);
5745
+                // print $sql;
5746
+
5747
+                $sql .= $sqlwhere;
5748
+                dol_syslog(get_class($this) . '::showInputField type=chkbxlst',LOG_DEBUG);
5749
+                $resql = $this->db->query($sql);
5750
+                if ($resql) {
5751
+                    $num = $this->db->num_rows($resql);
5752
+                    $i = 0;
5753
+
5754
+                    $data=array();
5755
+
5756
+                    while ( $i < $num ) {
5757
+                        $labeltoshow = '';
5758
+                        $obj = $this->db->fetch_object($resql);
5759
+
5760
+                        $notrans = false;
5761
+                        // Several field into label (eq table:code|libelle:rowid)
5762
+                        $fields_label = explode('|', $InfoFieldList[1]);
5763
+                        if (is_array($fields_label)) {
5764
+                            $notrans = true;
5765
+                            foreach ( $fields_label as $field_toshow ) {
5766
+                                $labeltoshow .= $obj->$field_toshow . ' ';
5767
+                            }
5768
+                        } else {
5769
+                            $labeltoshow = $obj->{$InfoFieldList[1]};
5770
+                        }
5771
+                        $labeltoshow = dol_trunc($labeltoshow, 45);
5772
+
5773
+                        if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5774
+                            foreach ( $fields_label as $field_toshow ) {
5775
+                                $translabel = $langs->trans($obj->$field_toshow);
5776
+                                if ($translabel != $obj->$field_toshow) {
5777
+                                    $labeltoshow = dol_trunc($translabel, 18) . ' ';
5778
+                                } else {
5779
+                                    $labeltoshow = dol_trunc($obj->$field_toshow, 18) . ' ';
5780
+                                }
5781
+                            }
5782
+
5783
+                            $data[$obj->rowid]=$labeltoshow;
5784
+                        } else {
5785
+                            if (! $notrans) {
5786
+                                $translabel = $langs->trans($obj->{$InfoFieldList[1]});
5787
+                                if ($translabel != $obj->{$InfoFieldList[1]}) {
5788
+                                    $labeltoshow = dol_trunc($translabel, 18);
5789
+                                } else {
5790
+                                    $labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
5791
+                                }
5792
+                            }
5793
+                            if (empty($labeltoshow))
5794
+                                $labeltoshow = '(not defined)';
5795
+
5796
+                                if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5797
+                                    $data[$obj->rowid]=$labeltoshow;
5798
+                                }
5799
+
5800
+                                if (! empty($InfoFieldList[3]) && $parentField) {
5801
+                                    $parent = $parentName . ':' . $obj->{$parentField};
5802
+                                }
5803
+
5804
+                                $data[$obj->rowid]=$labeltoshow;
5805
+                        }
5806
+
5807
+                        $i ++;
5808
+                    }
5809
+                    $this->db->free($resql);
5810
+
5811
+                    $out=$form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
5812
+                } else {
5813
+                    print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
5814
+                }
5815
+            }
5816
+        }
5817
+        elseif ($type == 'link')
5818
+        {
5819
+            $param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
5820
+            $showempty=(($required && $default != '')?0:1);
5821
+            $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
5822
+            if (Globals::$conf->global->MAIN_FEATURES_LEVEL >= 2) {
5823
+                        list($class,$classfile)=explode(':',$param_list[0]);
5824
+                        if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php',1);
5825
+                        else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php',1);
5826
+                        $out.='<a class="butActionNew" href="'.$url_path.'?action=create&backtopage='.$_SERVER['PHP_SELF'].'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5827
+                        // TODO Add Javascript code to add input fields contents to new elements urls
5828
+            }
5829
+        }
5830
+        elseif ($type == 'password')
5831
+        {
5832
+            // If prefix is 'search_', field is used as a filter, we use a common text field.
5833
+            $out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
5834
+        }
5835
+        elseif ($type == 'array')
5836
+        {
5837
+            $newval = $val;
5838
+            $newval['type'] = 'varchar(256)';
5839
+
5840
+            $out='';
5841
+
5842
+            $inputs = array();
5843
+            if(! empty($value)) {
5844
+                foreach($value as $option) {
5845
+                    $out.= '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5846
+                    $out.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', $option, $moreparam, '', '', $showsize).'<br></span>';
5847
+                }
5848
+            }
5849
+
5850
+            $out.= '<a id="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_add" href="javascript:;"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5851
+
5852
+            $newInput = '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5853
+            $newInput.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', '', $moreparam, '', '', $showsize).'<br></span>';
5854
+
5855
+            if (!empty(Globals::$conf->use_javascript_ajax)) {
5856
+                $out.= '
5857
+					<script type="text/javascript">
5858
+					$(document).ready(function() {
5859
+						$("a#'.dol_escape_js($keyprefix.$key.$keysuffix).'_add").click(function() {
5860
+							$("'.dol_escape_js($newInput).'").insertBefore(this);
5861
+						});
5862
+
5863
+						$(document).on("click", "a.'.dol_escape_js($keyprefix.$key.$keysuffix).'_del", function() {
5864
+							$(this).parent().remove();
5865
+						});
5866
+					});
5867
+					</script>';
5868
+            }
5869
+        }
5870
+        if (!empty($hidden)) {
5871
+            $out='<input type="hidden" value="'.$value.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'"/>';
5872
+        }
5873
+        /* Add comments
5874
+		 if ($type == 'date') $out.=' (YYYY-MM-DD)';
5875
+		 elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)';
5876
+		 */
5877
+        return $out;
5878
+    }
5879
+
5880
+    /**
5881
+     * Return HTML string to show a field into a page
5882
+     * Code very similar with showOutputField of extra fields
5883
+     *
5884
+     * @param  array   $val		       Array of properties of field to show
5885
+     * @param  string  $key            Key of attribute
5886
+     * @param  string  $value          Preselected value to show (for date type it must be in timestamp format, for amount or price it must be a php numeric value)
5887
+     * @param  string  $moreparam      To add more parametes on html input tag
5888
+     * @param  string  $keysuffix      Prefix string to add into name and id of field (can be used to avoid duplicate names)
5889
+     * @param  string  $keyprefix      Suffix string to add into name and id of field (can be used to avoid duplicate names)
5890
+     * @param  mixed   $showsize       Value for css to define size. May also be a numeric.
5891
+     * @return string
5892
+     */
5893
+    function showOutputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $showsize=0)
5894
+    {
5895
+        global $conf,$langs,$form;
5896
+
5897
+        if (! is_object($form))
5898
+        {
5899
+            require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5900
+            $form=new Form($this->db);
5901
+        }
5902
+
5903
+        $objectid = $this->id;
5904
+        $label = $val['label'];
5905
+        $type  = $val['type'];
5906
+        $size  = $val['css'];
5907
+
5908
+        // Convert var to be able to share same code than showOutputField of extrafields
5909
+        if (preg_match('/varchar\((\d+)\)/', $type, $reg))
5910
+        {
5911
+            $type = 'varchar';		// convert varchar(xx) int varchar
5912
+            $size = $reg[1];
5913
+        }
5914
+        elseif (preg_match('/varchar/', $type)) $type = 'varchar';		// convert varchar(xx) int varchar
5915
+        if (is_array($val['arrayofkeyval'])) $type='select';
5916
+        if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type='link';
5917
+
5918
+        $default=$val['default'];
5919
+        $computed=$val['computed'];
5920
+        $unique=$val['unique'];
5921
+        $required=$val['required'];
5922
+        $param=$val['param'];
5923
+        if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
5924
+        if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
5925
+        {
5926
+            $type='link';
5927
+            $param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
5928
+        }
5929
+        $langfile=$val['langfile'];
5930
+        $list=$val['list'];
5931
+        $help=$val['help'];
5932
+        $hidden=(($val['visible'] == 0) ? 1 : 0);			// If zero, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
5933
+
5934
+        if ($hidden) return '';
5935
+
5936
+        // If field is a computed field, value must become result of compute
5937
+        if ($computed)
5938
+        {
5939
+            // Make the eval of compute string
5940
+            //var_dump($computed);
5941
+            $value = dol_eval($computed, 1, 0);
5942
+        }
5943
+
5944
+        if (empty($showsize))
5945
+        {
5946
+            if ($type == 'date')
5947
+            {
5948
+                //$showsize=10;
5949
+                $showsize = 'minwidth100imp';
5950
+            }
5951
+            elseif ($type == 'datetime')
5952
+            {
5953
+                //$showsize=19;
5954
+                $showsize = 'minwidth200imp';
5955
+            }
5956
+            elseif (in_array($type,array('int','double','price')))
5957
+            {
5958
+                //$showsize=10;
5959
+                $showsize = 'maxwidth75';
5960
+            }
5961
+            elseif ($type == 'url')
5962
+            {
5963
+                $showsize='minwidth400';
5964
+            }
5965
+            elseif ($type == 'boolean')
5966
+            {
5967
+                $showsize='';
5968
+            }
5969
+            else
5970
+            {
5971
+                if (round($size) < 12)
5972
+                {
5973
+                    $showsize = 'minwidth100';
5974
+                }
5975
+                else if (round($size) <= 48)
5976
+                {
5977
+                    $showsize = 'minwidth200';
5978
+                }
5979
+                else
5980
+                {
5981
+                    //$showsize=48;
5982
+                    $showsize = 'minwidth400';
5983
+                }
5984
+            }
5985
+        }
5986
+
5987
+        // Format output value differently according to properties of field
5988
+        if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value=$this->getNomUrl(1, '', 0, '', 1);
5989
+        elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value=$this->getLibStatut(3);
5990
+        elseif ($type == 'date')
5991
+        {
5992
+            if(! empty($value)) {
5993
+                $value=dol_print_date($value,'day');
5994
+            } else {
5995
+                $value='';
5996
+            }
5997
+        }
5998
+        elseif ($type == 'datetime')
5999
+        {
6000
+            if(! empty($value)) {
6001
+                $value=dol_print_date($value,'dayhour');
6002
+            } else {
6003
+                $value='';
6004
+            }
6005
+        }
6006
+        elseif ($type == 'double')
6007
+        {
6008
+            if (!empty($value)) {
6009
+                $value=price($value);
6010
+            }
6011
+        }
6012
+        elseif ($type == 'boolean')
6013
+        {
6014
+            $checked='';
6015
+            if (!empty($value)) {
6016
+                $checked=' checked ';
6017
+            }
6018
+            $value='<input type="checkbox" '.$checked.' '.($moreparam?$moreparam:'').' readonly disabled>';
6019
+        }
6020
+        elseif ($type == 'mail')
6021
+        {
6022
+            $value=dol_print_email($value,0,0,0,64,1,1);
6023
+        }
6024
+        elseif ($type == 'url')
6025
+        {
6026
+            $value=dol_print_url($value,'_blank',32,1);
6027
+        }
6028
+        elseif ($type == 'phone')
6029
+        {
6030
+            $value=dol_print_phone($value, '', 0, 0, '', '&nbsp;', 1);
6031
+        }
6032
+        elseif ($type == 'price')
6033
+        {
6034
+            $value = price($value, 0, $langs, 0, 0, -1, Globals::$conf->currency);
6035
+        }
6036
+        elseif ($type == 'select')
6037
+        {
6038
+            $value=$param['options'][$value];
6039
+        }
6040
+        elseif ($type == 'sellist')
6041
+        {
6042
+            $param_list=array_keys($param['options']);
6043
+            $InfoFieldList = explode(":", $param_list[0]);
6044
+
6045
+            $selectkey="rowid";
6046
+            $keyList='rowid';
6047
+
6048
+            if (count($InfoFieldList)>=3)
6049
+            {
6050
+                $selectkey = $InfoFieldList[2];
6051
+                $keyList=$InfoFieldList[2].' as rowid';
6052
+            }
6053
+
6054
+            $fields_label = explode('|',$InfoFieldList[1]);
6055
+            if(is_array($fields_label)) {
6056
+                $keyList .=', ';
6057
+                $keyList .= implode(', ', $fields_label);
6058
+            }
6059
+
6060
+            $sql = 'SELECT '.$keyList;
6061
+            $sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
6062
+            if (strpos($InfoFieldList[4], 'extra')!==false)
6063
+            {
6064
+                $sql.= ' as main';
6065
+            }
6066
+            if ($selectkey=='rowid' && empty($value)) {
6067
+                $sql.= " WHERE ".$selectkey."=0";
6068
+            } elseif ($selectkey=='rowid') {
6069
+                $sql.= " WHERE ".$selectkey."=".$this->db->escape($value);
6070
+            }else {
6071
+                $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6072
+            }
6073
+
6074
+            //$sql.= ' AND entity = '.Globals::$conf->entity;
6075
+
6076
+            dol_syslog(get_class($this).':showOutputField:$type=sellist', LOG_DEBUG);
6077
+            $resql = $this->db->query($sql);
6078
+            if ($resql)
6079
+            {
6080
+                $value='';	// value was used, so now we reste it to use it to build final output
6081
+
6082
+                $obj = $this->db->fetch_object($resql);
6083
+
6084
+                // Several field into label (eq table:code|libelle:rowid)
6085
+                $fields_label = explode('|',$InfoFieldList[1]);
6086
+
6087
+                if(is_array($fields_label) && count($fields_label)>1)
6088
+                {
6089
+                    foreach ($fields_label as $field_toshow)
6090
+                    {
6091
+                        $translabel='';
6092
+                        if (!empty($obj->$field_toshow)) {
6093
+                            $translabel=$langs->trans($obj->$field_toshow);
6094
+                        }
6095
+                        if ($translabel!=$field_toshow) {
6096
+                            $value.=dol_trunc($translabel,18).' ';
6097
+                        }else {
6098
+                            $value.=$obj->$field_toshow.' ';
6099
+                        }
6100
+                    }
6101
+                }
6102
+                else
6103
+                {
6104
+                    $translabel='';
6105
+                    if (!empty($obj->{$InfoFieldList[1]})) {
6106
+                        $translabel=$langs->trans($obj->{$InfoFieldList[1]});
6107
+                    }
6108
+                    if ($translabel!=$obj->{$InfoFieldList[1]}) {
6109
+                        $value=dol_trunc($translabel,18);
6110
+                    }else {
6111
+                        $value=$obj->{$InfoFieldList[1]};
6112
+                    }
6113
+                }
6114
+            }
6115
+            else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
6116
+        }
6117
+        elseif ($type == 'radio')
6118
+        {
6119
+            $value=$param['options'][$value];
6120
+        }
6121
+        elseif ($type == 'checkbox')
6122
+        {
6123
+            $value_arr=explode(',',$value);
6124
+            $value='';
6125
+            if (is_array($value_arr) && count($value_arr)>0)
6126
+            {
6127
+                foreach ($value_arr as $keyval=>$valueval) {
6128
+                    $toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$param['options'][$valueval].'</li>';
6129
+                }
6130
+                $value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6131
+            }
6132
+        }
6133
+        elseif ($type == 'chkbxlst')
6134
+        {
6135
+            $value_arr = explode(',', $value);
6136
+
6137
+            $param_list = array_keys($param['options']);
6138
+            $InfoFieldList = explode(":", $param_list[0]);
6139
+
6140
+            $selectkey = "rowid";
6141
+            $keyList = 'rowid';
6142
+
6143
+            if (count($InfoFieldList) >= 3) {
6144
+                $selectkey = $InfoFieldList[2];
6145
+                $keyList = $InfoFieldList[2] . ' as rowid';
6146
+            }
6147
+
6148
+            $fields_label = explode('|', $InfoFieldList[1]);
6149
+            if (is_array($fields_label)) {
6150
+                $keyList .= ', ';
6151
+                $keyList .= implode(', ', $fields_label);
6152
+            }
6153
+
6154
+            $sql = 'SELECT ' . $keyList;
6155
+            $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
6156
+            if (strpos($InfoFieldList[4], 'extra') !== false) {
6157
+                $sql .= ' as main';
6158
+            }
6159
+            // $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6160
+            // $sql.= ' AND entity = '.Globals::$conf->entity;
6161
+
6162
+            dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst',LOG_DEBUG);
6163
+            $resql = $this->db->query($sql);
6164
+            if ($resql) {
6165
+                $value = ''; // value was used, so now we reste it to use it to build final output
6166
+                $toprint=array();
6167
+                while ( $obj = $this->db->fetch_object($resql) ) {
6168
+
6169
+                    // Several field into label (eq table:code|libelle:rowid)
6170
+                    $fields_label = explode('|', $InfoFieldList[1]);
6171
+                    if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
6172
+                        if (is_array($fields_label) && count($fields_label) > 1) {
6173
+                            foreach ( $fields_label as $field_toshow ) {
6174
+                                $translabel = '';
6175
+                                if (! empty($obj->$field_toshow)) {
6176
+                                    $translabel = $langs->trans($obj->$field_toshow);
6177
+                                }
6178
+                                if ($translabel != $field_toshow) {
6179
+                                    $toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6180
+                                } else {
6181
+                                    $toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
6182
+                                }
6183
+                            }
6184
+                        } else {
6185
+                            $translabel = '';
6186
+                            if (! empty($obj->{$InfoFieldList[1]})) {
6187
+                                $translabel = $langs->trans($obj->{$InfoFieldList[1]});
6188
+                            }
6189
+                            if ($translabel != $obj->{$InfoFieldList[1]}) {
6190
+                                $toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6191
+                            } else {
6192
+                                $toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>';
6193
+                            }
6194
+                        }
6195
+                    }
6196
+                }
6197
+                $value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6198
+            } else {
6199
+                dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
6200
+            }
6201
+        }
6202
+        elseif ($type == 'link')
6203
+        {
6204
+            $out='';
6205
+
6206
+            // only if something to display (perf)
6207
+            if ($value)
6208
+            {
6209
+                $param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
6210
+
6211
+                $InfoFieldList = explode(":", $param_list[0]);
6212
+                $classname=$InfoFieldList[0];
6213
+                $classpath=$InfoFieldList[1];
6214
+                $getnomurlparam=(empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]);
6215
+                if (! empty($classpath))
6216
+                {
6217
+                    dol_include_once($InfoFieldList[1]);
6218
+                    if ($classname && class_exists($classname))
6219
+                    {
6220
+                        $object = new $classname($this->db);
6221
+                        $object->fetch($value);
6222
+                        $value=$object->getNomUrl($getnomurlparam);
6223
+                    }
6224
+                }
6225
+                else
6226
+                {
6227
+                    dol_syslog('Error bad setup of extrafield', LOG_WARNING);
6228
+                    return 'Error bad setup of extrafield';
6229
+                }
6230
+            }
6231
+            else $value='';
6232
+        }
6233
+        elseif ($type == 'text' || $type == 'html')
6234
+        {
6235
+            $value=dol_htmlentitiesbr($value);
6236
+        }
6237
+        elseif ($type == 'password')
6238
+        {
6239
+            $value=preg_replace('/./i','*',$value);
6240
+        }
6241
+        elseif ($type == 'array')
6242
+        {
6243
+            $value = implode('<br>', $value);
6244
+        }
6245
+
6246
+        //print $type.'-'.$size;
6247
+        $out=$value;
6248
+
6249
+        return $out;
6250
+    }
6251
+
6252
+
6253
+    /**
6254
+     * Function to show lines of extrafields with output datas
6255
+     *
6256
+     * @param 	Extrafields $extrafields    Extrafield Object
6257
+     * @param 	string      $mode           Show output (view) or input (edit) for extrafield
6258
+     * @param 	array       $params         Optional parameters. Example: array('style'=>'class="oddeven"', 'colspan'=>$colspan)
6259
+     * @param 	string      $keysuffix      Suffix string to add after name and id of field (can be used to avoid duplicate names)
6260
+     * @param 	string      $keyprefix      Prefix string to add before name and id of field (can be used to avoid duplicate names)
6261
+     * @param	string		$onetrtd		All fields in same tr td
6262
+     * @return 	string
6263
+     */
6264
+    function showOptionals($extrafields, $mode='view', $params=null, $keysuffix='', $keyprefix='', $onetrtd=0)
6265
+    {
6266
+        global $db, $conf, $langs, $action, $form;
6267
+
6268
+        if (! is_object($form)) $form=new Form($db);
6269
+
6270
+        $out = '';
6271
+
6272
+        if (is_array($extrafields->attributes[$this->table_element]['label']) && count($extrafields->attributes[$this->table_element]['label']) > 0)
6273
+        {
6274
+            $out .= "\n";
6275
+            $out .= '<!-- showOptionalsInput --> ';
6276
+            $out .= "\n";
6277
+
6278
+            $e = 0;
6279
+            foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
6280
+            {
6281
+                // Show only the key field in params
6282
+                if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) continue;
6283
+
6284
+                $enabled = 1;
6285
+                if ($enabled && isset($extrafields->attributes[$this->table_element]['list'][$key]))
6286
+                {
6287
+                    $enabled = dol_eval($extrafields->attributes[$this->table_element]['list'][$key], 1);
6288
+                }
6289
+
6290
+                $perms = 1;
6291
+                if ($perms && isset($extrafields->attributes[$this->table_element]['perms'][$key]))
6292
+                {
6293
+                    $perms = dol_eval($extrafields->attributes[$this->table_element]['perms'][$key], 1);
6294
+                }
6295
+
6296
+                if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) continue;	// <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6297
+                if (empty($perms)) continue;
6298
+
6299
+                // Load language if required
6300
+                if (! empty($extrafields->attributes[$this->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
6301
+
6302
+                $colspan='3';
6303
+                if (is_array($params) && count($params)>0) {
6304
+                    if (array_key_exists('colspan',$params)) {
6305
+                        $colspan=$params['colspan'];
6306
+                    }
6307
+                }
6308
+
6309
+                switch($mode) {
6310
+                    case "view":
6311
+                        $value=$this->array_options["options_".$key.$keysuffix];
6312
+                        break;
6313
+                    case "edit":
6314
+                        $getposttemp = GETPOST($keyprefix.'options_'.$key.$keysuffix, 'none');				// GETPOST can get value from GET, POST or setup of default values.
6315
+                        // GETPOST("options_" . $key) can be 'abc' or array(0=>'abc')
6316
+                        if (is_array($getposttemp) || $getposttemp != '' || GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix))
6317
+                        {
6318
+                            if (is_array($getposttemp)) {
6319
+                                // $getposttemp is an array but following code expects a comma separated string
6320
+                                $value = implode(",", $getposttemp);
6321
+                            } else {
6322
+                                $value = $getposttemp;
6323
+                            }
6324
+                        } else {
6325
+                            $value = $this->array_options["options_" . $key];			// No GET, no POST, no default value, so we take value of object.
6326
+                        }
6327
+                        //var_dump($keyprefix.' - '.$key.' - '.$keysuffix.' - '.$keyprefix.'options_'.$key.$keysuffix.' - '.$this->array_options["options_".$key.$keysuffix].' - '.$getposttemp.' - '.$value);
6328
+                        break;
6329
+                }
6330
+
6331
+                if ($extrafields->attributes[$this->table_element]['type'][$key] == 'separate')
6332
+                {
6333
+                    $out .= $extrafields->showSeparator($key, $this);
6334
+                }
6335
+                else
6336
+                {
6337
+                    $csstyle='';
6338
+                    $class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
6339
+                    if (is_array($params) && count($params)>0) {
6340
+                        if (array_key_exists('style',$params)) {
6341
+                            $csstyle=$params['style'];
6342
+                        }
6343
+                    }
6344
+
6345
+                    // add html5 elements
6346
+                    $domData  = ' data-element="extrafield"';
6347
+                    $domData .= ' data-targetelement="'.$this->element.'"';
6348
+                    $domData .= ' data-targetid="'.$this->id.'"';
6349
+
6350
+                    $html_id = !empty($this->id) ? 'extrarow-'.$this->element.'_'.$key.'_'.$this->id : '';
6351
+
6352
+                    $out .= '<tr id="'.$html_id.'" '.$csstyle.' class="'.$class.$this->element.'_extras_'.$key.'" '.$domData.' >';
6353
+
6354
+                    if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) {
6355
+                        if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) {
6356
+                            $colspan = '0';
6357
+                        }
6358
+                    }
6359
+
6360
+                    if ($action == 'selectlines') { $colspan++; }
6361
+
6362
+                    // Convert date into timestamp format (value in memory must be a timestamp)
6363
+                    if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('date','datetime')))
6364
+                    {
6365
+                        $datenotinstring = $this->array_options['options_' . $key];
6366
+                        if (! is_numeric($this->array_options['options_' . $key]))	// For backward compatibility
6367
+                        {
6368
+                            $datenotinstring = $this->db->jdate($datenotinstring);
6369
+                        }
6370
+                        $value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min",'int',3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year",'int',3)):$datenotinstring;
6371
+                    }
6372
+                    // Convert float submited string into real php numeric (value in memory must be a php numeric)
6373
+                    if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('price','double')))
6374
+                    {
6375
+                        $value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?price2num(GETPOST($keyprefix.'options_'.$key.$keysuffix, 'alpha', 3)):$this->array_options['options_'.$key];
6376
+                    }
6377
+
6378
+                    $labeltoshow = $langs->trans($label);
6379
+
6380
+                    $out .= '<td class="titlefield';
6381
+                    if (GETPOST('action','none') == 'create') $out.='create';
6382
+                    if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
6383
+                    $out .= '">';
6384
+                    if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6385
+                    else $out .= $labeltoshow;
6386
+                    $out .= '</td>';
6387
+
6388
+                    $html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : '';
6389
+                    $out .='<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'" '.($colspan?' colspan="'.$colspan.'"':'').'>';
6390
+
6391
+                    switch($mode) {
6392
+                        case "view":
6393
+                            $out .= $extrafields->showOutputField($key, $value);
6394
+                            break;
6395
+                        case "edit":
6396
+                            $out .= $extrafields->showInputField($key, $value, '', $keysuffix, '', 0, $this->id);
6397
+                            break;
6398
+                    }
6399
+
6400
+                    $out .= '</td>';
6401
+
6402
+                    if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1))
6403
+                        $out .= '</tr>';
6404
+                    else $out .= '</tr>';
6405
+                    $e++;
6406
+                }
6407
+            }
6408
+            $out .= "\n";
6409
+            // Add code to manage list depending on others
6410
+            if (!empty(Globals::$conf->use_javascript_ajax)) {
6411
+                $out .= '
6412
+				<script type="text/javascript">
6413
+				    jQuery(document).ready(function() {
6414
+				    	function showOptions(child_list, parent_list)
6415
+				    	{
6416
+				    		var val = $("select[name=\"options_"+parent_list+"\"]").val();
6417
+				    		var parentVal = parent_list + ":" + val;
6418
+							if(val > 0) {
6419
+					    		$("select[name=\""+child_list+"\"] option[parent]").hide();
6420
+					    		$("select[name=\""+child_list+"\"] option[parent=\""+parentVal+"\"]").show();
6421
+							} else {
6422
+								$("select[name=\""+child_list+"\"] option").show();
6423
+							}
6424
+				    	}
6425
+						function setListDependencies() {
6426
+					    	jQuery("select option[parent]").parent().each(function() {
6427
+					    		var child_list = $(this).attr("name");
6428
+								var parent = $(this).find("option[parent]:first").attr("parent");
6429
+								var infos = parent.split(":");
6430
+								var parent_list = infos[0];
6431
+								$("select[name=\""+parent_list+"\"]").change(function() {
6432
+									showOptions(child_list, parent_list);
6433
+								});
6434
+					    	});
6435
+						}
6436
+
6437
+						setListDependencies();
6438
+				    });
6439
+				</script>'."\n";
6440
+                $out .= '<!-- /showOptionalsInput --> '."\n";
6441
+            }
6442
+        }
6443
+        return $out;
6444
+    }
6445
+
6446
+
6447
+    /**
6448
+     * Returns the rights used for this class
6449
+     * @return stdClass
6450
+     */
6451
+    public function getRights()
6452
+    {
6453
+        global $user;
6454
+
6455
+        $element = $this->element;
6456
+        if ($element == 'facturerec') $element='facture';
6457
+
6458
+        return $user->rights->{$element};
6459
+    }
6460
+
6461
+    /**
6462
+     * Function used to replace a thirdparty id with another one.
6463
+     * This function is meant to be called from replaceThirdparty with the appropiate tables
6464
+     * Column name fk_soc MUST be used to identify thirdparties
6465
+     *
6466
+     * @param  DoliDB 	   $db 			  Database handler
6467
+     * @param  int 		   $origin_id     Old thirdparty id (the thirdparty to delete)
6468
+     * @param  int 		   $dest_id       New thirdparty id (the thirdparty that will received element of the other)
6469
+     * @param  string[]    $tables        Tables that need to be changed
6470
+     * @param  int         $ignoreerrors  Ignore errors. Return true even if errors. We need this when replacement can fails like for categories (categorie of old thirdparty may already exists on new one)
6471
+     * @return bool						  True if success, False if error
6472
+     */
6473
+    public static function commonReplaceThirdparty(DoliDB $db, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
6474
+    {
6475
+        foreach ($tables as $table)
6476
+        {
6477
+            $sql = 'UPDATE '.MAIN_DB_PREFIX.$table.' SET fk_soc = '.$dest_id.' WHERE fk_soc = '.$origin_id;
5862 6478
 
5863
-						$(document).on("click", "a.'.dol_escape_js($keyprefix.$key.$keysuffix).'_del", function() {
5864
-							$(this).parent().remove();
5865
-						});
5866
-					});
5867
-					</script>';
5868
-			}
5869
-		}
5870
-		if (!empty($hidden)) {
5871
-			$out='<input type="hidden" value="'.$value.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'"/>';
5872
-		}
5873
-		/* Add comments
5874
-		 if ($type == 'date') $out.=' (YYYY-MM-DD)';
5875
-		 elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)';
5876
-		 */
5877
-		return $out;
5878
-	}
5879
-
5880
-	/**
5881
-	 * Return HTML string to show a field into a page
5882
-	 * Code very similar with showOutputField of extra fields
5883
-	 *
5884
-	 * @param  array   $val		       Array of properties of field to show
5885
-	 * @param  string  $key            Key of attribute
5886
-	 * @param  string  $value          Preselected value to show (for date type it must be in timestamp format, for amount or price it must be a php numeric value)
5887
-	 * @param  string  $moreparam      To add more parametes on html input tag
5888
-	 * @param  string  $keysuffix      Prefix string to add into name and id of field (can be used to avoid duplicate names)
5889
-	 * @param  string  $keyprefix      Suffix string to add into name and id of field (can be used to avoid duplicate names)
5890
-	 * @param  mixed   $showsize       Value for css to define size. May also be a numeric.
5891
-	 * @return string
5892
-	 */
5893
-	function showOutputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $showsize=0)
5894
-	{
5895
-		global $conf,$langs,$form;
5896
-
5897
-		if (! is_object($form))
5898
-		{
5899
-			require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5900
-			$form=new Form($this->db);
5901
-		}
5902
-
5903
-		$objectid = $this->id;
5904
-		$label = $val['label'];
5905
-		$type  = $val['type'];
5906
-		$size  = $val['css'];
5907
-
5908
-		// Convert var to be able to share same code than showOutputField of extrafields
5909
-		if (preg_match('/varchar\((\d+)\)/', $type, $reg))
5910
-		{
5911
-			$type = 'varchar';		// convert varchar(xx) int varchar
5912
-			$size = $reg[1];
5913
-		}
5914
-		elseif (preg_match('/varchar/', $type)) $type = 'varchar';		// convert varchar(xx) int varchar
5915
-		if (is_array($val['arrayofkeyval'])) $type='select';
5916
-		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type='link';
5917
-
5918
-		$default=$val['default'];
5919
-		$computed=$val['computed'];
5920
-		$unique=$val['unique'];
5921
-		$required=$val['required'];
5922
-		$param=$val['param'];
5923
-		if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
5924
-		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
5925
-		{
5926
-			$type='link';
5927
-			$param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
5928
-		}
5929
-		$langfile=$val['langfile'];
5930
-		$list=$val['list'];
5931
-		$help=$val['help'];
5932
-		$hidden=(($val['visible'] == 0) ? 1 : 0);			// If zero, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
5933
-
5934
-		if ($hidden) return '';
5935
-
5936
-		// If field is a computed field, value must become result of compute
5937
-		if ($computed)
5938
-		{
5939
-			// Make the eval of compute string
5940
-			//var_dump($computed);
5941
-			$value = dol_eval($computed, 1, 0);
5942
-		}
5943
-
5944
-		if (empty($showsize))
5945
-		{
5946
-			if ($type == 'date')
5947
-			{
5948
-				//$showsize=10;
5949
-				$showsize = 'minwidth100imp';
5950
-			}
5951
-			elseif ($type == 'datetime')
5952
-			{
5953
-				//$showsize=19;
5954
-				$showsize = 'minwidth200imp';
5955
-			}
5956
-			elseif (in_array($type,array('int','double','price')))
5957
-			{
5958
-				//$showsize=10;
5959
-				$showsize = 'maxwidth75';
5960
-			}
5961
-			elseif ($type == 'url')
5962
-			{
5963
-				$showsize='minwidth400';
5964
-			}
5965
-			elseif ($type == 'boolean')
5966
-			{
5967
-				$showsize='';
5968
-			}
5969
-			else
5970
-			{
5971
-				if (round($size) < 12)
5972
-				{
5973
-					$showsize = 'minwidth100';
5974
-				}
5975
-				else if (round($size) <= 48)
5976
-				{
5977
-					$showsize = 'minwidth200';
5978
-				}
5979
-				else
5980
-				{
5981
-					//$showsize=48;
5982
-					$showsize = 'minwidth400';
5983
-				}
5984
-			}
5985
-		}
5986
-
5987
-		// Format output value differently according to properties of field
5988
-		if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value=$this->getNomUrl(1, '', 0, '', 1);
5989
-		elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value=$this->getLibStatut(3);
5990
-		elseif ($type == 'date')
5991
-		{
5992
-			if(! empty($value)) {
5993
-				$value=dol_print_date($value,'day');
5994
-			} else {
5995
-				$value='';
5996
-			}
5997
-		}
5998
-		elseif ($type == 'datetime')
5999
-		{
6000
-			if(! empty($value)) {
6001
-				$value=dol_print_date($value,'dayhour');
6002
-			} else {
6003
-				$value='';
6004
-			}
6005
-		}
6006
-		elseif ($type == 'double')
6007
-		{
6008
-			if (!empty($value)) {
6009
-				$value=price($value);
6010
-			}
6011
-		}
6012
-		elseif ($type == 'boolean')
6013
-		{
6014
-			$checked='';
6015
-			if (!empty($value)) {
6016
-				$checked=' checked ';
6017
-			}
6018
-			$value='<input type="checkbox" '.$checked.' '.($moreparam?$moreparam:'').' readonly disabled>';
6019
-		}
6020
-		elseif ($type == 'mail')
6021
-		{
6022
-			$value=dol_print_email($value,0,0,0,64,1,1);
6023
-		}
6024
-		elseif ($type == 'url')
6025
-		{
6026
-			$value=dol_print_url($value,'_blank',32,1);
6027
-		}
6028
-		elseif ($type == 'phone')
6029
-		{
6030
-			$value=dol_print_phone($value, '', 0, 0, '', '&nbsp;', 1);
6031
-		}
6032
-		elseif ($type == 'price')
6033
-		{
6034
-			$value = price($value, 0, $langs, 0, 0, -1, Globals::$conf->currency);
6035
-        }
6036
-		elseif ($type == 'select')
6037
-		{
6038
-			$value=$param['options'][$value];
6039
-		}
6040
-		elseif ($type == 'sellist')
6041
-		{
6042
-			$param_list=array_keys($param['options']);
6043
-			$InfoFieldList = explode(":", $param_list[0]);
6044
-
6045
-			$selectkey="rowid";
6046
-			$keyList='rowid';
6047
-
6048
-			if (count($InfoFieldList)>=3)
6049
-			{
6050
-				$selectkey = $InfoFieldList[2];
6051
-				$keyList=$InfoFieldList[2].' as rowid';
6052
-			}
6053
-
6054
-			$fields_label = explode('|',$InfoFieldList[1]);
6055
-			if(is_array($fields_label)) {
6056
-				$keyList .=', ';
6057
-				$keyList .= implode(', ', $fields_label);
6058
-			}
6059
-
6060
-			$sql = 'SELECT '.$keyList;
6061
-			$sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
6062
-			if (strpos($InfoFieldList[4], 'extra')!==false)
6063
-			{
6064
-				$sql.= ' as main';
6065
-			}
6066
-			if ($selectkey=='rowid' && empty($value)) {
6067
-				$sql.= " WHERE ".$selectkey."=0";
6068
-			} elseif ($selectkey=='rowid') {
6069
-				$sql.= " WHERE ".$selectkey."=".$this->db->escape($value);
6070
-			}else {
6071
-				$sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6072
-			}
6073
-
6074
-			//$sql.= ' AND entity = '.Globals::$conf->entity;
6479
+            if (! $db->query($sql))
6480
+            {
6481
+                if ($ignoreerrors) return true;		// TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6482
+                //$this->errors = $db->lasterror();
6483
+                return false;
6484
+            }
6485
+        }
6075 6486
 
6076
-            dol_syslog(get_class($this).':showOutputField:$type=sellist', LOG_DEBUG);
6077
-			$resql = $this->db->query($sql);
6078
-			if ($resql)
6079
-			{
6080
-				$value='';	// value was used, so now we reste it to use it to build final output
6487
+        return true;
6488
+    }
6081 6489
 
6082
-				$obj = $this->db->fetch_object($resql);
6490
+    /**
6491
+     * Get buy price to use for margin calculation. This function is called when buy price is unknown.
6492
+     *	 Set buy price = sell price if ForceBuyingPriceIfNull configured,
6493
+     *   else if calculation MARGIN_TYPE = 'costprice' and costprice is defined, use costprice as buyprice
6494
+     *	 else if calculation MARGIN_TYPE = 'pmp' and pmp is calculated, use pmp as buyprice
6495
+     *	 else set min buy price as buy price
6496
+     *
6497
+     * @param float		$unitPrice		 Product unit price
6498
+     * @param float		$discountPercent Line discount percent
6499
+     * @param int		$fk_product		 Product id
6500
+     * @return	float                    <0 if KO, buyprice if OK
6501
+     */
6502
+    public function defineBuyPrice($unitPrice = 0.0, $discountPercent = 0.0, $fk_product = 0)
6503
+    {
6504
+        global $conf;
6083 6505
 
6084
-				// Several field into label (eq table:code|libelle:rowid)
6085
-				$fields_label = explode('|',$InfoFieldList[1]);
6506
+        $buyPrice = 0;
6086 6507
 
6087
-				if(is_array($fields_label) && count($fields_label)>1)
6088
-				{
6089
-					foreach ($fields_label as $field_toshow)
6090
-					{
6091
-						$translabel='';
6092
-						if (!empty($obj->$field_toshow)) {
6093
-							$translabel=$langs->trans($obj->$field_toshow);
6094
-						}
6095
-						if ($translabel!=$field_toshow) {
6096
-							$value.=dol_trunc($translabel,18).' ';
6097
-						}else {
6098
-							$value.=$obj->$field_toshow.' ';
6099
-						}
6100
-					}
6101
-				}
6102
-				else
6103
-				{
6104
-					$translabel='';
6105
-					if (!empty($obj->{$InfoFieldList[1]})) {
6106
-						$translabel=$langs->trans($obj->{$InfoFieldList[1]});
6107
-					}
6108
-					if ($translabel!=$obj->{$InfoFieldList[1]}) {
6109
-						$value=dol_trunc($translabel,18);
6110
-					}else {
6111
-						$value=$obj->{$InfoFieldList[1]};
6112
-					}
6113
-				}
6114
-			}
6115
-			else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
6116
-		}
6117
-		elseif ($type == 'radio')
6118
-		{
6119
-			$value=$param['options'][$value];
6120
-		}
6121
-		elseif ($type == 'checkbox')
6122
-		{
6123
-			$value_arr=explode(',',$value);
6124
-			$value='';
6125
-			if (is_array($value_arr) && count($value_arr)>0)
6126
-			{
6127
-				foreach ($value_arr as $keyval=>$valueval) {
6128
-					$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$param['options'][$valueval].'</li>';
6129
-				}
6130
-				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6131
-			}
6132
-		}
6133
-		elseif ($type == 'chkbxlst')
6134
-		{
6135
-			$value_arr = explode(',', $value);
6136
-
6137
-			$param_list = array_keys($param['options']);
6138
-			$InfoFieldList = explode(":", $param_list[0]);
6139
-
6140
-			$selectkey = "rowid";
6141
-			$keyList = 'rowid';
6142
-
6143
-			if (count($InfoFieldList) >= 3) {
6144
-				$selectkey = $InfoFieldList[2];
6145
-				$keyList = $InfoFieldList[2] . ' as rowid';
6146
-			}
6147
-
6148
-			$fields_label = explode('|', $InfoFieldList[1]);
6149
-			if (is_array($fields_label)) {
6150
-				$keyList .= ', ';
6151
-				$keyList .= implode(', ', $fields_label);
6152
-			}
6153
-
6154
-			$sql = 'SELECT ' . $keyList;
6155
-			$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
6156
-			if (strpos($InfoFieldList[4], 'extra') !== false) {
6157
-				$sql .= ' as main';
6158
-			}
6159
-			// $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6160
-			// $sql.= ' AND entity = '.Globals::$conf->entity;
6508
+        if (($unitPrice > 0) && (isset(Globals::$conf->global->ForceBuyingPriceIfNull) && Globals::$conf->global->ForceBuyingPriceIfNull == 1)) { // In most cases, test here is false{
6509
+            $buyPrice = $unitPrice * (1 - $discountPercent / 100);
6510
+        }
6511
+        else
6512
+        {
6513
+            // Get cost price for margin calculation
6514
+            if (! empty($fk_product))
6515
+            {
6516
+                if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'costprice') {
6517
+                    require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
6518
+                    $product = new Product($this->db);
6519
+                    $result = $product->fetch($fk_product);
6520
+                    if ($result <= 0)
6521
+                    {
6522
+                        $this->errors[] = 'ErrorProductIdDoesNotExists';
6523
+                        return -1;
6524
+                    }
6525
+                    if ($product->cost_price > 0)
6526
+                    {
6527
+                        $buyPrice = $product->cost_price;
6528
+                    }
6529
+                    else if ($product->pmp > 0)
6530
+                    {
6531
+                        $buyPrice = $product->pmp;
6532
+                    }
6533
+                }
6534
+                else if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'pmp') {
6535
+                    require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
6536
+                    $product = new Product($this->db);
6537
+                    $result = $product->fetch($fk_product);
6538
+                    if ($result <= 0)
6539
+                    {
6540
+                        $this->errors[] = 'ErrorProductIdDoesNotExists';
6541
+                        return -1;
6542
+                    }
6543
+                    if ($product->pmp > 0)
6544
+                    {
6545
+                        $buyPrice = $product->pmp;
6546
+                    }
6547
+                }
6548
+
6549
+                if (empty($buyPrice) && isset(Globals::$conf->global->MARGIN_TYPE) && in_array(Globals::$conf->global->MARGIN_TYPE, array('1', 'pmp', 'costprice'))) {
6550
+                    require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
6551
+                    $productFournisseur = new ProductFournisseur($this->db);
6552
+                    if (($result = $productFournisseur->find_min_price_product_fournisseur($fk_product)) > 0)
6553
+                    {
6554
+                        $buyPrice = $productFournisseur->fourn_unitprice;
6555
+                    }
6556
+                    else if ($result < 0)
6557
+                    {
6558
+                        $this->errors[] = $productFournisseur->error;
6559
+                        return -2;
6560
+                    }
6561
+                }
6562
+            }
6563
+        }
6564
+        return $buyPrice;
6565
+    }
6566
+
6567
+    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
6568
+    /**
6569
+     *  Show photos of an object (nbmax maximum), into several columns
6570
+     *
6571
+     *  @param		string	$modulepart		'product', 'ticket', ...
6572
+     *  @param      string	$sdir        	Directory to scan (full absolute path)
6573
+     *  @param      int		$size        	0=original size, 1='small' use thumbnail if possible
6574
+     *  @param      int		$nbmax       	Nombre maximum de photos (0=pas de max)
6575
+     *  @param      int		$nbbyrow     	Number of image per line or -1 to use div. Used only if size=1.
6576
+     * 	@param		int		$showfilename	1=Show filename
6577
+     * 	@param		int		$showaction		1=Show icon with action links (resize, delete)
6578
+     * 	@param		int		$maxHeight		Max height of original image when size='small' (so we can use original even if small requested). If 0, always use 'small' thumb image.
6579
+     * 	@param		int		$maxWidth		Max width of original image when size='small'
6580
+     *  @param      int     $nolink         Do not add a href link to view enlarged imaged into a new tab
6581
+     *  @param      int     $notitle        Do not add title tag on image
6582
+     *  @param		int		$usesharelink	Use the public shared link of image (if not available, the 'nophoto' image will be shown instead)
6583
+     *  @return     string					Html code to show photo. Number of photos shown is saved in this->nbphoto
6584
+     */
6585
+    function show_photos($modulepart, $sdir, $size=0, $nbmax=0, $nbbyrow=5, $showfilename=0, $showaction=0, $maxHeight=120, $maxWidth=160, $nolink=0, $notitle=0, $usesharelink=0)
6586
+    {
6587
+        // phpcs:enable
6588
+        global $conf,$user,$langs;
6589
+
6590
+        include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
6591
+        include_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';
6592
+
6593
+        $sortfield='position_name';
6594
+        $sortorder='asc';
6595
+
6596
+        $dir = $sdir . '/';
6597
+        $pdir = '/';
6598
+        if ($modulepart == 'ticket')
6599
+        {
6600
+            $dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6601
+            $pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6602
+        }
6603
+        else
6604
+        {
6605
+            $dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
6606
+            $pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
6607
+        }
6608
+
6609
+        // For backward compatibility
6610
+        if ($modulepart == 'product' && !empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
6611
+            $dir = $sdir . '/'. get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6612
+            $pdir = '/' . get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6613
+        }
6614
+
6615
+        // Defined relative dir to DOL_DATA_ROOT
6616
+        $relativedir = '';
6617
+        if ($dir)
6618
+        {
6619
+            $relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $dir);
6620
+            $relativedir = preg_replace('/^[\\/]/','',$relativedir);
6621
+            $relativedir = preg_replace('/[\\/]$/','',$relativedir);
6622
+        }
6623
+
6624
+        $dirthumb = $dir.'thumbs/';
6625
+        $pdirthumb = $pdir.'thumbs/';
6626
+
6627
+        $return ='<!-- Photo -->'."\n";
6628
+        $nbphoto=0;
6629
+
6630
+        $filearray=dol_dir_list($dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
6631
+
6632
+        /* if (! empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))    // For backward compatiblity, we scan also old dirs
6633
+          {
6634
+          $filearrayold=dol_dir_list($dirold,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
6635
+          $filearray=array_merge($filearray, $filearrayold);
6636
+          } */
6637
+
6638
+        completeFileArrayWithDatabaseInfo($filearray, $relativedir);
6639
+
6640
+        if (count($filearray))
6641
+        {
6642
+            if ($sortfield && $sortorder)
6643
+            {
6644
+                $filearray=dol_sort_array($filearray, $sortfield, $sortorder);
6645
+            }
6646
+
6647
+            foreach($filearray as $key => $val)
6648
+            {
6649
+                $photo='';
6650
+                $file = $val['name'];
6651
+
6652
+                //if (! utf8_check($file)) $file=utf8_encode($file);	// To be sure file is stored in UTF8 in memory
6653
+
6654
+                //if (dol_is_file($dir.$file) && image_format_supported($file) >= 0)
6655
+                if (image_format_supported($file) >= 0)
6656
+                {
6657
+                    $nbphoto++;
6658
+                    $photo = $file;
6659
+                    $viewfilename = $file;
6660
+
6661
+                    if ($size == 1 || $size == 'small') {   // Format vignette
6662
+
6663
+                        // Find name of thumb file
6664
+                        $photo_vignette=basename(getImageFileNameForSize($dir.$file, '_small'));
6665
+                        if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
6666
+
6667
+                        // Get filesize of original file
6668
+                        $imgarray=dol_getImageSize($dir.$photo);
6669
+
6670
+                        if ($nbbyrow > 0)
6671
+                        {
6672
+                            if ($nbphoto == 1) $return.= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
6673
+
6674
+                            if ($nbphoto % $nbbyrow == 1) $return.= '<tr align=center valign=middle border=1>';
6675
+                            $return.= '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
6676
+                        }
6677
+                        else if ($nbbyrow < 0) $return .= '<div class="inline-block">';
6678
+
6679
+                        $return.= "\n";
6680
+
6681
+                        $relativefile=preg_replace('/^\//', '', $pdir.$photo);
6682
+                        if (empty($nolink))
6683
+                        {
6684
+                            $urladvanced=getAdvancedPreviewUrl($modulepart, $relativefile, 0, 'entity='.$this->entity);
6685
+                            if ($urladvanced) $return.='<a href="'.$urladvanced.'">';
6686
+                            else $return.= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
6687
+                        }
6688
+
6689
+                        // Show image (width height=$maxHeight)
6690
+                        // Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine
6691
+                        $alt=$langs->transnoentitiesnoconv('File').': '.$relativefile;
6692
+                        $alt.=' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
6693
+                        if ($notitle) $alt='';
6694
+
6695
+                        if ($usesharelink)
6696
+                        {
6697
+                            if ($val['share'])
6698
+                            {
6699
+                                if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6700
+                                {
6701
+                                    $return.= '<!-- Show original file (thumb not yet available with shared links) -->';
6702
+                                    $return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6703
+                                }
6704
+                                else {
6705
+                                    $return.= '<!-- Show original file -->';
6706
+                                    $return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6707
+                                }
6708
+                            }
6709
+                            else
6710
+                            {
6711
+                                $return.= '<!-- Show nophoto file (because file is not shared) -->';
6712
+                                $return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png" title="'.dol_escape_htmltag($alt).'">';
6713
+                            }
6714
+                        }
6715
+                        else
6716
+                        {
6717
+                            if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6718
+                            {
6719
+                                $return.= '<!-- Show thumb -->';
6720
+                                $return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
6721
+                            }
6722
+                            else {
6723
+                                $return.= '<!-- Show original file -->';
6724
+                                $return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
6725
+                            }
6726
+                        }
6727
+
6728
+                        if (empty($nolink)) $return.= '</a>';
6729
+                        $return.="\n";
6730
+
6731
+                        if ($showfilename) $return.= '<br>'.$viewfilename;
6732
+                        if ($showaction)
6733
+                        {
6734
+                            $return.= '<br>';
6735
+                            // On propose la generation de la vignette si elle n'existe pas et si la taille est superieure aux limites
6736
+                            if ($photo_vignette && (image_format_supported($photo) > 0) && ($this->imgWidth > $maxWidth || $this->imgHeight > $maxHeight))
6737
+                            {
6738
+                                $return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=addthumb&amp;file='.urlencode($pdir.$viewfilename).'">'.img_picto($langs->trans('GenerateThumb'),'refresh').'&nbsp;&nbsp;</a>';
6739
+                            }
6740
+                            // Special cas for product
6741
+                            if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6742
+                            {
6743
+                                // Link to resize
6744
+                                $return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6745
+
6746
+                                // Link to delete
6747
+                                $return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6748
+                                $return.= img_delete().'</a>';
6749
+                            }
6750
+                        }
6751
+                        $return.= "\n";
6752
+
6753
+                        if ($nbbyrow > 0)
6754
+                        {
6755
+                            $return.= '</td>';
6756
+                            if (($nbphoto % $nbbyrow) == 0) $return.= '</tr>';
6757
+                        }
6758
+                        else if ($nbbyrow < 0) $return.='</div>';
6759
+                    }
6760
+
6761
+                    if (empty($size)) {     // Format origine
6762
+                        $return.= '<img class="photo photowithmargin" border="0" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'">';
6763
+
6764
+                        if ($showfilename) $return.= '<br>'.$viewfilename;
6765
+                        if ($showaction)
6766
+                        {
6767
+                            // Special case for product
6768
+                            if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6769
+                            {
6770
+                                // Link to resize
6771
+                                $return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6772
+
6773
+                                // Link to delete
6774
+                                $return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6775
+                                $return.= img_delete().'</a>';
6776
+                            }
6777
+                        }
6778
+                    }
6779
+
6780
+                    // On continue ou on arrete de boucler ?
6781
+                    if ($nbmax && $nbphoto >= $nbmax) break;
6782
+                }
6783
+            }
6784
+
6785
+            if ($size==1 || $size=='small')
6786
+            {
6787
+                if ($nbbyrow > 0)
6788
+                {
6789
+                    // Ferme tableau
6790
+                    while ($nbphoto % $nbbyrow)
6791
+                    {
6792
+                        $return.= '<td width="'.ceil(100/$nbbyrow).'%">&nbsp;</td>';
6793
+                        $nbphoto++;
6794
+                    }
6795
+
6796
+                    if ($nbphoto) $return.= '</table>';
6797
+                }
6798
+            }
6799
+        }
6800
+
6801
+        $this->nbphoto = $nbphoto;
6802
+
6803
+        return $return;
6804
+    }
6805
+
6806
+
6807
+    /**
6808
+     * Function test if type is array
6809
+     *
6810
+     * @param   array   $info   content informations of field
6811
+     * @return                  bool
6812
+     */
6813
+    protected function isArray($info)
6814
+    {
6815
+        if(is_array($info))
6816
+        {
6817
+            if(isset($info['type']) && $info['type']=='array') return true;
6818
+            else return false;
6819
+        }
6820
+        else return false;
6821
+    }
6822
+
6823
+    /**
6824
+     * Function test if type is null
6825
+     *
6826
+     * @param   array   $info   content informations of field
6827
+     * @return                  bool
6828
+     */
6829
+    protected function isNull($info)
6830
+    {
6831
+        if(is_array($info))
6832
+        {
6833
+            if(isset($info['type']) && $info['type']=='null') return true;
6834
+            else return false;
6835
+        }
6836
+        else return false;
6837
+    }
6838
+
6839
+    /**
6840
+     * Function test if type is date
6841
+     *
6842
+     * @param   array   $info   content informations of field
6843
+     * @return                  bool
6844
+     */
6845
+    public function isDate($info)
6846
+    {
6847
+        if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true;
6848
+        else return false;
6849
+    }
6850
+
6851
+    /**
6852
+     * Function test if type is integer
6853
+     *
6854
+     * @param   array   $info   content informations of field
6855
+     * @return                  bool
6856
+     */
6857
+    public function isInt($info)
6858
+    {
6859
+        if(is_array($info))
6860
+        {
6861
+            if(isset($info['type']) && ($info['type']=='int' || preg_match('/^integer/i',$info['type']) ) ) return true;
6862
+            else return false;
6863
+        }
6864
+        else return false;
6865
+    }
6866
+
6867
+    /**
6868
+     * Function test if type is float
6869
+     *
6870
+     * @param   array   $info   content informations of field
6871
+     * @return                  bool
6872
+     */
6873
+    public function isFloat($info)
6874
+    {
6875
+        if(is_array($info))
6876
+        {
6877
+            if (isset($info['type']) && (preg_match('/^(double|real)/i', $info['type']))) return true;
6878
+            else return false;
6879
+        }
6880
+        else return false;
6881
+    }
6882
+
6883
+    /**
6884
+     * Function test if type is text
6885
+     *
6886
+     * @param   array   $info   content informations of field
6887
+     * @return                  bool
6888
+     */
6889
+    public function isText($info)
6890
+    {
6891
+        if(is_array($info))
6892
+        {
6893
+            if(isset($info['type']) && $info['type']=='text') return true;
6894
+            else return false;
6895
+        }
6896
+        else return false;
6897
+    }
6898
+
6899
+    /**
6900
+     * Function test if is indexed
6901
+     *
6902
+     * @param   array   $info   content informations of field
6903
+     * @return                  bool
6904
+     */
6905
+    protected function isIndex($info)
6906
+    {
6907
+        if(is_array($info))
6908
+        {
6909
+            if(isset($info['index']) && $info['index']==true) return true;
6910
+            else return false;
6911
+        }
6912
+        else return false;
6913
+    }
6914
+
6915
+    /**
6916
+     * Function to prepare the values to insert.
6917
+     * Note $this->${field} are set by the page that make the createCommon or the updateCommon.
6918
+     *
6919
+     * @return array
6920
+     */
6921
+    protected function setSaveQuery()
6922
+    {
6923
+        global $conf;
6924
+
6925
+        $queryarray=array();
6926
+        foreach ($this->fields as $field=>$info)	// Loop on definition of fields
6927
+        {
6928
+            // Depending on field type ('datetime', ...)
6929
+            if($this->isDate($info))
6930
+            {
6931
+                if(empty($this->{$field}))
6932
+                {
6933
+                    $queryarray[$field] = null;
6934
+                }
6935
+                else
6936
+                {
6937
+                    $queryarray[$field] = $this->db->idate($this->{$field});
6938
+                }
6939
+            }
6940
+            else if($this->isArray($info))
6941
+            {
6942
+                if(! empty($this->{$field})) {
6943
+                    if(! is_array($this->{$field})) {
6944
+                        $this->{$field} = array($this->{$field});
6945
+                    }
6946
+                    $queryarray[$field] = serialize($this->{$field});
6947
+                } else {
6948
+                    $queryarray[$field] = null;
6949
+                }
6950
+            }
6951
+            else if($this->isInt($info))
6952
+            {
6953
+                if ($field == 'entity' && is_null($this->{$field}))
6954
+                    $queryarray[$field] = Globals::$conf->entity;
6955
+                else
6956
+                {
6957
+                    $queryarray[$field] = (int) price2num($this->{$field});
6958
+                    if (empty($queryarray[$field])) $queryarray[$field]=0;		// May be reset to null later if property 'notnull' is -1 for this field.
6959
+                }
6960
+            }
6961
+            else if($this->isFloat($info))
6962
+            {
6963
+                $queryarray[$field] = (double) price2num($this->{$field});
6964
+                if (empty($queryarray[$field])) $queryarray[$field]=0;
6965
+            }
6966
+            else
6967
+            {
6968
+                $queryarray[$field] = $this->{$field};
6969
+            }
6970
+
6971
+            if ($info['type'] == 'timestamp' && empty($queryarray[$field])) unset($queryarray[$field]);
6972
+            if (! empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) $queryarray[$field] = null;
6973
+        }
6974
+
6975
+        return $queryarray;
6976
+    }
6977
+
6978
+    /**
6979
+     * Function to load data from a SQL pointer into properties of current object $this
6980
+     *
6981
+     * @param   stdClass    $obj    Contain data of object from database
6982
+     * @return void
6983
+     */
6984
+    protected function setVarsFromFetchObj(&$obj)
6985
+    {
6986
+        foreach ($this->fields as $field => $info)
6987
+        {
6988
+            if($this->isDate($info))
6989
+            {
6990
+                if(empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') $this->{$field} = 0;
6991
+                else $this->{$field} = strtotime($obj->{$field});
6992
+            }
6993
+            elseif($this->isArray($info))
6994
+            {
6995
+                if(! empty($obj->{$field})) {
6996
+                    $this->{$field} = @unserialize($obj->{$field});
6997
+                    // Hack for data not in UTF8
6998
+                    if($this->{$field } === false) @unserialize(utf8_decode($obj->{$field}));
6999
+                } else {
7000
+                    $this->{$field} = array();
7001
+                }
7002
+            }
7003
+            elseif($this->isInt($info))
7004
+            {
7005
+                if ($field == 'rowid') $this->id = (int) $obj->{$field};
7006
+                else $this->{$field} = (int) $obj->{$field};
7007
+            }
7008
+            elseif($this->isFloat($info))
7009
+            {
7010
+                $this->{$field} = (double) $obj->{$field};
7011
+            }
7012
+            elseif($this->isNull($info))
7013
+            {
7014
+                $val = $obj->{$field};
7015
+                // zero is not null
7016
+                $this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val);
7017
+            }
7018
+            else
7019
+            {
7020
+                $this->{$field} = $obj->{$field};
7021
+            }
7022
+        }
7023
+
7024
+        // If there is no 'ref' field, we force property ->ref to ->id for a better compatibility with common functions.
7025
+        if (! isset($this->fields['ref']) && isset($this->id)) $this->ref = $this->id;
7026
+    }
7027
+
7028
+    /**
7029
+     * Function to concat keys of fields
7030
+     *
7031
+     * @return string
7032
+     */
7033
+    protected function getFieldList()
7034
+    {
7035
+        $keys = array_keys($this->fields);
7036
+        return implode(',', $keys);
7037
+    }
7038
+
7039
+    /**
7040
+     * Add quote to field value if necessary
7041
+     *
7042
+     * @param 	string|int	$value			Value to protect
7043
+     * @param	array		$fieldsentry	Properties of field
7044
+     * @return 	string
7045
+     */
7046
+    protected function quote($value, $fieldsentry)
7047
+    {
7048
+        if (is_null($value)) return 'NULL';
7049
+        else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) return $this->db->escape("$value");
7050
+        else return "'".$this->db->escape($value)."'";
7051
+    }
7052
+
7053
+
7054
+    /**
7055
+     * Create object into database
7056
+     *
7057
+     * @param  User $user      User that creates
7058
+     * @param  bool $notrigger false=launch triggers after, true=disable triggers
7059
+     * @return int             <0 if KO, Id of created object if OK
7060
+     */
7061
+    public function createCommon(User $user, $notrigger = false)
7062
+    {
7063
+        global $langs;
6161 7064
 
6162
-            dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst',LOG_DEBUG);
6163
-			$resql = $this->db->query($sql);
6164
-			if ($resql) {
6165
-				$value = ''; // value was used, so now we reste it to use it to build final output
6166
-				$toprint=array();
6167
-				while ( $obj = $this->db->fetch_object($resql) ) {
6168
-
6169
-					// Several field into label (eq table:code|libelle:rowid)
6170
-					$fields_label = explode('|', $InfoFieldList[1]);
6171
-					if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
6172
-						if (is_array($fields_label) && count($fields_label) > 1) {
6173
-							foreach ( $fields_label as $field_toshow ) {
6174
-								$translabel = '';
6175
-								if (! empty($obj->$field_toshow)) {
6176
-									$translabel = $langs->trans($obj->$field_toshow);
6177
-								}
6178
-								if ($translabel != $field_toshow) {
6179
-									$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6180
-								} else {
6181
-									$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
6182
-								}
6183
-							}
6184
-						} else {
6185
-							$translabel = '';
6186
-							if (! empty($obj->{$InfoFieldList[1]})) {
6187
-								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
6188
-							}
6189
-							if ($translabel != $obj->{$InfoFieldList[1]}) {
6190
-								$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6191
-							} else {
6192
-								$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>';
6193
-							}
6194
-						}
6195
-					}
6196
-				}
6197
-				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6198
-			} else {
6199
-				dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
6200
-			}
6201
-		}
6202
-		elseif ($type == 'link')
6203
-		{
6204
-			$out='';
6205
-
6206
-			// only if something to display (perf)
6207
-			if ($value)
6208
-			{
6209
-				$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
7065
+        $error = 0;
6210 7066
 
6211
-				$InfoFieldList = explode(":", $param_list[0]);
6212
-				$classname=$InfoFieldList[0];
6213
-				$classpath=$InfoFieldList[1];
6214
-				$getnomurlparam=(empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]);
6215
-				if (! empty($classpath))
6216
-				{
6217
-					dol_include_once($InfoFieldList[1]);
6218
-					if ($classname && class_exists($classname))
6219
-					{
6220
-						$object = new $classname($this->db);
6221
-						$object->fetch($value);
6222
-						$value=$object->getNomUrl($getnomurlparam);
6223
-					}
6224
-				}
6225
-				else
6226
-				{
6227
-					dol_syslog('Error bad setup of extrafield', LOG_WARNING);
6228
-					return 'Error bad setup of extrafield';
6229
-				}
6230
-			}
6231
-			else $value='';
6232
-		}
6233
-		elseif ($type == 'text' || $type == 'html')
6234
-		{
6235
-			$value=dol_htmlentitiesbr($value);
6236
-		}
6237
-		elseif ($type == 'password')
6238
-		{
6239
-			$value=preg_replace('/./i','*',$value);
6240
-		}
6241
-		elseif ($type == 'array')
6242
-		{
6243
-			$value = implode('<br>', $value);
6244
-		}
6245
-
6246
-		//print $type.'-'.$size;
6247
-		$out=$value;
6248
-
6249
-		return $out;
6250
-	}
6251
-
6252
-
6253
-	/**
6254
-	 * Function to show lines of extrafields with output datas
6255
-	 *
6256
-	 * @param 	Extrafields $extrafields    Extrafield Object
6257
-	 * @param 	string      $mode           Show output (view) or input (edit) for extrafield
6258
-	 * @param 	array       $params         Optional parameters. Example: array('style'=>'class="oddeven"', 'colspan'=>$colspan)
6259
-	 * @param 	string      $keysuffix      Suffix string to add after name and id of field (can be used to avoid duplicate names)
6260
-	 * @param 	string      $keyprefix      Prefix string to add before name and id of field (can be used to avoid duplicate names)
6261
-	 * @param	string		$onetrtd		All fields in same tr td
6262
-	 * @return 	string
6263
-	 */
6264
-	function showOptionals($extrafields, $mode='view', $params=null, $keysuffix='', $keyprefix='', $onetrtd=0)
6265
-	{
6266
-		global $db, $conf, $langs, $action, $form;
6267
-
6268
-		if (! is_object($form)) $form=new Form($db);
6269
-
6270
-		$out = '';
6271
-
6272
-		if (is_array($extrafields->attributes[$this->table_element]['label']) && count($extrafields->attributes[$this->table_element]['label']) > 0)
6273
-		{
6274
-			$out .= "\n";
6275
-			$out .= '<!-- showOptionalsInput --> ';
6276
-			$out .= "\n";
6277
-
6278
-			$e = 0;
6279
-			foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
6280
-			{
6281
-				// Show only the key field in params
6282
-				if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) continue;
7067
+        $now=dol_now();
6283 7068
 
6284
-				$enabled = 1;
6285
-				if ($enabled && isset($extrafields->attributes[$this->table_element]['list'][$key]))
6286
-				{
6287
-					$enabled = dol_eval($extrafields->attributes[$this->table_element]['list'][$key], 1);
6288
-				}
7069
+        $fieldvalues = $this->setSaveQuery();
7070
+        if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now);
7071
+        if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id;
7072
+        unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
6289 7073
 
6290
-				$perms = 1;
6291
-				if ($perms && isset($extrafields->attributes[$this->table_element]['perms'][$key]))
6292
-				{
6293
-					$perms = dol_eval($extrafields->attributes[$this->table_element]['perms'][$key], 1);
6294
-				}
7074
+        $keys=array();
7075
+        $values = array();
7076
+        foreach ($fieldvalues as $k => $v) {
7077
+            $keys[$k] = $k;
7078
+            $value = $this->fields[$k];
7079
+            $values[$k] = $this->quote($v, $value);
7080
+        }
6295 7081
 
6296
-				if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) continue;	// <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6297
-				if (empty($perms)) continue;
7082
+        // Clean and check mandatory
7083
+        foreach($keys as $key)
7084
+        {
7085
+            // If field is an implicit foreign key field
7086
+            if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';
7087
+            if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';
6298 7088
 
6299
-				// Load language if required
6300
-				if (! empty($extrafields->attributes[$this->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
7089
+            //var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7090
+            if (isset($this->fields[$key]['notnull']) && $this->fields[$key]['notnull'] == 1 && ! isset($values[$key]) && is_null($val['default']))
7091
+            {
7092
+                $error++;
7093
+                $this->errors[]=$langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7094
+            }
6301 7095
 
6302
-				$colspan='3';
6303
-				if (is_array($params) && count($params)>0) {
6304
-					if (array_key_exists('colspan',$params)) {
6305
-						$colspan=$params['colspan'];
6306
-					}
6307
-				}
7096
+            // If field is an implicit foreign key field
7097
+            if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) $values[$key]='null';
7098
+            if (! empty($this->fields[$key]['foreignkey']) && empty($values[$key])) $values[$key]='null';
7099
+        }
6308 7100
 
6309
-				switch($mode) {
6310
-					case "view":
6311
-						$value=$this->array_options["options_".$key.$keysuffix];
6312
-						break;
6313
-					case "edit":
6314
-						$getposttemp = GETPOST($keyprefix.'options_'.$key.$keysuffix, 'none');				// GETPOST can get value from GET, POST or setup of default values.
6315
-						// GETPOST("options_" . $key) can be 'abc' or array(0=>'abc')
6316
-						if (is_array($getposttemp) || $getposttemp != '' || GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix))
6317
-						{
6318
-							if (is_array($getposttemp)) {
6319
-								// $getposttemp is an array but following code expects a comma separated string
6320
-								$value = implode(",", $getposttemp);
6321
-							} else {
6322
-								$value = $getposttemp;
6323
-							}
6324
-						} else {
6325
-							$value = $this->array_options["options_" . $key];			// No GET, no POST, no default value, so we take value of object.
6326
-						}
6327
-						//var_dump($keyprefix.' - '.$key.' - '.$keysuffix.' - '.$keyprefix.'options_'.$key.$keysuffix.' - '.$this->array_options["options_".$key.$keysuffix].' - '.$getposttemp.' - '.$value);
6328
-						break;
6329
-				}
7101
+        if ($error) return -1;
6330 7102
 
6331
-				if ($extrafields->attributes[$this->table_element]['type'][$key] == 'separate')
6332
-				{
6333
-					$out .= $extrafields->showSeparator($key, $this);
6334
-				}
6335
-				else
6336
-				{
6337
-					$csstyle='';
6338
-					$class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
6339
-					if (is_array($params) && count($params)>0) {
6340
-						if (array_key_exists('style',$params)) {
6341
-							$csstyle=$params['style'];
6342
-						}
6343
-					}
7103
+        $this->db->begin();
6344 7104
 
6345
-					// add html5 elements
6346
-					$domData  = ' data-element="extrafield"';
6347
-					$domData .= ' data-targetelement="'.$this->element.'"';
6348
-					$domData .= ' data-targetid="'.$this->id.'"';
7105
+        if (! $error)
7106
+        {
7107
+            $sql = 'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element;
7108
+            $sql.= ' ('.implode( ", ", $keys ).')';
7109
+            $sql.= ' VALUES ('.implode( ", ", $values ).')';
7110
+
7111
+            $res = $this->db->query($sql);
7112
+            if ($res===false) {
7113
+                $error++;
7114
+                $this->errors[] = $this->db->lasterror();
7115
+            }
7116
+        }
6349 7117
 
6350
-					$html_id = !empty($this->id) ? 'extrarow-'.$this->element.'_'.$key.'_'.$this->id : '';
7118
+        if (! $error)
7119
+        {
7120
+            $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
7121
+        }
6351 7122
 
6352
-					$out .= '<tr id="'.$html_id.'" '.$csstyle.' class="'.$class.$this->element.'_extras_'.$key.'" '.$domData.' >';
7123
+        // Create extrafields
7124
+        if (! $error)
7125
+        {
7126
+            $result=$this->insertExtraFields();
7127
+            if ($result < 0) $error++;
7128
+        }
6353 7129
 
6354
-					if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) {
6355
-						if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) {
6356
-                            $colspan = '0';
6357
-                        }
6358
-                    }
7130
+        // Triggers
7131
+        if (! $error && ! $notrigger)
7132
+        {
7133
+            // Call triggers
7134
+            $result=$this->call_trigger(strtoupper(get_class($this)).'_CREATE',$user);
7135
+            if ($result < 0) { $error++; }
7136
+            // End call triggers
7137
+        }
6359 7138
 
6360
-					if ($action == 'selectlines') { $colspan++; }
7139
+        // Commit or rollback
7140
+        if ($error) {
7141
+            $this->db->rollback();
7142
+            return -1;
7143
+        } else {
7144
+            $this->db->commit();
7145
+            return $this->id;
7146
+        }
7147
+    }
6361 7148
 
6362
-					// Convert date into timestamp format (value in memory must be a timestamp)
6363
-					if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('date','datetime')))
6364
-					{
6365
-						$datenotinstring = $this->array_options['options_' . $key];
6366
-						if (! is_numeric($this->array_options['options_' . $key]))	// For backward compatibility
6367
-						{
6368
-							$datenotinstring = $this->db->jdate($datenotinstring);
6369
-						}
6370
-						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min",'int',3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year",'int',3)):$datenotinstring;
6371
-					}
6372
-					// Convert float submited string into real php numeric (value in memory must be a php numeric)
6373
-					if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('price','double')))
6374
-					{
6375
-						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?price2num(GETPOST($keyprefix.'options_'.$key.$keysuffix, 'alpha', 3)):$this->array_options['options_'.$key];
6376
-					}
6377
-
6378
-					$labeltoshow = $langs->trans($label);
6379
-
6380
-					$out .= '<td class="titlefield';
6381
-					if (GETPOST('action','none') == 'create') $out.='create';
6382
-					if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
6383
-					$out .= '">';
6384
-					if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6385
-					else $out .= $labeltoshow;
6386
-					$out .= '</td>';
6387
-
6388
-					$html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : '';
6389
-					$out .='<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'" '.($colspan?' colspan="'.$colspan.'"':'').'>';
6390
-
6391
-					switch($mode) {
6392
-						case "view":
6393
-							$out .= $extrafields->showOutputField($key, $value);
6394
-							break;
6395
-						case "edit":
6396
-							$out .= $extrafields->showInputField($key, $value, '', $keysuffix, '', 0, $this->id);
6397
-							break;
6398
-					}
6399
-
6400
-					$out .= '</td>';
6401
-
6402
-					if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1))
6403
-                        $out .= '</tr>';
6404
-                    else $out .= '</tr>';
6405
-					$e++;
6406
-				}
6407
-			}
6408
-			$out .= "\n";
6409
-			// Add code to manage list depending on others
6410
-			if (!empty(Globals::$conf->use_javascript_ajax)) {
6411
-                $out .= '
6412
-				<script type="text/javascript">
6413
-				    jQuery(document).ready(function() {
6414
-				    	function showOptions(child_list, parent_list)
6415
-				    	{
6416
-				    		var val = $("select[name=\"options_"+parent_list+"\"]").val();
6417
-				    		var parentVal = parent_list + ":" + val;
6418
-							if(val > 0) {
6419
-					    		$("select[name=\""+child_list+"\"] option[parent]").hide();
6420
-					    		$("select[name=\""+child_list+"\"] option[parent=\""+parentVal+"\"]").show();
6421
-							} else {
6422
-								$("select[name=\""+child_list+"\"] option").show();
6423
-							}
6424
-				    	}
6425
-						function setListDependencies() {
6426
-					    	jQuery("select option[parent]").parent().each(function() {
6427
-					    		var child_list = $(this).attr("name");
6428
-								var parent = $(this).find("option[parent]:first").attr("parent");
6429
-								var infos = parent.split(":");
6430
-								var parent_list = infos[0];
6431
-								$("select[name=\""+parent_list+"\"]").change(function() {
6432
-									showOptions(child_list, parent_list);
6433
-								});
6434
-					    	});
6435
-						}
6436 7149
 
6437
-						setListDependencies();
6438
-				    });
6439
-				</script>'."\n";
6440
-				$out .= '<!-- /showOptionalsInput --> '."\n";
6441
-			}
6442
-		}
6443
-		return $out;
6444
-	}
6445
-
6446
-
6447
-	/**
6448
-	 * Returns the rights used for this class
6449
-	 * @return stdClass
6450
-	 */
6451
-	public function getRights()
6452
-	{
6453
-		global $user;
6454
-
6455
-		$element = $this->element;
6456
-		if ($element == 'facturerec') $element='facture';
6457
-
6458
-		return $user->rights->{$element};
6459
-	}
6460
-
6461
-	/**
6462
-	 * Function used to replace a thirdparty id with another one.
6463
-	 * This function is meant to be called from replaceThirdparty with the appropiate tables
6464
-	 * Column name fk_soc MUST be used to identify thirdparties
6465
-	 *
6466
-	 * @param  DoliDB 	   $db 			  Database handler
6467
-	 * @param  int 		   $origin_id     Old thirdparty id (the thirdparty to delete)
6468
-	 * @param  int 		   $dest_id       New thirdparty id (the thirdparty that will received element of the other)
6469
-	 * @param  string[]    $tables        Tables that need to be changed
6470
-	 * @param  int         $ignoreerrors  Ignore errors. Return true even if errors. We need this when replacement can fails like for categories (categorie of old thirdparty may already exists on new one)
6471
-	 * @return bool						  True if success, False if error
6472
-	 */
6473
-	public static function commonReplaceThirdparty(DoliDB $db, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
6474
-	{
6475
-		foreach ($tables as $table)
6476
-		{
6477
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$table.' SET fk_soc = '.$dest_id.' WHERE fk_soc = '.$origin_id;
6478
-
6479
-			if (! $db->query($sql))
6480
-			{
6481
-				if ($ignoreerrors) return true;		// TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6482
-				//$this->errors = $db->lasterror();
6483
-				return false;
6484
-			}
6485
-		}
6486
-
6487
-		return true;
6488
-	}
6489
-
6490
-	/**
6491
-	 * Get buy price to use for margin calculation. This function is called when buy price is unknown.
6492
-	 *	 Set buy price = sell price if ForceBuyingPriceIfNull configured,
6493
-	 *   else if calculation MARGIN_TYPE = 'costprice' and costprice is defined, use costprice as buyprice
6494
-	 *	 else if calculation MARGIN_TYPE = 'pmp' and pmp is calculated, use pmp as buyprice
6495
-	 *	 else set min buy price as buy price
6496
-	 *
6497
-	 * @param float		$unitPrice		 Product unit price
6498
-	 * @param float		$discountPercent Line discount percent
6499
-	 * @param int		$fk_product		 Product id
6500
-	 * @return	float                    <0 if KO, buyprice if OK
6501
-	 */
6502
-	public function defineBuyPrice($unitPrice = 0.0, $discountPercent = 0.0, $fk_product = 0)
6503
-	{
6504
-		global $conf;
6505
-
6506
-		$buyPrice = 0;
6507
-
6508
-		if (($unitPrice > 0) && (isset(Globals::$conf->global->ForceBuyingPriceIfNull) && Globals::$conf->global->ForceBuyingPriceIfNull == 1)) { // In most cases, test here is false{
6509
-			$buyPrice = $unitPrice * (1 - $discountPercent / 100);
6510
-		}
6511
-		else
6512
-		{
6513
-			// Get cost price for margin calculation
6514
-			if (! empty($fk_product))
6515
-			{
6516
-				if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'costprice') {
6517
-					require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
6518
-					$product = new Product($this->db);
6519
-					$result = $product->fetch($fk_product);
6520
-					if ($result <= 0)
6521
-					{
6522
-						$this->errors[] = 'ErrorProductIdDoesNotExists';
6523
-						return -1;
6524
-					}
6525
-					if ($product->cost_price > 0)
6526
-					{
6527
-						$buyPrice = $product->cost_price;
6528
-					}
6529
-					else if ($product->pmp > 0)
6530
-					{
6531
-						$buyPrice = $product->pmp;
6532
-					}
6533
-				}
6534
-				else if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'pmp') {
6535
-					require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
6536
-					$product = new Product($this->db);
6537
-					$result = $product->fetch($fk_product);
6538
-					if ($result <= 0)
6539
-					{
6540
-						$this->errors[] = 'ErrorProductIdDoesNotExists';
6541
-						return -1;
6542
-					}
6543
-					if ($product->pmp > 0)
6544
-					{
6545
-						$buyPrice = $product->pmp;
6546
-					}
6547
-				}
7150
+    /**
7151
+     * Load object in memory from the database
7152
+     *
7153
+     * @param	int    $id				Id object
7154
+     * @param	string $ref				Ref
7155
+     * @param	string	$morewhere		More SQL filters (' AND ...')
7156
+     * @return 	int         			<0 if KO, 0 if not found, >0 if OK
7157
+     */
7158
+    public function fetchCommon($id, $ref = null, $morewhere = '')
7159
+    {
7160
+        if (empty($id) && empty($ref) && empty($morewhere)) return -1;
6548 7161
 
6549
-				if (empty($buyPrice) && isset(Globals::$conf->global->MARGIN_TYPE) && in_array(Globals::$conf->global->MARGIN_TYPE, array('1', 'pmp', 'costprice'))) {
6550
-					require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
6551
-					$productFournisseur = new ProductFournisseur($this->db);
6552
-					if (($result = $productFournisseur->find_min_price_product_fournisseur($fk_product)) > 0)
6553
-					{
6554
-						$buyPrice = $productFournisseur->fourn_unitprice;
6555
-					}
6556
-					else if ($result < 0)
6557
-					{
6558
-						$this->errors[] = $productFournisseur->error;
6559
-						return -2;
6560
-					}
6561
-				}
6562
-			}
6563
-		}
6564
-		return $buyPrice;
6565
-	}
7162
+        $sql = 'SELECT '.$this->getFieldList();
7163
+        $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
6566 7164
 
6567
-    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
6568
-	/**
6569
-	 *  Show photos of an object (nbmax maximum), into several columns
6570
-	 *
6571
-	 *  @param		string	$modulepart		'product', 'ticket', ...
6572
-	 *  @param      string	$sdir        	Directory to scan (full absolute path)
6573
-	 *  @param      int		$size        	0=original size, 1='small' use thumbnail if possible
6574
-	 *  @param      int		$nbmax       	Nombre maximum de photos (0=pas de max)
6575
-	 *  @param      int		$nbbyrow     	Number of image per line or -1 to use div. Used only if size=1.
6576
-	 * 	@param		int		$showfilename	1=Show filename
6577
-	 * 	@param		int		$showaction		1=Show icon with action links (resize, delete)
6578
-	 * 	@param		int		$maxHeight		Max height of original image when size='small' (so we can use original even if small requested). If 0, always use 'small' thumb image.
6579
-	 * 	@param		int		$maxWidth		Max width of original image when size='small'
6580
-	 *  @param      int     $nolink         Do not add a href link to view enlarged imaged into a new tab
6581
-	 *  @param      int     $notitle        Do not add title tag on image
6582
-	 *  @param		int		$usesharelink	Use the public shared link of image (if not available, the 'nophoto' image will be shown instead)
6583
-	 *  @return     string					Html code to show photo. Number of photos shown is saved in this->nbphoto
6584
-	 */
6585
-	function show_photos($modulepart, $sdir, $size=0, $nbmax=0, $nbbyrow=5, $showfilename=0, $showaction=0, $maxHeight=120, $maxWidth=160, $nolink=0, $notitle=0, $usesharelink=0)
6586
-	{
6587
-        // phpcs:enable
6588
-		global $conf,$user,$langs;
6589
-
6590
-		include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
6591
-		include_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';
6592
-
6593
-		$sortfield='position_name';
6594
-		$sortorder='asc';
6595
-
6596
-		$dir = $sdir . '/';
6597
-		$pdir = '/';
6598
-		if ($modulepart == 'ticket')
6599
-		{
6600
-			$dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6601
-			$pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6602
-		}
6603
-		else
6604
-		{
6605
-			$dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
6606
-			$pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
6607
-		}
6608
-
6609
-		// For backward compatibility
6610
-		if ($modulepart == 'product' && !empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
6611
-			$dir = $sdir . '/'. get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6612
-			$pdir = '/' . get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6613
-		}
6614
-
6615
-		// Defined relative dir to DOL_DATA_ROOT
6616
-		$relativedir = '';
6617
-		if ($dir)
6618
-		{
6619
-			$relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $dir);
6620
-			$relativedir = preg_replace('/^[\\/]/','',$relativedir);
6621
-			$relativedir = preg_replace('/[\\/]$/','',$relativedir);
6622
-		}
6623
-
6624
-		$dirthumb = $dir.'thumbs/';
6625
-		$pdirthumb = $pdir.'thumbs/';
6626
-
6627
-		$return ='<!-- Photo -->'."\n";
6628
-		$nbphoto=0;
6629
-
6630
-		$filearray=dol_dir_list($dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
6631
-
6632
-		/* if (! empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))    // For backward compatiblity, we scan also old dirs
6633
-          {
6634
-          $filearrayold=dol_dir_list($dirold,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
6635
-          $filearray=array_merge($filearray, $filearrayold);
6636
-          } */
7165
+        if (!empty($id))  $sql.= ' WHERE rowid = '.$id;
7166
+        elseif (!empty($ref)) $sql.= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7167
+        else $sql.=' WHERE 1 = 1';	// usage with empty id and empty ref is very rare
7168
+        if ($morewhere)   $sql.= $morewhere;
7169
+        $sql.=' LIMIT 1';	// This is a fetch, to be sure to get only one record
6637 7170
 
6638
-		completeFileArrayWithDatabaseInfo($filearray, $relativedir);
7171
+        $res = $this->db->query($sql);
7172
+        if ($res)
7173
+        {
7174
+            $obj = $this->db->fetch_object($res);
7175
+            if ($obj)
7176
+            {
7177
+                $this->setVarsFromFetchObj($obj);
7178
+                return $this->id;
7179
+            }
7180
+            else
7181
+            {
7182
+                return 0;
7183
+            }
7184
+        }
7185
+        else
7186
+        {
7187
+            $this->error = $this->db->lasterror();
7188
+            $this->errors[] = $this->error;
7189
+            return -1;
7190
+        }
7191
+    }
6639 7192
 
6640
-		if (count($filearray))
6641
-		{
6642
-			if ($sortfield && $sortorder)
6643
-			{
6644
-				$filearray=dol_sort_array($filearray, $sortfield, $sortorder);
6645
-			}
7193
+    /**
7194
+     * Update object into database
7195
+     *
7196
+     * @param  User $user      	User that modifies
7197
+     * @param  bool $notrigger 	false=launch triggers after, true=disable triggers
7198
+     * @return int             	<0 if KO, >0 if OK
7199
+     */
7200
+    public function updateCommon(User $user, $notrigger = false)
7201
+    {
7202
+        global $conf, $langs;
6646 7203
 
6647
-			foreach($filearray as $key => $val)
6648
-			{
6649
-				$photo='';
6650
-				$file = $val['name'];
7204
+        $error = 0;
6651 7205
 
6652
-				//if (! utf8_check($file)) $file=utf8_encode($file);	// To be sure file is stored in UTF8 in memory
7206
+        $now=dol_now();
6653 7207
 
6654
-				//if (dol_is_file($dir.$file) && image_format_supported($file) >= 0)
6655
-				if (image_format_supported($file) >= 0)
6656
-				{
6657
-					$nbphoto++;
6658
-					$photo = $file;
6659
-					$viewfilename = $file;
7208
+        $fieldvalues = $this->setSaveQuery();
7209
+        if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) $fieldvalues['date_modification']=$this->db->idate($now);
7210
+        if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif']=$user->id;
7211
+        unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into update.
6660 7212
 
6661
-					if ($size == 1 || $size == 'small') {   // Format vignette
7213
+        $keys=array();
7214
+        $values = array();
7215
+        foreach ($fieldvalues as $k => $v) {
7216
+            $keys[$k] = $k;
7217
+            $value = $this->fields[$k];
7218
+            $values[$k] = $this->quote($v, $value);
7219
+            $tmp[] = $k.'='.$this->quote($v, $this->fields[$k]);
7220
+        }
6662 7221
 
6663
-						// Find name of thumb file
6664
-						$photo_vignette=basename(getImageFileNameForSize($dir.$file, '_small'));
6665
-						if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
7222
+        // Clean and check mandatory
7223
+        foreach($keys as $key)
7224
+        {
7225
+            if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';		// This is an implicit foreign key field
7226
+            if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';					// This is an explicit foreign key field
6666 7227
 
6667
-						// Get filesize of original file
6668
-						$imgarray=dol_getImageSize($dir.$photo);
7228
+            //var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7229
+            /*
7230
+			if ($this->fields[$key]['notnull'] == 1 && empty($values[$key]))
7231
+			{
7232
+				$error++;
7233
+				$this->errors[]=$langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7234
+			}*/
7235
+        }
6669 7236
 
6670
-						if ($nbbyrow > 0)
6671
-						{
6672
-							if ($nbphoto == 1) $return.= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
7237
+        $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET '.implode( ',', $tmp ).' WHERE rowid='.$this->id ;
6673 7238
 
6674
-							if ($nbphoto % $nbbyrow == 1) $return.= '<tr align=center valign=middle border=1>';
6675
-							$return.= '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
6676
-						}
6677
-						else if ($nbbyrow < 0) $return .= '<div class="inline-block">';
7239
+        $this->db->begin();
7240
+        if (! $error)
7241
+        {
7242
+            $res = $this->db->query($sql);
7243
+            if ($res===false)
7244
+            {
7245
+                $error++;
7246
+                $this->errors[] = $this->db->lasterror();
7247
+            }
7248
+        }
6678 7249
 
6679
-						$return.= "\n";
7250
+        // Update extrafield
7251
+        if (!$error && empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options) > 0) {
7252
+            $result=$this->insertExtraFields();
7253
+            if ($result < 0)
7254
+            {
7255
+                $error++;
7256
+            }
7257
+        }
6680 7258
 
6681
-						$relativefile=preg_replace('/^\//', '', $pdir.$photo);
6682
-						if (empty($nolink))
6683
-						{
6684
-							$urladvanced=getAdvancedPreviewUrl($modulepart, $relativefile, 0, 'entity='.$this->entity);
6685
-							if ($urladvanced) $return.='<a href="'.$urladvanced.'">';
6686
-							else $return.= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
6687
-						}
7259
+        // Triggers
7260
+        if (! $error && ! $notrigger)
7261
+        {
7262
+            // Call triggers
7263
+            $result=$this->call_trigger(strtoupper(get_class($this)).'_MODIFY',$user);
7264
+            if ($result < 0) { $error++; } //Do also here what you must do to rollback action if trigger fail
7265
+            // End call triggers
7266
+        }
6688 7267
 
6689
-						// Show image (width height=$maxHeight)
6690
-						// Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine
6691
-						$alt=$langs->transnoentitiesnoconv('File').': '.$relativefile;
6692
-						$alt.=' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
6693
-						if ($notitle) $alt='';
6694
-
6695
-						if ($usesharelink)
6696
-						{
6697
-							if ($val['share'])
6698
-							{
6699
-								if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6700
-								{
6701
-									$return.= '<!-- Show original file (thumb not yet available with shared links) -->';
6702
-									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6703
-								}
6704
-								else {
6705
-									$return.= '<!-- Show original file -->';
6706
-									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6707
-								}
6708
-							}
6709
-							else
6710
-							{
6711
-								$return.= '<!-- Show nophoto file (because file is not shared) -->';
6712
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png" title="'.dol_escape_htmltag($alt).'">';
6713
-							}
6714
-						}
6715
-						else
6716
-						{
6717
-							if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6718
-							{
6719
-								$return.= '<!-- Show thumb -->';
6720
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
6721
-							}
6722
-							else {
6723
-								$return.= '<!-- Show original file -->';
6724
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
6725
-							}
6726
-						}
7268
+        // Commit or rollback
7269
+        if ($error) {
7270
+            $this->db->rollback();
7271
+            return -1;
7272
+        } else {
7273
+            $this->db->commit();
7274
+            return $this->id;
7275
+        }
7276
+    }
6727 7277
 
6728
-						if (empty($nolink)) $return.= '</a>';
6729
-						$return.="\n";
6730
-
6731
-						if ($showfilename) $return.= '<br>'.$viewfilename;
6732
-						if ($showaction)
6733
-						{
6734
-							$return.= '<br>';
6735
-							// On propose la generation de la vignette si elle n'existe pas et si la taille est superieure aux limites
6736
-							if ($photo_vignette && (image_format_supported($photo) > 0) && ($this->imgWidth > $maxWidth || $this->imgHeight > $maxHeight))
6737
-							{
6738
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=addthumb&amp;file='.urlencode($pdir.$viewfilename).'">'.img_picto($langs->trans('GenerateThumb'),'refresh').'&nbsp;&nbsp;</a>';
6739
-							}
6740
-							// Special cas for product
6741
-							if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6742
-							{
6743
-								// Link to resize
6744
-								$return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6745
-
6746
-								// Link to delete
6747
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6748
-								$return.= img_delete().'</a>';
6749
-							}
6750
-						}
6751
-						$return.= "\n";
7278
+    /**
7279
+     * Delete object in database
7280
+     *
7281
+     * @param 	User 	$user       			User that deletes
7282
+     * @param 	bool 	$notrigger  			false=launch triggers after, true=disable triggers
7283
+     * @param	int		$forcechilddeletion		0=no, 1=Force deletion of children
7284
+     * @return 	int             				<=0 if KO, >0 if OK
7285
+     */
7286
+    public function deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
7287
+    {
7288
+        $error=0;
6752 7289
 
6753
-						if ($nbbyrow > 0)
6754
-						{
6755
-							$return.= '</td>';
6756
-							if (($nbphoto % $nbbyrow) == 0) $return.= '</tr>';
6757
-						}
6758
-						else if ($nbbyrow < 0) $return.='</div>';
6759
-					}
6760
-
6761
-					if (empty($size)) {     // Format origine
6762
-						$return.= '<img class="photo photowithmargin" border="0" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'">';
6763
-
6764
-						if ($showfilename) $return.= '<br>'.$viewfilename;
6765
-						if ($showaction)
6766
-						{
6767
-							// Special case for product
6768
-							if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6769
-							{
6770
-								// Link to resize
6771
-								$return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6772
-
6773
-								// Link to delete
6774
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6775
-								$return.= img_delete().'</a>';
6776
-							}
6777
-						}
6778
-					}
7290
+        $this->db->begin();
6779 7291
 
6780
-					// On continue ou on arrete de boucler ?
6781
-					if ($nbmax && $nbphoto >= $nbmax) break;
6782
-				}
6783
-			}
7292
+        if ($forcechilddeletion)
7293
+        {
7294
+            foreach($this->childtables as $table)
7295
+            {
7296
+                $sql = 'DELETE FROM '.MAIN_DB_PREFIX.$table.' WHERE '.$this->fk_element.' = '.$this->id;
7297
+                $resql = $this->db->query($sql);
7298
+                if (! $resql)
7299
+                {
7300
+                    $this->error=$this->db->lasterror();
7301
+                    $this->errors[]=$this->error;
7302
+                    $this->db->rollback();
7303
+                    return -1;
7304
+                }
7305
+            }
7306
+        }
7307
+        elseif (! empty($this->fk_element) && ! empty($this->childtables))	// If object has childs linked with a foreign key field, we check all child tables.
7308
+        {
7309
+            $objectisused = $this->isObjectUsed($this->id);
7310
+            if (! empty($objectisused))
7311
+            {
7312
+                dol_syslog(get_class($this)."::deleteCommon Can't delete record as it has some child", LOG_WARNING);
7313
+                $this->error='ErrorRecordHasChildren';
7314
+                $this->errors[]=$this->error;
7315
+                $this->db->rollback();
7316
+                return 0;
7317
+            }
7318
+        }
6784 7319
 
6785
-			if ($size==1 || $size=='small')
6786
-			{
6787
-				if ($nbbyrow > 0)
6788
-				{
6789
-					// Ferme tableau
6790
-					while ($nbphoto % $nbbyrow)
6791
-					{
6792
-						$return.= '<td width="'.ceil(100/$nbbyrow).'%">&nbsp;</td>';
6793
-						$nbphoto++;
6794
-					}
6795
-
6796
-					if ($nbphoto) $return.= '</table>';
6797
-				}
6798
-			}
6799
-		}
6800
-
6801
-		$this->nbphoto = $nbphoto;
6802
-
6803
-		return $return;
6804
-	}
6805
-
6806
-
6807
-	/**
6808
-	 * Function test if type is array
6809
-	 *
6810
-	 * @param   array   $info   content informations of field
6811
-	 * @return                  bool
6812
-	 */
6813
-	protected function isArray($info)
6814
-	{
6815
-		if(is_array($info))
6816
-		{
6817
-			if(isset($info['type']) && $info['type']=='array') return true;
6818
-			else return false;
6819
-		}
6820
-		else return false;
6821
-	}
6822
-
6823
-	/**
6824
-	 * Function test if type is null
6825
-	 *
6826
-	 * @param   array   $info   content informations of field
6827
-	 * @return                  bool
6828
-	 */
6829
-	protected function isNull($info)
6830
-	{
6831
-		if(is_array($info))
6832
-		{
6833
-			if(isset($info['type']) && $info['type']=='null') return true;
6834
-			else return false;
6835
-		}
6836
-		else return false;
6837
-	}
6838
-
6839
-	/**
6840
-	 * Function test if type is date
6841
-	 *
6842
-	 * @param   array   $info   content informations of field
6843
-	 * @return                  bool
6844
-	 */
6845
-	public function isDate($info)
6846
-	{
6847
-		if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true;
6848
-		else return false;
6849
-	}
6850
-
6851
-	/**
6852
-	 * Function test if type is integer
6853
-	 *
6854
-	 * @param   array   $info   content informations of field
6855
-	 * @return                  bool
6856
-	 */
6857
-	public function isInt($info)
6858
-	{
6859
-		if(is_array($info))
6860
-		{
6861
-			if(isset($info['type']) && ($info['type']=='int' || preg_match('/^integer/i',$info['type']) ) ) return true;
6862
-			else return false;
6863
-		}
6864
-		else return false;
6865
-	}
6866
-
6867
-	/**
6868
-	 * Function test if type is float
6869
-	 *
6870
-	 * @param   array   $info   content informations of field
6871
-	 * @return                  bool
6872
-	 */
6873
-	public function isFloat($info)
6874
-	{
6875
-		if(is_array($info))
6876
-		{
6877
-			if (isset($info['type']) && (preg_match('/^(double|real)/i', $info['type']))) return true;
6878
-			else return false;
6879
-		}
6880
-		else return false;
6881
-	}
6882
-
6883
-	/**
6884
-	 * Function test if type is text
6885
-	 *
6886
-	 * @param   array   $info   content informations of field
6887
-	 * @return                  bool
6888
-	 */
6889
-	public function isText($info)
6890
-	{
6891
-		if(is_array($info))
6892
-		{
6893
-			if(isset($info['type']) && $info['type']=='text') return true;
6894
-			else return false;
6895
-		}
6896
-		else return false;
6897
-	}
6898
-
6899
-	/**
6900
-	 * Function test if is indexed
6901
-	 *
6902
-	 * @param   array   $info   content informations of field
6903
-	 * @return                  bool
6904
-	 */
6905
-	protected function isIndex($info)
6906
-	{
6907
-		if(is_array($info))
6908
-		{
6909
-			if(isset($info['index']) && $info['index']==true) return true;
6910
-			else return false;
6911
-		}
6912
-		else return false;
6913
-	}
6914
-
6915
-	/**
6916
-	 * Function to prepare the values to insert.
6917
-	 * Note $this->${field} are set by the page that make the createCommon or the updateCommon.
6918
-	 *
6919
-	 * @return array
6920
-	 */
6921
-	protected function setSaveQuery()
6922
-	{
6923
-		global $conf;
6924
-
6925
-		$queryarray=array();
6926
-		foreach ($this->fields as $field=>$info)	// Loop on definition of fields
6927
-		{
6928
-			// Depending on field type ('datetime', ...)
6929
-			if($this->isDate($info))
6930
-			{
6931
-				if(empty($this->{$field}))
6932
-				{
6933
-					$queryarray[$field] = null;
6934
-				}
6935
-				else
6936
-				{
6937
-					$queryarray[$field] = $this->db->idate($this->{$field});
6938
-				}
6939
-			}
6940
-			else if($this->isArray($info))
6941
-			{
6942
-				if(! empty($this->{$field})) {
6943
-					if(! is_array($this->{$field})) {
6944
-						$this->{$field} = array($this->{$field});
6945
-					}
6946
-					$queryarray[$field] = serialize($this->{$field});
6947
-				} else {
6948
-					$queryarray[$field] = null;
6949
-				}
6950
-			}
6951
-			else if($this->isInt($info))
6952
-			{
6953
-				if ($field == 'entity' && is_null($this->{$field}))
6954
-                    $queryarray[$field] = Globals::$conf->entity;
6955
-                else
6956
-				{
6957
-					$queryarray[$field] = (int) price2num($this->{$field});
6958
-					if (empty($queryarray[$field])) $queryarray[$field]=0;		// May be reset to null later if property 'notnull' is -1 for this field.
6959
-				}
6960
-			}
6961
-			else if($this->isFloat($info))
6962
-			{
6963
-				$queryarray[$field] = (double) price2num($this->{$field});
6964
-				if (empty($queryarray[$field])) $queryarray[$field]=0;
6965
-			}
6966
-			else
6967
-			{
6968
-				$queryarray[$field] = $this->{$field};
6969
-			}
7320
+        if (! $error) {
7321
+            if (! $notrigger) {
7322
+                // Call triggers
7323
+                $result=$this->call_trigger(strtoupper(get_class($this)).'_DELETE', $user);
7324
+                if ($result < 0) { $error++; } // Do also here what you must do to rollback action if trigger fail
7325
+                // End call triggers
7326
+            }
7327
+        }
6970 7328
 
6971
-			if ($info['type'] == 'timestamp' && empty($queryarray[$field])) unset($queryarray[$field]);
6972
-			if (! empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) $queryarray[$field] = null;
6973
-		}
7329
+        if (! $error && ! empty($this->isextrafieldmanaged))
7330
+        {
7331
+            $sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element."_extrafields";
7332
+            $sql.= " WHERE fk_object=" . $this->id;
6974 7333
 
6975
-		return $queryarray;
6976
-	}
7334
+            $resql = $this->db->query($sql);
7335
+            if (! $resql)
7336
+            {
7337
+                $this->errors[] = $this->db->lasterror();
7338
+                $error++;
7339
+            }
7340
+        }
6977 7341
 
6978
-	/**
6979
-	 * Function to load data from a SQL pointer into properties of current object $this
6980
-	 *
6981
-	 * @param   stdClass    $obj    Contain data of object from database
6982
-     * @return void
6983
-	 */
6984
-	protected function setVarsFromFetchObj(&$obj)
6985
-	{
6986
-		foreach ($this->fields as $field => $info)
6987
-		{
6988
-			if($this->isDate($info))
6989
-			{
6990
-				if(empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') $this->{$field} = 0;
6991
-				else $this->{$field} = strtotime($obj->{$field});
6992
-			}
6993
-			elseif($this->isArray($info))
6994
-			{
6995
-				if(! empty($obj->{$field})) {
6996
-					$this->{$field} = @unserialize($obj->{$field});
6997
-					// Hack for data not in UTF8
6998
-					if($this->{$field } === false) @unserialize(utf8_decode($obj->{$field}));
6999
-				} else {
7000
-					$this->{$field} = array();
7001
-				}
7002
-			}
7003
-			elseif($this->isInt($info))
7004
-			{
7005
-				if ($field == 'rowid') $this->id = (int) $obj->{$field};
7006
-				else $this->{$field} = (int) $obj->{$field};
7007
-			}
7008
-			elseif($this->isFloat($info))
7009
-			{
7010
-				$this->{$field} = (double) $obj->{$field};
7011
-			}
7012
-			elseif($this->isNull($info))
7013
-			{
7014
-				$val = $obj->{$field};
7015
-				// zero is not null
7016
-				$this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val);
7017
-			}
7018
-			else
7019
-			{
7020
-				$this->{$field} = $obj->{$field};
7021
-			}
7022
-		}
7023
-
7024
-		// If there is no 'ref' field, we force property ->ref to ->id for a better compatibility with common functions.
7025
-		if (! isset($this->fields['ref']) && isset($this->id)) $this->ref = $this->id;
7026
-	}
7027
-
7028
-	/**
7029
-	 * Function to concat keys of fields
7030
-	 *
7031
-	 * @return string
7032
-	 */
7033
-	protected function getFieldList()
7034
-	{
7035
-		$keys = array_keys($this->fields);
7036
-		return implode(',', $keys);
7037
-	}
7038
-
7039
-	/**
7040
-	 * Add quote to field value if necessary
7041
-	 *
7042
-	 * @param 	string|int	$value			Value to protect
7043
-	 * @param	array		$fieldsentry	Properties of field
7044
-	 * @return 	string
7045
-	 */
7046
-    protected function quote($value, $fieldsentry)
7047
-    {
7048
-		if (is_null($value)) return 'NULL';
7049
-		else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) return $this->db->escape("$value");
7050
-		else return "'".$this->db->escape($value)."'";
7051
-	}
7052
-
7053
-
7054
-	/**
7055
-	 * Create object into database
7056
-	 *
7057
-	 * @param  User $user      User that creates
7058
-	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
7059
-	 * @return int             <0 if KO, Id of created object if OK
7060
-	 */
7061
-	public function createCommon(User $user, $notrigger = false)
7062
-	{
7063
-		global $langs;
7064
-
7065
-		$error = 0;
7066
-
7067
-		$now=dol_now();
7068
-
7069
-		$fieldvalues = $this->setSaveQuery();
7070
-		if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now);
7071
-		if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id;
7072
-		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
7073
-
7074
-		$keys=array();
7075
-		$values = array();
7076
-		foreach ($fieldvalues as $k => $v) {
7077
-			$keys[$k] = $k;
7078
-			$value = $this->fields[$k];
7079
-			$values[$k] = $this->quote($v, $value);
7080
-		}
7081
-
7082
-		// Clean and check mandatory
7083
-		foreach($keys as $key)
7084
-		{
7085
-			// If field is an implicit foreign key field
7086
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';
7087
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';
7088
-
7089
-			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7090
-			if (isset($this->fields[$key]['notnull']) && $this->fields[$key]['notnull'] == 1 && ! isset($values[$key]) && is_null($val['default']))
7091
-			{
7092
-				$error++;
7093
-				$this->errors[]=$langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7094
-			}
7342
+        if (! $error)
7343
+        {
7344
+            $sql = 'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.' WHERE rowid='.$this->id;
7095 7345
 
7096
-			// If field is an implicit foreign key field
7097
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) $values[$key]='null';
7098
-			if (! empty($this->fields[$key]['foreignkey']) && empty($values[$key])) $values[$key]='null';
7099
-		}
7346
+            $res = $this->db->query($sql);
7347
+            if($res===false) {
7348
+                $error++;
7349
+                $this->errors[] = $this->db->lasterror();
7350
+            }
7351
+        }
7100 7352
 
7101
-		if ($error) return -1;
7353
+        // Commit or rollback
7354
+        if ($error) {
7355
+            $this->db->rollback();
7356
+            return -1;
7357
+        } else {
7358
+            $this->db->commit();
7359
+            return 1;
7360
+        }
7361
+    }
7102 7362
 
7103
-		$this->db->begin();
7363
+    /**
7364
+     * Initialise object with example values
7365
+     * Id must be 0 if object instance is a specimen
7366
+     *
7367
+     * @return void
7368
+     */
7369
+    public function initAsSpecimenCommon()
7370
+    {
7371
+        $this->id = 0;
7104 7372
 
7105
-		if (! $error)
7106
-		{
7107
-			$sql = 'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element;
7108
-			$sql.= ' ('.implode( ", ", $keys ).')';
7109
-			$sql.= ' VALUES ('.implode( ", ", $values ).')';
7373
+        // TODO...
7374
+    }
7110 7375
 
7111
-			$res = $this->db->query($sql);
7112
-			if ($res===false) {
7113
-				$error++;
7114
-				$this->errors[] = $this->db->lasterror();
7115
-			}
7116
-		}
7117
-
7118
-		if (! $error)
7119
-		{
7120
-			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
7121
-		}
7122
-
7123
-		// Create extrafields
7124
-		if (! $error)
7125
-		{
7126
-			$result=$this->insertExtraFields();
7127
-			if ($result < 0) $error++;
7128
-		}
7129
-
7130
-		// Triggers
7131
-		if (! $error && ! $notrigger)
7132
-		{
7133
-			// Call triggers
7134
-			$result=$this->call_trigger(strtoupper(get_class($this)).'_CREATE',$user);
7135
-			if ($result < 0) { $error++; }
7136
-			// End call triggers
7137
-		}
7138
-
7139
-		// Commit or rollback
7140
-		if ($error) {
7141
-			$this->db->rollback();
7142
-			return -1;
7143
-		} else {
7144
-			$this->db->commit();
7145
-			return $this->id;
7146
-		}
7147
-	}
7148
-
7149
-
7150
-	/**
7151
-	 * Load object in memory from the database
7152
-	 *
7153
-	 * @param	int    $id				Id object
7154
-	 * @param	string $ref				Ref
7155
-	 * @param	string	$morewhere		More SQL filters (' AND ...')
7156
-	 * @return 	int         			<0 if KO, 0 if not found, >0 if OK
7157
-	 */
7158
-	public function fetchCommon($id, $ref = null, $morewhere = '')
7159
-	{
7160
-		if (empty($id) && empty($ref) && empty($morewhere)) return -1;
7161
-
7162
-		$sql = 'SELECT '.$this->getFieldList();
7163
-		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
7164
-
7165
-		if (!empty($id))  $sql.= ' WHERE rowid = '.$id;
7166
-		elseif (!empty($ref)) $sql.= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7167
-		else $sql.=' WHERE 1 = 1';	// usage with empty id and empty ref is very rare
7168
-		if ($morewhere)   $sql.= $morewhere;
7169
-		$sql.=' LIMIT 1';	// This is a fetch, to be sure to get only one record
7170
-
7171
-		$res = $this->db->query($sql);
7172
-		if ($res)
7173
-		{
7174
-			$obj = $this->db->fetch_object($res);
7175
-			if ($obj)
7176
-			{
7177
-				$this->setVarsFromFetchObj($obj);
7178
-				return $this->id;
7179
-			}
7180
-			else
7181
-			{
7182
-				return 0;
7183
-			}
7184
-		}
7185
-		else
7186
-		{
7187
-			$this->error = $this->db->lasterror();
7188
-			$this->errors[] = $this->error;
7189
-			return -1;
7190
-		}
7191
-	}
7192
-
7193
-	/**
7194
-	 * Update object into database
7195
-	 *
7196
-	 * @param  User $user      	User that modifies
7197
-	 * @param  bool $notrigger 	false=launch triggers after, true=disable triggers
7198
-	 * @return int             	<0 if KO, >0 if OK
7199
-	 */
7200
-	public function updateCommon(User $user, $notrigger = false)
7201
-	{
7202
-		global $conf, $langs;
7203
-
7204
-		$error = 0;
7205
-
7206
-		$now=dol_now();
7207
-
7208
-		$fieldvalues = $this->setSaveQuery();
7209
-		if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) $fieldvalues['date_modification']=$this->db->idate($now);
7210
-		if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif']=$user->id;
7211
-		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into update.
7212
-
7213
-		$keys=array();
7214
-		$values = array();
7215
-		foreach ($fieldvalues as $k => $v) {
7216
-			$keys[$k] = $k;
7217
-			$value = $this->fields[$k];
7218
-			$values[$k] = $this->quote($v, $value);
7219
-			$tmp[] = $k.'='.$this->quote($v, $this->fields[$k]);
7220
-		}
7221
-
7222
-		// Clean and check mandatory
7223
-		foreach($keys as $key)
7224
-		{
7225
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';		// This is an implicit foreign key field
7226
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';					// This is an explicit foreign key field
7227
-
7228
-			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7229
-			/*
7230
-			if ($this->fields[$key]['notnull'] == 1 && empty($values[$key]))
7231
-			{
7232
-				$error++;
7233
-				$this->errors[]=$langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7234
-			}*/
7235
-		}
7236 7376
 
7237
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET '.implode( ',', $tmp ).' WHERE rowid='.$this->id ;
7377
+    /* Part for comments */
7238 7378
 
7239
-		$this->db->begin();
7240
-		if (! $error)
7241
-		{
7242
-			$res = $this->db->query($sql);
7243
-			if ($res===false)
7244
-			{
7245
-				$error++;
7246
-				$this->errors[] = $this->db->lasterror();
7247
-			}
7248
-		}
7249
-
7250
-		// Update extrafield
7251
-		if (!$error && empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options) > 0) {
7252
-			$result=$this->insertExtraFields();
7253
-			if ($result < 0)
7254
-			{
7255
-				$error++;
7256
-			}
7257
-		}
7258
-
7259
-		// Triggers
7260
-		if (! $error && ! $notrigger)
7261
-		{
7262
-			// Call triggers
7263
-			$result=$this->call_trigger(strtoupper(get_class($this)).'_MODIFY',$user);
7264
-			if ($result < 0) { $error++; } //Do also here what you must do to rollback action if trigger fail
7265
-			// End call triggers
7266
-		}
7267
-
7268
-		// Commit or rollback
7269
-		if ($error) {
7270
-			$this->db->rollback();
7271
-			return -1;
7272
-		} else {
7273
-			$this->db->commit();
7274
-			return $this->id;
7275
-		}
7276
-	}
7277
-
7278
-	/**
7279
-	 * Delete object in database
7280
-	 *
7281
-	 * @param 	User 	$user       			User that deletes
7282
-	 * @param 	bool 	$notrigger  			false=launch triggers after, true=disable triggers
7283
-	 * @param	int		$forcechilddeletion		0=no, 1=Force deletion of children
7284
-	 * @return 	int             				<=0 if KO, >0 if OK
7285
-	 */
7286
-	public function deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
7287
-	{
7288
-		$error=0;
7289
-
7290
-		$this->db->begin();
7291
-
7292
-		if ($forcechilddeletion)
7293
-		{
7294
-			foreach($this->childtables as $table)
7295
-			{
7296
-				$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$table.' WHERE '.$this->fk_element.' = '.$this->id;
7297
-				$resql = $this->db->query($sql);
7298
-				if (! $resql)
7299
-				{
7300
-					$this->error=$this->db->lasterror();
7301
-					$this->errors[]=$this->error;
7302
-					$this->db->rollback();
7303
-					return -1;
7304
-				}
7305
-			}
7306
-		}
7307
-		elseif (! empty($this->fk_element) && ! empty($this->childtables))	// If object has childs linked with a foreign key field, we check all child tables.
7308
-		{
7309
-			$objectisused = $this->isObjectUsed($this->id);
7310
-			if (! empty($objectisused))
7311
-			{
7312
-				dol_syslog(get_class($this)."::deleteCommon Can't delete record as it has some child", LOG_WARNING);
7313
-				$this->error='ErrorRecordHasChildren';
7314
-				$this->errors[]=$this->error;
7315
-				$this->db->rollback();
7316
-				return 0;
7317
-			}
7318
-		}
7319
-
7320
-		if (! $error) {
7321
-			if (! $notrigger) {
7322
-				// Call triggers
7323
-				$result=$this->call_trigger(strtoupper(get_class($this)).'_DELETE', $user);
7324
-				if ($result < 0) { $error++; } // Do also here what you must do to rollback action if trigger fail
7325
-				// End call triggers
7326
-			}
7327
-		}
7328
-
7329
-		if (! $error && ! empty($this->isextrafieldmanaged))
7330
-		{
7331
-			$sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element."_extrafields";
7332
-			$sql.= " WHERE fk_object=" . $this->id;
7333
-
7334
-			$resql = $this->db->query($sql);
7335
-			if (! $resql)
7336
-			{
7337
-				$this->errors[] = $this->db->lasterror();
7338
-				$error++;
7339
-			}
7340
-		}
7379
+    /**
7380
+     * Load comments linked with current task
7381
+     *	@return boolean	1 if ok
7382
+     */
7383
+    public function fetchComments()
7384
+    {
7385
+        require_once DOL_DOCUMENT_ROOT.'/core/class/comment.class.php';
7341 7386
 
7342
-		if (! $error)
7343
-		{
7344
-			$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.' WHERE rowid='.$this->id;
7387
+        $comment = new Comment($this->db);
7388
+        $result=$comment->fetchAllFor($this->element, $this->id);
7389
+        if ($result<0) {
7390
+            $this->errors=array_merge($this->errors, $comment->errors);
7391
+            return -1;
7392
+        } else {
7393
+            $this->comments = $comment->comments;
7394
+        }
7395
+        return count($this->comments);
7396
+    }
7345 7397
 
7346
-			$res = $this->db->query($sql);
7347
-			if($res===false) {
7348
-				$error++;
7349
-				$this->errors[] = $this->db->lasterror();
7350
-			}
7351
-		}
7352
-
7353
-		// Commit or rollback
7354
-		if ($error) {
7355
-			$this->db->rollback();
7356
-			return -1;
7357
-		} else {
7358
-			$this->db->commit();
7359
-			return 1;
7360
-		}
7361
-	}
7362
-
7363
-	/**
7364
-	 * Initialise object with example values
7365
-	 * Id must be 0 if object instance is a specimen
7366
-	 *
7367
-	 * @return void
7368
-	 */
7369
-	public function initAsSpecimenCommon()
7370
-	{
7371
-		$this->id = 0;
7372
-
7373
-		// TODO...
7374
-	}
7375
-
7376
-
7377
-	/* Part for comments */
7378
-
7379
-	/**
7380
-	 * Load comments linked with current task
7381
-	 *	@return boolean	1 if ok
7382
-	 */
7383
-	public function fetchComments()
7384
-	{
7385
-		require_once DOL_DOCUMENT_ROOT.'/core/class/comment.class.php';
7386
-
7387
-		$comment = new Comment($this->db);
7388
-		$result=$comment->fetchAllFor($this->element, $this->id);
7389
-		if ($result<0) {
7390
-			$this->errors=array_merge($this->errors, $comment->errors);
7391
-			return -1;
7392
-		} else {
7393
-			$this->comments = $comment->comments;
7394
-		}
7395
-		return count($this->comments);
7396
-	}
7397
-
7398
-	/**
7399
-	 * Return nb comments already posted
7400
-	 *
7401
-	 * @return int
7402
-	 */
7403
-	public function getNbComments()
7404
-	{
7405
-		return count($this->comments);
7406
-	}
7398
+    /**
7399
+     * Return nb comments already posted
7400
+     *
7401
+     * @return int
7402
+     */
7403
+    public function getNbComments()
7404
+    {
7405
+        return count($this->comments);
7406
+    }
7407 7407
 
7408 7408
     /**
7409 7409
      * Trim object parameters
Please login to merge, or discard this patch.
Spacing   +1479 added lines, -1479 removed lines patch added patch discarded remove patch
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
 	/**
36 36
 	 * @var string[]	Array of error strings
37 37
 	 */
38
-	public $errors=array();
38
+	public $errors = array();
39 39
 
40 40
 	/**
41 41
 	 * @var string ID to identify managed object
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
 	/**
51 51
 	 * @var int    Name of subtable line
52 52
 	 */
53
-	public $table_element_line='';
53
+	public $table_element_line = '';
54 54
 
55 55
 	/**
56 56
 	 * @var string		Key value used to track if data is coming from import wizard
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
 	/**
61 61
 	 * @var mixed		Contains data to manage extrafields
62 62
 	 */
63
-	public $array_options=array();
63
+	public $array_options = array();
64 64
 
65 65
 	/**
66 66
 	 * @var int[][]		Array of linked objects ids. Loaded by ->fetchObjectLinked
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
 	/**
90 90
 	 * @var array<string,mixed>		Can be used to pass information when only object is provided to method
91 91
 	 */
92
-	public $context=array();
92
+	public $context = array();
93 93
 
94 94
 	/**
95 95
 	 * @var string		Contains canvas name if record is an alternative canvas record
@@ -349,7 +349,7 @@  discard block
 block discarded – undo
349 349
 	 * @var mixed		Contains comments
350 350
 	 * @see fetchComments()
351 351
 	 */
352
-	public $comments=array();
352
+	public $comments = array();
353 353
 
354 354
 	/**
355 355
 	 * @var int
@@ -375,9 +375,9 @@  discard block
 block discarded – undo
375 375
 	public $civility_id;
376 376
 
377 377
 	// Dates
378
-	public $date_creation;			// Date creation
379
-	public $date_validation;		// Date validation
380
-	public $date_modification;		// Date last change (tms field)
378
+	public $date_creation; // Date creation
379
+	public $date_validation; // Date validation
380
+	public $date_modification; // Date last change (tms field)
381 381
 
382 382
 
383 383
 
@@ -393,30 +393,30 @@  discard block
 block discarded – undo
393 393
 	 *  @param	string	$ref_ext	Ref ext of object to check
394 394
 	 *  @return int     			<0 if KO, 0 if OK but not found, >0 if OK and exists
395 395
 	 */
396
-	static function isExistingObject($element, $id, $ref='', $ref_ext='')
396
+	static function isExistingObject($element, $id, $ref = '', $ref_ext = '')
397 397
 	{
398
-		global $db,$conf;
398
+		global $db, $conf;
399 399
 
400 400
 		$sql = "SELECT rowid, ref, ref_ext";
401
-		$sql.= " FROM ".MAIN_DB_PREFIX.$element;
402
-		$sql.= " WHERE entity IN (".getEntity($element).")" ;
401
+		$sql .= " FROM ".MAIN_DB_PREFIX.$element;
402
+		$sql .= " WHERE entity IN (".getEntity($element).")";
403 403
 
404
-		if ($id > 0) $sql.= " AND rowid = ".$db->escape($id);
405
-		else if ($ref) $sql.= " AND ref = '".$db->escape($ref)."'";
406
-		else if ($ref_ext) $sql.= " AND ref_ext = '".$db->escape($ref_ext)."'";
404
+		if ($id > 0) $sql .= " AND rowid = ".$db->escape($id);
405
+		else if ($ref) $sql .= " AND ref = '".$db->escape($ref)."'";
406
+		else if ($ref_ext) $sql .= " AND ref_ext = '".$db->escape($ref_ext)."'";
407 407
 		else {
408
-			$error='ErrorWrongParameters';
408
+			$error = 'ErrorWrongParameters';
409 409
 			dol_print_error(get_class()."::isExistingObject ".$error, LOG_ERR);
410 410
 			return -1;
411 411
 		}
412 412
 		if ($ref || $ref_ext)
413
-            $sql .= " AND entity = " . Globals::$conf->entity;
413
+            $sql .= " AND entity = ".Globals::$conf->entity;
414 414
 
415 415
         dol_syslog(get_class()."::isExistingObject", LOG_DEBUG);
416 416
 		$resql = $db->query($sql);
417 417
 		if ($resql)
418 418
 		{
419
-			$num=$db->num_rows($resql);
419
+			$num = $db->num_rows($resql);
420 420
 			if ($num > 0) return 1;
421 421
 			else return 0;
422 422
 		}
@@ -430,7 +430,7 @@  discard block
 block discarded – undo
430 430
 	 */
431 431
 	function errorsToString()
432 432
 	{
433
-		return $this->error.(is_array($this->errors)?(($this->error!=''?', ':'').join(', ',$this->errors)):'');
433
+		return $this->error.(is_array($this->errors) ? (($this->error != '' ? ', ' : '').join(', ', $this->errors)) : '');
434 434
 	}
435 435
 
436 436
 	/**
@@ -442,18 +442,18 @@  discard block
 block discarded – undo
442 442
 	 * 	@param	int			$maxlen			Maximum length
443 443
 	 * 	@return	string						String with full name
444 444
 	 */
445
-	function getFullName($langs,$option=0,$nameorder=-1,$maxlen=0)
445
+	function getFullName($langs, $option = 0, $nameorder = -1, $maxlen = 0)
446 446
 	{
447 447
 		//print "lastname=".$this->lastname." name=".$this->name." nom=".$this->nom."<br>\n";
448
-		$lastname=$this->lastname;
449
-		$firstname=$this->firstname;
450
-		if (empty($lastname))  $lastname=(isset($this->lastname)?$this->lastname:(isset($this->name)?$this->name:(isset($this->nom)?$this->nom:(isset($this->societe)?$this->societe:(isset($this->company)?$this->company:'')))));
448
+		$lastname = $this->lastname;
449
+		$firstname = $this->firstname;
450
+		if (empty($lastname))  $lastname = (isset($this->lastname) ? $this->lastname : (isset($this->name) ? $this->name : (isset($this->nom) ? $this->nom : (isset($this->societe) ? $this->societe : (isset($this->company) ? $this->company : '')))));
451 451
 
452
-		$ret='';
452
+		$ret = '';
453 453
 		if ($option && $this->civility_id)
454 454
 		{
455
-			if ($langs->transnoentitiesnoconv("Civility".$this->civility_id)!="Civility".$this->civility_id) $ret.=$langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
456
-			else $ret.=$this->civility_id.' ';
455
+			if ($langs->transnoentitiesnoconv("Civility".$this->civility_id) != "Civility".$this->civility_id) $ret .= $langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
456
+			else $ret .= $this->civility_id.' ';
457 457
 		}
458 458
 
459 459
 		$ret .= AlDolUtils::dolGetFirstLastname($firstname, $lastname, $nameorder);
@@ -469,24 +469,24 @@  discard block
 block discarded – undo
469 469
 	 *  @param		int		    $withregion			1=Add region into address string
470 470
 	 *	@return		string							Full address string
471 471
 	 */
472
-	function getFullAddress($withcountry=0, $sep="\n", $withregion=0)
472
+	function getFullAddress($withcountry = 0, $sep = "\n", $withregion = 0)
473 473
 	{
474 474
 		if ($withcountry && $this->country_id && (empty($this->country_code) || empty($this->country)))
475 475
 		{
476
-			require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
477
-			$tmparray=getCountry($this->country_id,'all');
478
-			$this->country_code=$tmparray['code'];
479
-			$this->country     =$tmparray['label'];
476
+			require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
477
+			$tmparray = getCountry($this->country_id, 'all');
478
+			$this->country_code = $tmparray['code'];
479
+			$this->country     = $tmparray['label'];
480 480
 		}
481 481
 
482 482
         if ($withregion && $this->state_id && (empty($this->state_code) || empty($this->state) || empty($this->region) || empty($this->region_cpde)))
483 483
     	{
484
-    		require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
485
-    		$tmparray=getState($this->state_id,'all',0,1);
486
-			$this->state_code   =$tmparray['code'];
487
-			$this->state        =$tmparray['label'];
488
-			$this->region_code  =$tmparray['region_code'];
489
-			$this->region       =$tmparray['region'];
484
+    		require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
485
+    		$tmparray = getState($this->state_id, 'all', 0, 1);
486
+			$this->state_code   = $tmparray['code'];
487
+			$this->state        = $tmparray['label'];
488
+			$this->region_code  = $tmparray['region_code'];
489
+			$this->region       = $tmparray['region'];
490 490
         }
491 491
 
492 492
 		return dol_format_address($this, $withcountry, $sep);
@@ -504,105 +504,105 @@  discard block
 block discarded – undo
504 504
 	{
505 505
 		global $conf, $langs;
506 506
 
507
-		$countriesusingstate=array('AU','US','IN','GB','ES','UK','TR');    // See also option MAIN_FORCE_STATE_INTO_ADDRESS
507
+		$countriesusingstate = array('AU', 'US', 'IN', 'GB', 'ES', 'UK', 'TR'); // See also option MAIN_FORCE_STATE_INTO_ADDRESS
508 508
 
509
-		$contactid=0;
510
-		$thirdpartyid=0;
509
+		$contactid = 0;
510
+		$thirdpartyid = 0;
511 511
 		if ($this->element == 'societe')
512 512
 		{
513
-			$thirdpartyid=$this->id;
513
+			$thirdpartyid = $this->id;
514 514
 		}
515 515
 		if ($this->element == 'contact')
516 516
 		{
517
-			$contactid=$this->id;
518
-			$thirdpartyid=$object->fk_soc;
517
+			$contactid = $this->id;
518
+			$thirdpartyid = $object->fk_soc;
519 519
 		}
520 520
 		if ($this->element == 'user')
521 521
 		{
522
-			$contactid=$this->contact_id;
523
-			$thirdpartyid=$object->fk_soc;
522
+			$contactid = $this->contact_id;
523
+			$thirdpartyid = $object->fk_soc;
524 524
 		}
525 525
 
526
-		$out='<!-- BEGIN part to show address block -->';
526
+		$out = '<!-- BEGIN part to show address block -->';
527 527
 
528
-		$outdone=0;
528
+		$outdone = 0;
529 529
 		$coords = $this->getFullAddress(1, ', ', Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT);
530 530
         if ($coords)
531 531
 		{
532 532
 			if (!empty(Globals::$conf->use_javascript_ajax)) {
533
-				$namecoords = $this->getFullName($langs,1).'<br>'.$coords;
533
+				$namecoords = $this->getFullName($langs, 1).'<br>'.$coords;
534 534
 				// hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile
535
-				$out.='<a href="#" class="hideonsmartphone" onclick="return copyToClipboard(\''.dol_escape_js($namecoords).'\',\''.dol_escape_js($langs->trans("HelpCopyToClipboard")).'\');">';
536
-				$out.=img_picto($langs->trans("Address"), 'object_address.png');
537
-				$out.='</a> ';
535
+				$out .= '<a href="#" class="hideonsmartphone" onclick="return copyToClipboard(\''.dol_escape_js($namecoords).'\',\''.dol_escape_js($langs->trans("HelpCopyToClipboard")).'\');">';
536
+				$out .= img_picto($langs->trans("Address"), 'object_address.png');
537
+				$out .= '</a> ';
538 538
 			}
539
-			$out.=dol_print_address($coords, 'address_'.$htmlkey.'_'.$this->id, $this->element, $this->id, 1, ', '); $outdone++;
539
+			$out .= dol_print_address($coords, 'address_'.$htmlkey.'_'.$this->id, $this->element, $this->id, 1, ', '); $outdone++;
540 540
 			$outdone++;
541 541
 		}
542 542
 
543 543
 		if (!in_array($this->country_code, $countriesusingstate) && empty(Globals::$conf->global->MAIN_FORCE_STATE_INTO_ADDRESS)   // If MAIN_FORCE_STATE_INTO_ADDRESS is on, state is already returned previously with getFullAddress
544 544
             && empty(Globals::$conf->global->SOCIETE_DISABLE_STATE) && $this->state) {
545 545
             if (!empty(Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 && $this->region) {
546
-                $out.=($outdone?' - ':'').$this->region.' - '.$this->state;
546
+                $out .= ($outdone ? ' - ' : '').$this->region.' - '.$this->state;
547 547
             }
548 548
             else {
549
-                $out.=($outdone?' - ':'').$this->state;
549
+                $out .= ($outdone ? ' - ' : '').$this->state;
550 550
             }
551 551
 			$outdone++;
552 552
 		}
553 553
 
554
-		if (! empty($this->phone) || ! empty($this->phone_pro) || ! empty($this->phone_mobile) || ! empty($this->phone_perso) || ! empty($this->fax) || ! empty($this->office_phone) || ! empty($this->user_mobile) || ! empty($this->office_fax)) $out.=($outdone?'<br>':'');
555
-		if (! empty($this->phone) && empty($this->phone_pro)) {		// For objects that store pro phone into ->phone
556
-			$out.=dol_print_phone($this->phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
554
+		if (!empty($this->phone) || !empty($this->phone_pro) || !empty($this->phone_mobile) || !empty($this->phone_perso) || !empty($this->fax) || !empty($this->office_phone) || !empty($this->user_mobile) || !empty($this->office_fax)) $out .= ($outdone ? '<br>' : '');
555
+		if (!empty($this->phone) && empty($this->phone_pro)) {		// For objects that store pro phone into ->phone
556
+			$out .= dol_print_phone($this->phone, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'phone', $langs->trans("PhonePro")); $outdone++;
557 557
 		}
558
-		if (! empty($this->phone_pro)) {
559
-			$out.=dol_print_phone($this->phone_pro,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
558
+		if (!empty($this->phone_pro)) {
559
+			$out .= dol_print_phone($this->phone_pro, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'phone', $langs->trans("PhonePro")); $outdone++;
560 560
 		}
561
-		if (! empty($this->phone_mobile)) {
562
-			$out.=dol_print_phone($this->phone_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
561
+		if (!empty($this->phone_mobile)) {
562
+			$out .= dol_print_phone($this->phone_mobile, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'mobile', $langs->trans("PhoneMobile")); $outdone++;
563 563
 		}
564
-		if (! empty($this->phone_perso)) {
565
-			$out.=dol_print_phone($this->phone_perso,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePerso")); $outdone++;
564
+		if (!empty($this->phone_perso)) {
565
+			$out .= dol_print_phone($this->phone_perso, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'phone', $langs->trans("PhonePerso")); $outdone++;
566 566
 		}
567
-		if (! empty($this->office_phone)) {
568
-			$out.=dol_print_phone($this->office_phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
567
+		if (!empty($this->office_phone)) {
568
+			$out .= dol_print_phone($this->office_phone, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'phone', $langs->trans("PhonePro")); $outdone++;
569 569
 		}
570
-		if (! empty($this->user_mobile)) {
571
-			$out.=dol_print_phone($this->user_mobile,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','mobile',$langs->trans("PhoneMobile")); $outdone++;
570
+		if (!empty($this->user_mobile)) {
571
+			$out .= dol_print_phone($this->user_mobile, $this->country_code, $contactid, $thirdpartyid, 'AC_TEL', '&nbsp;', 'mobile', $langs->trans("PhoneMobile")); $outdone++;
572 572
 		}
573
-		if (! empty($this->fax)) {
574
-			$out.=dol_print_phone($this->fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
573
+		if (!empty($this->fax)) {
574
+			$out .= dol_print_phone($this->fax, $this->country_code, $contactid, $thirdpartyid, 'AC_FAX', '&nbsp;', 'fax', $langs->trans("Fax")); $outdone++;
575 575
 		}
576
-		if (! empty($this->office_fax)) {
577
-			$out.=dol_print_phone($this->office_fax,$this->country_code,$contactid,$thirdpartyid,'AC_FAX','&nbsp;','fax',$langs->trans("Fax")); $outdone++;
576
+		if (!empty($this->office_fax)) {
577
+			$out .= dol_print_phone($this->office_fax, $this->country_code, $contactid, $thirdpartyid, 'AC_FAX', '&nbsp;', 'fax', $langs->trans("Fax")); $outdone++;
578 578
 		}
579 579
 
580
-		$out.='<div style="clear: both;"></div>';
581
-		$outdone=0;
582
-		if (! empty($this->email))
580
+		$out .= '<div style="clear: both;"></div>';
581
+		$outdone = 0;
582
+		if (!empty($this->email))
583 583
 		{
584
-			$out.=dol_print_email($this->email,$this->id,$object->id,'AC_EMAIL',0,0,1);
584
+			$out .= dol_print_email($this->email, $this->id, $object->id, 'AC_EMAIL', 0, 0, 1);
585 585
 			$outdone++;
586 586
 		}
587
-		if (! empty($this->url))
587
+		if (!empty($this->url))
588 588
 		{
589
-			$out.=dol_print_url($this->url,'_goout',0,1);
589
+			$out .= dol_print_url($this->url, '_goout', 0, 1);
590 590
 			$outdone++;
591 591
 		}
592
-		$out.='<div style="clear: both;">';
592
+		$out .= '<div style="clear: both;">';
593 593
 		if (!empty(Globals::$conf->socialnetworks->enabled)) {
594
-			if ($this->skype) $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
594
+			if ($this->skype) $out .= dol_print_socialnetworks($this->skype, $this->id, $object->id, 'skype');
595 595
 			$outdone++;
596
-			if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid,$this->id,$object->id,'jabber');
596
+			if ($this->jabberid) $out .= dol_print_socialnetworks($this->jabberid, $this->id, $object->id, 'jabber');
597 597
 			$outdone++;
598
-			if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
598
+			if ($this->twitter) $out .= dol_print_socialnetworks($this->twitter, $this->id, $object->id, 'twitter');
599 599
 			$outdone++;
600
-			if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
600
+			if ($this->facebook) $out .= dol_print_socialnetworks($this->facebook, $this->id, $object->id, 'facebook');
601 601
 			$outdone++;
602 602
 		}
603
-		$out.='</div>';
603
+		$out .= '</div>';
604 604
 
605
-		$out.='<!-- END Part to show address block -->';
605
+		$out .= '<!-- END Part to show address block -->';
606 606
 
607 607
 		return $out;
608 608
 	}
@@ -615,17 +615,17 @@  discard block
 block discarded – undo
615 615
 	 * @param	int		$relativelink		0=Return full external link, 1=Return link relative to root of file
616 616
 	 * @return	string						Link or empty string if there is no download link
617 617
 	 */
618
-	function getLastMainDocLink($modulepart, $initsharekey=0, $relativelink=0)
618
+	function getLastMainDocLink($modulepart, $initsharekey = 0, $relativelink = 0)
619 619
 	{
620 620
 		global $user, $dolibarr_main_url_root;
621 621
 
622 622
 		if (empty($this->last_main_doc))
623 623
 		{
624
-			return '';		// No way to known which document name to use
624
+			return ''; // No way to known which document name to use
625 625
 		}
626 626
 
627 627
 		include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
628
-		$ecmfile=new EcmFiles($this->db);
628
+		$ecmfile = new EcmFiles($this->db);
629 629
 		$result = $ecmfile->fetch(0, '', $this->last_main_doc);
630 630
 		if ($result < 0)
631 631
 		{
@@ -673,26 +673,26 @@  discard block
 block discarded – undo
673 673
 		}
674 674
 
675 675
 		// Define $urlwithroot
676
-		$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
677
-		$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
676
+		$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
677
+		$urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
678 678
 		//$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
679 679
 
680
-		$forcedownload=0;
680
+		$forcedownload = 0;
681 681
 
682
-		$paramlink='';
682
+		$paramlink = '';
683 683
 		//if (! empty($modulepart)) $paramlink.=($paramlink?'&':'').'modulepart='.$modulepart;		// For sharing with hash (so public files), modulepart is not required.
684 684
 		//if (! empty($ecmfile->entity)) $paramlink.='&entity='.$ecmfile->entity; 					// For sharing with hash (so public files), entity is not required.
685 685
 		//$paramlink.=($paramlink?'&':'').'file='.urlencode($filepath);								// No need of name of file for public link, we will use the hash
686
-		if (! empty($ecmfile->share)) $paramlink.=($paramlink?'&':'').'hashp='.$ecmfile->share;			// Hash for public share
687
-		if ($forcedownload) $paramlink.=($paramlink?'&':'').'attachment=1';
686
+		if (!empty($ecmfile->share)) $paramlink .= ($paramlink ? '&' : '').'hashp='.$ecmfile->share; // Hash for public share
687
+		if ($forcedownload) $paramlink .= ($paramlink ? '&' : '').'attachment=1';
688 688
 
689 689
 		if ($relativelink)
690 690
 		{
691
-			$linktoreturn='document.php'.($paramlink?'?'.$paramlink:'');
691
+			$linktoreturn = 'document.php'.($paramlink ? '?'.$paramlink : '');
692 692
 		}
693 693
 		else
694 694
 		{
695
-			$linktoreturn=$urlwithroot.'/document.php'.($paramlink?'?'.$paramlink:'');
695
+			$linktoreturn = $urlwithroot.'/document.php'.($paramlink ? '?'.$paramlink : '');
696 696
 		}
697 697
 
698 698
 		// Here $ecmfile->share is defined
@@ -710,10 +710,10 @@  discard block
 block discarded – undo
710 710
 	 *  @param  int		$notrigger			Disable all triggers
711 711
 	 *  @return int                 		<0 if KO, >0 if OK
712 712
 	 */
713
-	function add_contact($fk_socpeople, $type_contact, $source='external',$notrigger=0)
713
+	function add_contact($fk_socpeople, $type_contact, $source = 'external', $notrigger = 0)
714 714
 	{
715 715
         // phpcs:enable
716
-		global $user,$langs;
716
+		global $user, $langs;
717 717
 
718 718
 
719 719
 		dol_syslog(get_class($this)."::add_contact $fk_socpeople, $type_contact, $source, $notrigger");
@@ -722,43 +722,43 @@  discard block
 block discarded – undo
722 722
 		if ($fk_socpeople <= 0)
723 723
 		{
724 724
 			$langs->load("errors");
725
-			$this->error=$langs->trans("ErrorWrongValueForParameterX","1");
726
-			dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
725
+			$this->error = $langs->trans("ErrorWrongValueForParameterX", "1");
726
+			dol_syslog(get_class($this)."::add_contact ".$this->error, LOG_ERR);
727 727
 			return -1;
728 728
 		}
729
-		if (! $type_contact)
729
+		if (!$type_contact)
730 730
 		{
731 731
 			$langs->load("errors");
732
-			$this->error=$langs->trans("ErrorWrongValueForParameterX","2");
733
-			dol_syslog(get_class($this)."::add_contact ".$this->error,LOG_ERR);
732
+			$this->error = $langs->trans("ErrorWrongValueForParameterX", "2");
733
+			dol_syslog(get_class($this)."::add_contact ".$this->error, LOG_ERR);
734 734
 			return -2;
735 735
 		}
736 736
 
737
-		$id_type_contact=0;
737
+		$id_type_contact = 0;
738 738
 		if (is_numeric($type_contact))
739 739
 		{
740
-			$id_type_contact=$type_contact;
740
+			$id_type_contact = $type_contact;
741 741
 		}
742 742
 		else
743 743
 		{
744 744
 			// We look for id type_contact
745 745
 			$sql = "SELECT tc.rowid";
746
-			$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
747
-			$sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
748
-			$sql.= " AND tc.source='".$this->db->escape($source)."'";
749
-			$sql.= " AND tc.code='".$this->db->escape($type_contact)."' AND tc.active=1";
746
+			$sql .= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
747
+			$sql .= " WHERE tc.element='".$this->db->escape($this->element)."'";
748
+			$sql .= " AND tc.source='".$this->db->escape($source)."'";
749
+			$sql .= " AND tc.code='".$this->db->escape($type_contact)."' AND tc.active=1";
750 750
 			//print $sql;
751
-			$resql=$this->db->query($sql);
751
+			$resql = $this->db->query($sql);
752 752
 			if ($resql)
753 753
 			{
754 754
 				$obj = $this->db->fetch_object($resql);
755
-				if ($obj) $id_type_contact=$obj->rowid;
755
+				if ($obj) $id_type_contact = $obj->rowid;
756 756
 			}
757 757
 		}
758 758
 
759 759
 		if ($id_type_contact == 0)
760 760
 		{
761
-			$this->error='CODE_NOT_VALID_FOR_THIS_ELEMENT';
761
+			$this->error = 'CODE_NOT_VALID_FOR_THIS_ELEMENT';
762 762
 			dol_syslog("CODE_NOT_VALID_FOR_THIS_ELEMENT: Code type of contact '".$type_contact."' does not exists or is not active for element ".$this->element.", we can ignore it");
763 763
 			return -3;
764 764
 		}
@@ -766,35 +766,35 @@  discard block
 block discarded – undo
766 766
 		$datecreate = dol_now();
767 767
 
768 768
 		// Socpeople must have already been added by some trigger, then we have to check it to avoid DB_ERROR_RECORD_ALREADY_EXISTS error
769
-		$TListeContacts=$this->liste_contact(-1, $source);
770
-		$already_added=false;
771
-		if(!empty($TListeContacts)) {
772
-			foreach($TListeContacts as $array_contact) {
773
-				if($array_contact['status'] == 4 && $array_contact['id'] == $fk_socpeople && $array_contact['fk_c_type_contact'] == $id_type_contact) {
774
-					$already_added=true;
769
+		$TListeContacts = $this->liste_contact(-1, $source);
770
+		$already_added = false;
771
+		if (!empty($TListeContacts)) {
772
+			foreach ($TListeContacts as $array_contact) {
773
+				if ($array_contact['status'] == 4 && $array_contact['id'] == $fk_socpeople && $array_contact['fk_c_type_contact'] == $id_type_contact) {
774
+					$already_added = true;
775 775
 					break;
776 776
 				}
777 777
 			}
778 778
 		}
779 779
 
780
-		if(!$already_added) {
780
+		if (!$already_added) {
781 781
 
782 782
 			$this->db->begin();
783 783
 
784 784
 			// Insert into database
785 785
 			$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
786
-			$sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
787
-			$sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
788
-			$sql.= "'".$this->db->idate($datecreate)."'";
789
-			$sql.= ", 4, ". $id_type_contact;
790
-			$sql.= ")";
786
+			$sql .= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
787
+			$sql .= " VALUES (".$this->id.", ".$fk_socpeople." , ";
788
+			$sql .= "'".$this->db->idate($datecreate)."'";
789
+			$sql .= ", 4, ".$id_type_contact;
790
+			$sql .= ")";
791 791
 
792
-			$resql=$this->db->query($sql);
792
+			$resql = $this->db->query($sql);
793 793
 			if ($resql)
794 794
 			{
795
-				if (! $notrigger)
795
+				if (!$notrigger)
796 796
 				{
797
-					$result=$this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
797
+					$result = $this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
798 798
 					if ($result < 0)
799 799
 					{
800 800
 						$this->db->rollback();
@@ -809,14 +809,14 @@  discard block
 block discarded – undo
809 809
 			{
810 810
 				if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
811 811
 				{
812
-					$this->error=$this->db->errno();
812
+					$this->error = $this->db->errno();
813 813
 					$this->db->rollback();
814 814
 					echo 'err rollback';
815 815
 					return -2;
816 816
 				}
817 817
 				else
818 818
 				{
819
-					$this->error=$this->db->error();
819
+					$this->error = $this->db->error();
820 820
 					$this->db->rollback();
821 821
 					return -1;
822 822
 				}
@@ -832,15 +832,15 @@  discard block
 block discarded – undo
832 832
 	 *    @param    string          $source     Nature of contact ('internal' or 'external')
833 833
 	 *    @return   int                         >0 if OK, <0 if KO
834 834
 	 */
835
-	function copy_linked_contact($objFrom, $source='internal')
835
+	function copy_linked_contact($objFrom, $source = 'internal')
836 836
 	{
837 837
         // phpcs:enable
838 838
 		$contacts = $objFrom->liste_contact(-1, $source);
839
-		foreach($contacts as $contact)
839
+		foreach ($contacts as $contact)
840 840
 		{
841 841
 			if ($this->add_contact($contact['id'], $contact['fk_c_type_contact'], $contact['source']) < 0)
842 842
 			{
843
-				$this->error=$this->db->lasterror();
843
+				$this->error = $this->db->lasterror();
844 844
 				return -1;
845 845
 			}
846 846
 		}
@@ -857,23 +857,23 @@  discard block
 block discarded – undo
857 857
 	 *      @param  int		$fk_socpeople	    Id of soc_people to update (not modified if 0)
858 858
 	 *      @return int                 		<0 if KO, >= 0 if OK
859 859
 	 */
860
-	function update_contact($rowid, $statut, $type_contact_id=0, $fk_socpeople=0)
860
+	function update_contact($rowid, $statut, $type_contact_id = 0, $fk_socpeople = 0)
861 861
 	{
862 862
         // phpcs:enable
863 863
 		// Insert into database
864 864
 		$sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
865
-		$sql.= " statut = ".$statut;
866
-		if ($type_contact_id) $sql.= ", fk_c_type_contact = '".$type_contact_id ."'";
867
-		if ($fk_socpeople) $sql.= ", fk_socpeople = '".$fk_socpeople ."'";
868
-		$sql.= " where rowid = ".$rowid;
869
-		$resql=$this->db->query($sql);
865
+		$sql .= " statut = ".$statut;
866
+		if ($type_contact_id) $sql .= ", fk_c_type_contact = '".$type_contact_id."'";
867
+		if ($fk_socpeople) $sql .= ", fk_socpeople = '".$fk_socpeople."'";
868
+		$sql .= " where rowid = ".$rowid;
869
+		$resql = $this->db->query($sql);
870 870
 		if ($resql)
871 871
 		{
872 872
 			return 0;
873 873
 		}
874 874
 		else
875 875
 		{
876
-			$this->error=$this->db->lasterror();
876
+			$this->error = $this->db->lasterror();
877 877
 			return -1;
878 878
 		}
879 879
 	}
@@ -886,7 +886,7 @@  discard block
 block discarded – undo
886 886
 	 *    @param	int		$notrigger		Disable all triggers
887 887
 	 *    @return   int						>0 if OK, <0 if KO
888 888
 	 */
889
-	function delete_contact($rowid, $notrigger=0)
889
+	function delete_contact($rowid, $notrigger = 0)
890 890
 	{
891 891
         // phpcs:enable
892 892
 		global $user;
@@ -895,14 +895,14 @@  discard block
 block discarded – undo
895 895
 		$this->db->begin();
896 896
 
897 897
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
898
-		$sql.= " WHERE rowid =".$rowid;
898
+		$sql .= " WHERE rowid =".$rowid;
899 899
 
900 900
 		dol_syslog(get_class($this)."::delete_contact", LOG_DEBUG);
901 901
 		if ($this->db->query($sql))
902 902
 		{
903
-			if (! $notrigger)
903
+			if (!$notrigger)
904 904
 			{
905
-				$result=$this->call_trigger(strtoupper($this->element).'_DELETE_CONTACT', $user);
905
+				$result = $this->call_trigger(strtoupper($this->element).'_DELETE_CONTACT', $user);
906 906
 				if ($result < 0) { $this->db->rollback(); return -1; }
907 907
 			}
908 908
 
@@ -911,7 +911,7 @@  discard block
 block discarded – undo
911 911
 		}
912 912
 		else
913 913
 		{
914
-			$this->error=$this->db->lasterror();
914
+			$this->error = $this->db->lasterror();
915 915
 			$this->db->rollback();
916 916
 			return -1;
917 917
 		}
@@ -925,22 +925,22 @@  discard block
 block discarded – undo
925 925
 	 *	  @param	string	$code		Type of contact (code or id)
926 926
 	 *    @return   int					>0 if OK, <0 if KO
927 927
 	 */
928
-	function delete_linked_contact($source='',$code='')
928
+	function delete_linked_contact($source = '', $code = '')
929 929
 	{
930 930
         // phpcs:enable
931 931
 		$temp = array();
932
-		$typeContact = $this->liste_type_contact($source,'',0,0,$code);
932
+		$typeContact = $this->liste_type_contact($source, '', 0, 0, $code);
933 933
 
934
-		foreach($typeContact as $key => $value)
934
+		foreach ($typeContact as $key => $value)
935 935
 		{
936
-			array_push($temp,$key);
936
+			array_push($temp, $key);
937 937
 		}
938 938
 		$listId = implode(",", $temp);
939 939
 
940 940
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
941
-		$sql.= " WHERE element_id = ".$this->id;
941
+		$sql .= " WHERE element_id = ".$this->id;
942 942
 		if ($listId)
943
-			$sql.= " AND fk_c_type_contact IN (".$listId.")";
943
+			$sql .= " AND fk_c_type_contact IN (".$listId.")";
944 944
 
945 945
 		dol_syslog(get_class($this)."::delete_linked_contact", LOG_DEBUG);
946 946
 		if ($this->db->query($sql))
@@ -949,7 +949,7 @@  discard block
 block discarded – undo
949 949
 		}
950 950
 		else
951 951
 		{
952
-			$this->error=$this->db->lasterror();
952
+			$this->error = $this->db->lasterror();
953 953
 			return -1;
954 954
 		}
955 955
 	}
@@ -964,54 +964,54 @@  discard block
 block discarded – undo
964 964
 	 *    @param    string      $code       Filter on this code of contact type ('SHIPPING', 'BILLING', ...)
965 965
 	 *    @return	array|int		        Array of contacts, -1 if error
966 966
 	 */
967
-	function liste_contact($statut=-1,$source='external',$list=0,$code='')
967
+	function liste_contact($statut = -1, $source = 'external', $list = 0, $code = '')
968 968
 	{
969 969
         // phpcs:enable
970 970
 		global $langs;
971 971
 
972
-		$tab=array();
973
-
974
-		$sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact";    // This field contains id of llx_socpeople or id of llx_user
975
-		if ($source == 'internal') $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
976
-		if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid, t.statut as statuscontact";
977
-		$sql.= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
978
-		$sql.= ", tc.source, tc.element, tc.code, tc.libelle";
979
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
980
-		$sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
981
-		if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
982
-		if ($source == 'external'|| $source == 'thirdparty') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
983
-		$sql.= " WHERE ec.element_id =".$this->id;
984
-		$sql.= " AND ec.fk_c_type_contact=tc.rowid";
985
-		$sql.= " AND tc.element='".$this->db->escape($this->element)."'";
986
-		if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
987
-		if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
988
-		if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
989
-		$sql.= " AND tc.active=1";
990
-		if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
991
-		$sql.=" ORDER BY t.lastname ASC";
972
+		$tab = array();
973
+
974
+		$sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact"; // This field contains id of llx_socpeople or id of llx_user
975
+		if ($source == 'internal') $sql .= ", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
976
+		if ($source == 'external' || $source == 'thirdparty') $sql .= ", t.fk_soc as socid, t.statut as statuscontact";
977
+		$sql .= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
978
+		$sql .= ", tc.source, tc.element, tc.code, tc.libelle";
979
+		$sql .= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
980
+		$sql .= ", ".MAIN_DB_PREFIX."element_contact ec";
981
+		if ($source == 'internal') $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
982
+		if ($source == 'external' || $source == 'thirdparty') $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
983
+		$sql .= " WHERE ec.element_id =".$this->id;
984
+		$sql .= " AND ec.fk_c_type_contact=tc.rowid";
985
+		$sql .= " AND tc.element='".$this->db->escape($this->element)."'";
986
+		if ($code) $sql .= " AND tc.code = '".$this->db->escape($code)."'";
987
+		if ($source == 'internal') $sql .= " AND tc.source = 'internal'";
988
+		if ($source == 'external' || $source == 'thirdparty') $sql .= " AND tc.source = 'external'";
989
+		$sql .= " AND tc.active=1";
990
+		if ($statut >= 0) $sql .= " AND ec.statut = '".$statut."'";
991
+		$sql .= " ORDER BY t.lastname ASC";
992 992
 
993 993
 		dol_syslog(get_class($this)."::liste_contact", LOG_DEBUG);
994
-		$resql=$this->db->query($sql);
994
+		$resql = $this->db->query($sql);
995 995
 		if ($resql)
996 996
 		{
997
-			$num=$this->db->num_rows($resql);
998
-			$i=0;
997
+			$num = $this->db->num_rows($resql);
998
+			$i = 0;
999 999
 			while ($i < $num)
1000 1000
 			{
1001 1001
 				$obj = $this->db->fetch_object($resql);
1002 1002
 
1003
-				if (! $list)
1003
+				if (!$list)
1004 1004
 				{
1005
-					$transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
1006
-					$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1007
-					$tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,
1008
-								   'nom'=>$obj->lastname,      // For backward compatibility
1005
+					$transkey = "TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
1006
+					$libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->libelle);
1007
+					$tab[$i] = array('source'=>$obj->source, 'socid'=>$obj->socid, 'id'=>$obj->id,
1008
+								   'nom'=>$obj->lastname, // For backward compatibility
1009 1009
 								   'civility'=>$obj->civility, 'lastname'=>$obj->lastname, 'firstname'=>$obj->firstname, 'email'=>$obj->email, 'login'=>$obj->login, 'photo'=>$obj->photo, 'statuscontact'=>$obj->statuscontact,
1010 1010
 								   'rowid'=>$obj->rowid, 'code'=>$obj->code, 'libelle'=>$libelle_type, 'status'=>$obj->statuslink, 'fk_c_type_contact'=>$obj->fk_c_type_contact);
1011 1011
 				}
1012 1012
 				else
1013 1013
 				{
1014
-					$tab[$i]=$obj->id;
1014
+					$tab[$i] = $obj->id;
1015 1015
 				}
1016 1016
 
1017 1017
 				$i++;
@@ -1021,7 +1021,7 @@  discard block
 block discarded – undo
1021 1021
 		}
1022 1022
 		else
1023 1023
 		{
1024
-			$this->error=$this->db->lasterror();
1024
+			$this->error = $this->db->lasterror();
1025 1025
 			dol_print_error($this->db);
1026 1026
 			return -1;
1027 1027
 		}
@@ -1037,16 +1037,16 @@  discard block
 block discarded – undo
1037 1037
 	function swapContactStatus($rowid)
1038 1038
 	{
1039 1039
 		$sql = "SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact,";
1040
-		$sql.= " tc.code, tc.libelle";
1040
+		$sql .= " tc.code, tc.libelle";
1041 1041
 		//$sql.= ", s.fk_soc";
1042
-		$sql.= " FROM (".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc)";
1042
+		$sql .= " FROM (".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc)";
1043 1043
 		//$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as s ON ec.fk_socpeople=s.rowid";	// Si contact de type external, alors il est lie a une societe
1044
-		$sql.= " WHERE ec.rowid =".$rowid;
1045
-		$sql.= " AND ec.fk_c_type_contact=tc.rowid";
1046
-		$sql.= " AND tc.element = '".$this->db->escape($this->element)."'";
1044
+		$sql .= " WHERE ec.rowid =".$rowid;
1045
+		$sql .= " AND ec.fk_c_type_contact=tc.rowid";
1046
+		$sql .= " AND tc.element = '".$this->db->escape($this->element)."'";
1047 1047
 
1048 1048
 		dol_syslog(get_class($this)."::swapContactStatus", LOG_DEBUG);
1049
-		$resql=$this->db->query($sql);
1049
+		$resql = $this->db->query($sql);
1050 1050
 		if ($resql)
1051 1051
 		{
1052 1052
 			$obj = $this->db->fetch_object($resql);
@@ -1057,7 +1057,7 @@  discard block
 block discarded – undo
1057 1057
 		}
1058 1058
 		else
1059 1059
 		{
1060
-			$this->error=$this->db->error();
1060
+			$this->error = $this->db->error();
1061 1061
 			dol_print_error($this->db);
1062 1062
 			return -1;
1063 1063
 		}
@@ -1074,44 +1074,44 @@  discard block
 block discarded – undo
1074 1074
 	 *		@param	string	$code		Type of contact (Example: 'CUSTOMER', 'SERVICE')
1075 1075
 	 *      @return array       		Array list of type of contacts (id->label if option=0, code->label if option=1)
1076 1076
 	 */
1077
-	function liste_type_contact($source='internal', $order='position', $option=0, $activeonly=0, $code='')
1077
+	function liste_type_contact($source = 'internal', $order = 'position', $option = 0, $activeonly = 0, $code = '')
1078 1078
 	{
1079 1079
         // phpcs:enable
1080 1080
 		global $langs;
1081 1081
 
1082
-		if (empty($order)) $order='position';
1083
-		if ($order == 'position') $order.=',code';
1082
+		if (empty($order)) $order = 'position';
1083
+		if ($order == 'position') $order .= ',code';
1084 1084
 
1085 1085
 		$tab = array();
1086 1086
 		$sql = "SELECT DISTINCT tc.rowid, tc.code, tc.libelle, tc.position";
1087
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
1088
-		$sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
1089
-		if ($activeonly == 1) $sql.= " AND tc.active=1"; // only the active types
1090
-		if (! empty($source) && $source != 'all') $sql.= " AND tc.source='".$this->db->escape($source)."'";
1091
-		if (! empty($code)) $sql.= " AND tc.code='".$this->db->escape($code)."'";
1092
-		$sql.= $this->db->order($order,'ASC');
1087
+		$sql .= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
1088
+		$sql .= " WHERE tc.element='".$this->db->escape($this->element)."'";
1089
+		if ($activeonly == 1) $sql .= " AND tc.active=1"; // only the active types
1090
+		if (!empty($source) && $source != 'all') $sql .= " AND tc.source='".$this->db->escape($source)."'";
1091
+		if (!empty($code)) $sql .= " AND tc.code='".$this->db->escape($code)."'";
1092
+		$sql .= $this->db->order($order, 'ASC');
1093 1093
 
1094 1094
 		//print "sql=".$sql;
1095
-		$resql=$this->db->query($sql);
1095
+		$resql = $this->db->query($sql);
1096 1096
 		if ($resql)
1097 1097
 		{
1098
-			$num=$this->db->num_rows($resql);
1099
-			$i=0;
1098
+			$num = $this->db->num_rows($resql);
1099
+			$i = 0;
1100 1100
 			while ($i < $num)
1101 1101
 			{
1102 1102
 				$obj = $this->db->fetch_object($resql);
1103 1103
 
1104
-				$transkey="TypeContact_".$this->element."_".$source."_".$obj->code;
1105
-				$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1106
-				if (empty($option)) $tab[$obj->rowid]=$libelle_type;
1107
-				else $tab[$obj->code]=$libelle_type;
1104
+				$transkey = "TypeContact_".$this->element."_".$source."_".$obj->code;
1105
+				$libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->libelle);
1106
+				if (empty($option)) $tab[$obj->rowid] = $libelle_type;
1107
+				else $tab[$obj->code] = $libelle_type;
1108 1108
 				$i++;
1109 1109
 			}
1110 1110
 			return $tab;
1111 1111
 		}
1112 1112
 		else
1113 1113
 		{
1114
-			$this->error=$this->db->lasterror();
1114
+			$this->error = $this->db->lasterror();
1115 1115
 			//dol_print_error($this->db);
1116 1116
 			return null;
1117 1117
 		}
@@ -1128,53 +1128,53 @@  discard block
 block discarded – undo
1128 1128
 	 *		@param	int		$status		limited to a certain status
1129 1129
 	 *      @return array       		List of id for such contacts
1130 1130
 	 */
1131
-	function getIdContact($source,$code,$status=0)
1131
+	function getIdContact($source, $code, $status = 0)
1132 1132
 	{
1133 1133
 		global $conf;
1134 1134
 
1135
-		$result=array();
1136
-		$i=0;
1135
+		$result = array();
1136
+		$i = 0;
1137 1137
 		//cas particulier pour les expeditions
1138
-		if($this->element=='shipping' && $this->origin_id != 0) {
1139
-			$id=$this->origin_id;
1140
-			$element='commande';
1141
-        } else if($this->element=='reception' && $this->origin_id != 0) {
1142
-            $id=$this->origin_id;
1143
-            $element='order_supplier';
1138
+		if ($this->element == 'shipping' && $this->origin_id != 0) {
1139
+			$id = $this->origin_id;
1140
+			$element = 'commande';
1141
+        } else if ($this->element == 'reception' && $this->origin_id != 0) {
1142
+            $id = $this->origin_id;
1143
+            $element = 'order_supplier';
1144 1144
 		} else {
1145
-			$id=$this->id;
1146
-			$element=$this->element;
1145
+			$id = $this->id;
1146
+			$element = $this->element;
1147 1147
 		}
1148 1148
 
1149 1149
 		$sql = "SELECT ec.fk_socpeople";
1150
-		$sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec,";
1151
-		if ($source == 'internal') $sql.= " ".MAIN_DB_PREFIX."user as c,";
1152
-		if ($source == 'external') $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
1153
-		$sql.= " ".MAIN_DB_PREFIX."c_type_contact as tc";
1154
-		$sql.= " WHERE ec.element_id = ".$id;
1155
-		$sql.= " AND ec.fk_socpeople = c.rowid";
1156
-		if ($source == 'internal') $sql.= " AND c.entity IN (".getEntity('user').")";
1157
-		if ($source == 'external') $sql.= " AND c.entity IN (".getEntity('societe').")";
1158
-		$sql.= " AND ec.fk_c_type_contact = tc.rowid";
1159
-		$sql.= " AND tc.element = '".$element."'";
1160
-		$sql.= " AND tc.source = '".$source."'";
1161
-		$sql.= " AND tc.code = '".$code."'";
1162
-		$sql.= " AND tc.active = 1";
1163
-		if ($status) $sql.= " AND ec.statut = ".$status;
1150
+		$sql .= " FROM ".MAIN_DB_PREFIX."element_contact as ec,";
1151
+		if ($source == 'internal') $sql .= " ".MAIN_DB_PREFIX."user as c,";
1152
+		if ($source == 'external') $sql .= " ".MAIN_DB_PREFIX."socpeople as c,";
1153
+		$sql .= " ".MAIN_DB_PREFIX."c_type_contact as tc";
1154
+		$sql .= " WHERE ec.element_id = ".$id;
1155
+		$sql .= " AND ec.fk_socpeople = c.rowid";
1156
+		if ($source == 'internal') $sql .= " AND c.entity IN (".getEntity('user').")";
1157
+		if ($source == 'external') $sql .= " AND c.entity IN (".getEntity('societe').")";
1158
+		$sql .= " AND ec.fk_c_type_contact = tc.rowid";
1159
+		$sql .= " AND tc.element = '".$element."'";
1160
+		$sql .= " AND tc.source = '".$source."'";
1161
+		$sql .= " AND tc.code = '".$code."'";
1162
+		$sql .= " AND tc.active = 1";
1163
+		if ($status) $sql .= " AND ec.statut = ".$status;
1164 1164
 
1165 1165
 		dol_syslog(get_class($this)."::getIdContact", LOG_DEBUG);
1166
-		$resql=$this->db->query($sql);
1166
+		$resql = $this->db->query($sql);
1167 1167
 		if ($resql)
1168 1168
 		{
1169 1169
 			while ($obj = $this->db->fetch_object($resql))
1170 1170
 			{
1171
-				$result[$i]=$obj->fk_socpeople;
1171
+				$result[$i] = $obj->fk_socpeople;
1172 1172
 				$i++;
1173 1173
 			}
1174 1174
 		}
1175 1175
 		else
1176 1176
 		{
1177
-			$this->error=$this->db->error();
1177
+			$this->error = $this->db->error();
1178 1178
 			return null;
1179 1179
 		}
1180 1180
 
@@ -1188,16 +1188,16 @@  discard block
 block discarded – undo
1188 1188
 	 *		@param	int		$contactid      Id du contact. Use this->contactid if empty.
1189 1189
 	 *		@return	int						<0 if KO, >0 if OK
1190 1190
 	 */
1191
-	function fetch_contact($contactid=null)
1191
+	function fetch_contact($contactid = null)
1192 1192
 	{
1193 1193
         // phpcs:enable
1194
-		if (empty($contactid)) $contactid=$this->contactid;
1194
+		if (empty($contactid)) $contactid = $this->contactid;
1195 1195
 
1196 1196
 		if (empty($contactid)) return 0;
1197 1197
 
1198 1198
 		require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
1199 1199
 		$contact = new Contact($this->db);
1200
-		$result=$contact->fetch($contactid);
1200
+		$result = $contact->fetch($contactid);
1201 1201
 		$this->contact = $contact;
1202 1202
 		return $result;
1203 1203
 	}
@@ -1209,7 +1209,7 @@  discard block
 block discarded – undo
1209 1209
 	 *		@param		int		$force_thirdparty_id	Force thirdparty id
1210 1210
 	 *		@return		int								<0 if KO, >0 if OK
1211 1211
 	 */
1212
-	function fetch_thirdparty($force_thirdparty_id=0)
1212
+	function fetch_thirdparty($force_thirdparty_id = 0)
1213 1213
 	{
1214 1214
         // phpcs:enable
1215 1215
 		global $conf;
@@ -1217,7 +1217,7 @@  discard block
 block discarded – undo
1217 1217
 		if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id))
1218 1218
 			return 0;
1219 1219
 
1220
-		require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
1220
+		require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
1221 1221
 
1222 1222
 		$idtofetch = isset($this->socid) ? $this->socid : (isset($this->fk_soc) ? $this->fk_soc : $this->fk_thirdparty);
1223 1223
 		if ($force_thirdparty_id)
@@ -1280,7 +1280,7 @@  discard block
 block discarded – undo
1280 1280
 
1281 1281
 		dol_syslog(get_class($this).'::fetch_barcode this->element='.$this->element.' this->barcode_type='.$this->barcode_type);
1282 1282
 
1283
-		$idtype=$this->barcode_type;
1283
+		$idtype = $this->barcode_type;
1284 1284
 		if (empty($idtype) && $idtype != '0')	// If type of barcode no set, we try to guess. If set to '0' it means we forced to have type remain not defined
1285 1285
 		{
1286 1286
 			if ($this->element == 'product')
@@ -1295,8 +1295,8 @@  discard block
 block discarded – undo
1295 1295
 			if (empty($this->barcode_type) || empty($this->barcode_type_code) || empty($this->barcode_type_label) || empty($this->barcode_type_coder))    // If data not already loaded
1296 1296
 			{
1297 1297
 				$sql = "SELECT rowid, code, libelle as label, coder";
1298
-				$sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
1299
-				$sql.= " WHERE rowid = ".$idtype;
1298
+				$sql .= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
1299
+				$sql .= " WHERE rowid = ".$idtype;
1300 1300
 				dol_syslog(get_class($this).'::fetch_barcode', LOG_DEBUG);
1301 1301
 				$resql = $this->db->query($sql);
1302 1302
 				if ($resql)
@@ -1329,13 +1329,13 @@  discard block
 block discarded – undo
1329 1329
         // phpcs:enable
1330 1330
 		include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
1331 1331
 
1332
-		if (empty($this->fk_project) && ! empty($this->fk_projet)) $this->fk_project = $this->fk_projet;	// For backward compatibility
1332
+		if (empty($this->fk_project) && !empty($this->fk_projet)) $this->fk_project = $this->fk_projet; // For backward compatibility
1333 1333
 		if (empty($this->fk_project)) return 0;
1334 1334
 
1335 1335
 		$project = new Project($this->db);
1336 1336
 		$result = $project->fetch($this->fk_project);
1337 1337
 
1338
-		$this->projet = $project;	// deprecated
1338
+		$this->projet = $project; // deprecated
1339 1339
 		$this->project = $project;
1340 1340
 		return $result;
1341 1341
 	}
@@ -1371,7 +1371,7 @@  discard block
 block discarded – undo
1371 1371
 	{
1372 1372
         // phpcs:enable
1373 1373
 		$user = new User($this->db);
1374
-		$result=$user->fetch($userid);
1374
+		$result = $user->fetch($userid);
1375 1375
 		$this->user = $user;
1376 1376
 		return $result;
1377 1377
 	}
@@ -1409,14 +1409,14 @@  discard block
 block discarded – undo
1409 1409
 	{
1410 1410
 		global $conf;
1411 1411
 
1412
-		$result=false;
1412
+		$result = false;
1413 1413
 
1414 1414
 		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX.$table;
1415
-		$sql.= " WHERE ".$field." = '".$key."'";
1416
-		if (! empty($element)) {
1417
-			$sql.= " AND entity IN (".getEntity($element).")";
1415
+		$sql .= " WHERE ".$field." = '".$key."'";
1416
+		if (!empty($element)) {
1417
+			$sql .= " AND entity IN (".getEntity($element).")";
1418 1418
 		} else {
1419
-			$sql .= " AND entity = " . Globals::$conf->entity;
1419
+			$sql .= " AND entity = ".Globals::$conf->entity;
1420 1420
         }
1421 1421
 
1422 1422
 		dol_syslog(get_class($this).'::fetchObjectFrom', LOG_DEBUG);
@@ -1443,10 +1443,10 @@  discard block
 block discarded – undo
1443 1443
 	 */
1444 1444
 	function getValueFrom($table, $id, $field)
1445 1445
 	{
1446
-		$result=false;
1446
+		$result = false;
1447 1447
 		if (!empty($id) && !empty($field) && !empty($table)) {
1448 1448
 			$sql = "SELECT ".$field." FROM ".MAIN_DB_PREFIX.$table;
1449
-			$sql.= " WHERE rowid = ".$id;
1449
+			$sql .= " WHERE rowid = ".$id;
1450 1450
 
1451 1451
 			dol_syslog(get_class($this).'::getValueFrom', LOG_DEBUG);
1452 1452
 			$resql = $this->db->query($sql);
@@ -1475,36 +1475,36 @@  discard block
 block discarded – undo
1475 1475
 	 *	@return	int							<0 if KO, >0 if OK
1476 1476
 	 *  @see updateExtraField
1477 1477
 	 */
1478
-	function setValueFrom($field, $value, $table='', $id=null, $format='', $id_field='', $fuser=null, $trigkey='', $fk_user_field='fk_user_modif')
1478
+	function setValueFrom($field, $value, $table = '', $id = null, $format = '', $id_field = '', $fuser = null, $trigkey = '', $fk_user_field = 'fk_user_modif')
1479 1479
 	{
1480
-		global $user,$langs,$conf;
1480
+		global $user, $langs, $conf;
1481 1481
 
1482
-		if (empty($table)) 	  $table=$this->table_element;
1483
-		if (empty($id))    	  $id=$this->id;
1484
-		if (empty($format))   $format='text';
1485
-		if (empty($id_field)) $id_field='rowid';
1482
+		if (empty($table)) 	  $table = $this->table_element;
1483
+		if (empty($id))    	  $id = $this->id;
1484
+		if (empty($format))   $format = 'text';
1485
+		if (empty($id_field)) $id_field = 'rowid';
1486 1486
 
1487
-		$error=0;
1487
+		$error = 0;
1488 1488
 
1489 1489
 		$this->db->begin();
1490 1490
 
1491 1491
 		// Special case
1492
-		if ($table == 'product' && $field == 'note_private') $field='note';
1492
+		if ($table == 'product' && $field == 'note_private') $field = 'note';
1493 1493
 		if (in_array($table, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) $fk_user_field = 'fk_user_mod';
1494 1494
 
1495 1495
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$table." SET ";
1496 1496
 
1497
-		if ($format == 'text') $sql.= $field." = '".$this->db->escape($value)."'";
1498
-		else if ($format == 'int') $sql.= $field." = ".$this->db->escape($value);
1499
-		else if ($format == 'date') $sql.= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
1497
+		if ($format == 'text') $sql .= $field." = '".$this->db->escape($value)."'";
1498
+		else if ($format == 'int') $sql .= $field." = ".$this->db->escape($value);
1499
+		else if ($format == 'date') $sql .= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
1500 1500
 
1501 1501
 		if ($fk_user_field)
1502 1502
 		{
1503
-			if (! empty($fuser) && is_object($fuser)) $sql.=", ".$fk_user_field." = ".$fuser->id;
1504
-			elseif (empty($fuser) || $fuser != 'none') $sql.=", ".$fk_user_field." = ".$user->id;
1503
+			if (!empty($fuser) && is_object($fuser)) $sql .= ", ".$fk_user_field." = ".$fuser->id;
1504
+			elseif (empty($fuser) || $fuser != 'none') $sql .= ", ".$fk_user_field." = ".$user->id;
1505 1505
 		}
1506 1506
 
1507
-		$sql.= " WHERE ".$id_field." = ".$id;
1507
+		$sql .= " WHERE ".$id_field." = ".$id;
1508 1508
 
1509 1509
 		dol_syslog(get_class($this)."::".__FUNCTION__."", LOG_DEBUG);
1510 1510
 		$resql = $this->db->query($sql);
@@ -1521,11 +1521,11 @@  discard block
 block discarded – undo
1521 1521
 				{
1522 1522
 					$result = $this->fetchCommon($id);
1523 1523
 				}
1524
-				if ($result >= 0) $result=$this->call_trigger($trigkey, (! empty($fuser) && is_object($fuser)) ? $fuser : $user);   // This may set this->errors
1524
+				if ($result >= 0) $result = $this->call_trigger($trigkey, (!empty($fuser) && is_object($fuser)) ? $fuser : $user); // This may set this->errors
1525 1525
 				if ($result < 0) $error++;
1526 1526
 			}
1527 1527
 
1528
-			if (! $error)
1528
+			if (!$error)
1529 1529
 			{
1530 1530
 				if (property_exists($this, $field)) $this->$field = $value;
1531 1531
 				$this->db->commit();
@@ -1539,7 +1539,7 @@  discard block
 block discarded – undo
1539 1539
 		}
1540 1540
 		else
1541 1541
 		{
1542
-			$this->error=$this->db->lasterror();
1542
+			$this->error = $this->db->lasterror();
1543 1543
 			$this->db->rollback();
1544 1544
 			return -1;
1545 1545
 		}
@@ -1554,14 +1554,14 @@  discard block
 block discarded – undo
1554 1554
 	 *		@param	int		$nodbprefix	Do not include DB prefix to forge table name
1555 1555
 	 *      @return int         		<0 if KO, >0 if OK
1556 1556
 	 */
1557
-	function load_previous_next_ref($filter, $fieldid, $nodbprefix=0)
1557
+	function load_previous_next_ref($filter, $fieldid, $nodbprefix = 0)
1558 1558
 	{
1559 1559
         // phpcs:enable
1560 1560
 		global $conf, $user;
1561 1561
 
1562
-		if (! $this->table_element)
1562
+		if (!$this->table_element)
1563 1563
 		{
1564
-			dol_print_error('',get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
1564
+			dol_print_error('', get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
1565 1565
 			return -1;
1566 1566
 		}
1567 1567
 		if ($fieldid == 'none') return 1;
@@ -1576,45 +1576,45 @@  discard block
 block discarded – undo
1576 1576
 		if ($this->element == 'societe') $alias = 'te';
1577 1577
 
1578 1578
 		$sql = "SELECT MAX(te.".$fieldid.")";
1579
-		$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1579
+		$sql .= " FROM ".(empty($nodbprefix) ?MAIN_DB_PREFIX:'').$this->table_element." as te";
1580 1580
 		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1581
-            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1582
-		}
1583
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1584
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1585
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1586
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid)  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1587
-		$sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1588
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1589
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1590
-		if (! empty($filter))
1591
-		{
1592
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1593
-			$sql.=$filter;
1594
-		}
1595
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1596
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1581
+            $sql .= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1582
+		}
1583
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
1584
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to socid
1585
+		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid"; // If we need to link to societe to limit select to socid
1586
+		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid)  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1587
+		$sql .= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists)
1588
+		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql .= " AND sc.fk_user = ".$user->id;
1589
+		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql .= " AND (sc.fk_user = ".$user->id.' OR te.fk_soc IS NULL)';
1590
+		if (!empty($filter))
1591
+		{
1592
+			if (!preg_match('/^\s*AND/i', $filter)) $sql .= " AND "; // For backward compatibility
1593
+			$sql .= $filter;
1594
+		}
1595
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
1596
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to socid
1597 1597
 		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1598 1598
 			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1599 1599
                 if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1600
-                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1600
+                    $sql .= " AND te.entity IS NOT NULL"; // Show all users
1601 1601
 				} else {
1602
-					$sql.= " AND ug.fk_user = te.rowid";
1603
-					$sql.= " AND ug.entity IN (".getEntity($this->element).")";
1602
+					$sql .= " AND ug.fk_user = te.rowid";
1603
+					$sql .= " AND ug.entity IN (".getEntity($this->element).")";
1604 1604
 				}
1605 1605
 			} else {
1606
-				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1606
+				$sql .= ' AND te.entity IN ('.getEntity($this->element).')';
1607 1607
 			}
1608 1608
 		}
1609
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1610
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1611
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1609
+		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql .= ' AND te.fk_soc = '.$socid;
1610
+		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql .= ' AND (te.fk_soc = '.$socid.' OR te.fk_soc IS NULL)';
1611
+		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql .= ' AND te.rowid = '.$socid;
1612 1612
 		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1613 1613
 
1614 1614
 		$result = $this->db->query($sql);
1615
-		if (! $result)
1615
+		if (!$result)
1616 1616
 		{
1617
-			$this->error=$this->db->lasterror();
1617
+			$this->error = $this->db->lasterror();
1618 1618
 			return -1;
1619 1619
 		}
1620 1620
 		$row = $this->db->fetch_row($result);
@@ -1622,46 +1622,46 @@  discard block
 block discarded – undo
1622 1622
 
1623 1623
 
1624 1624
 		$sql = "SELECT MIN(te.".$fieldid.")";
1625
-		$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1625
+		$sql .= " FROM ".(empty($nodbprefix) ?MAIN_DB_PREFIX:'').$this->table_element." as te";
1626 1626
 		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1627
-            $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1628
-		}
1629
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1630
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1631
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1632
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1633
-		$sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1634
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1635
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1636
-		if (! empty($filter))
1637
-		{
1638
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1639
-			$sql.=$filter;
1640
-		}
1641
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1642
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1627
+            $sql .= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1628
+		}
1629
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
1630
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to socid
1631
+		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid"; // If we need to link to societe to limit select to socid
1632
+		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1633
+		$sql .= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists)
1634
+		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql .= " AND sc.fk_user = ".$user->id;
1635
+		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql .= " AND (sc.fk_user = ".$user->id.' OR te.fk_soc IS NULL)';
1636
+		if (!empty($filter))
1637
+		{
1638
+			if (!preg_match('/^\s*AND/i', $filter)) $sql .= " AND "; // For backward compatibility
1639
+			$sql .= $filter;
1640
+		}
1641
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
1642
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql .= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to socid
1643 1643
 		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1644 1644
 			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1645 1645
                 if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
1646
-                    $sql.= " AND te.entity IS NOT NULL"; // Show all users
1646
+                    $sql .= " AND te.entity IS NOT NULL"; // Show all users
1647 1647
 				} else {
1648
-					$sql.= " AND ug.fk_user = te.rowid";
1649
-					$sql.= " AND ug.entity IN (".getEntity($this->element).")";
1648
+					$sql .= " AND ug.fk_user = te.rowid";
1649
+					$sql .= " AND ug.entity IN (".getEntity($this->element).")";
1650 1650
 				}
1651 1651
 			} else {
1652
-				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1652
+				$sql .= ' AND te.entity IN ('.getEntity($this->element).')';
1653 1653
 			}
1654 1654
 		}
1655
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1656
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1657
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1655
+		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql .= ' AND te.fk_soc = '.$socid;
1656
+		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql .= ' AND (te.fk_soc = '.$socid.' OR te.fk_soc IS NULL)';
1657
+		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql .= ' AND te.rowid = '.$socid;
1658 1658
 		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1659 1659
 		// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
1660 1660
 
1661 1661
 		$result = $this->db->query($sql);
1662
-		if (! $result)
1662
+		if (!$result)
1663 1663
 		{
1664
-			$this->error=$this->db->lasterror();
1664
+			$this->error = $this->db->lasterror();
1665 1665
 			return -2;
1666 1666
 		}
1667 1667
 		$row = $this->db->fetch_row($result);
@@ -1678,11 +1678,11 @@  discard block
 block discarded – undo
1678 1678
 	 *      @return array				Array of id of contacts (if source=external or internal)
1679 1679
 	 * 									Array of id of third parties with at least one contact on object (if source=thirdparty)
1680 1680
 	 */
1681
-	function getListContactId($source='external')
1681
+	function getListContactId($source = 'external')
1682 1682
 	{
1683 1683
 		$contactAlreadySelected = array();
1684
-		$tab = $this->liste_contact(-1,$source);
1685
-		$num=count($tab);
1684
+		$tab = $this->liste_contact(-1, $source);
1685
+		$num = count($tab);
1686 1686
 		$i = 0;
1687 1687
 		while ($i < $num)
1688 1688
 		{
@@ -1702,24 +1702,24 @@  discard block
 block discarded – undo
1702 1702
 	 */
1703 1703
 	function setProject($projectid)
1704 1704
 	{
1705
-		if (! $this->table_element)
1705
+		if (!$this->table_element)
1706 1706
 		{
1707
-			dol_syslog(get_class($this)."::setProject was called on objet with property table_element not defined",LOG_ERR);
1707
+			dol_syslog(get_class($this)."::setProject was called on objet with property table_element not defined", LOG_ERR);
1708 1708
 			return -1;
1709 1709
 		}
1710 1710
 
1711 1711
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1712 1712
 		if ($this->table_element == 'actioncomm')
1713 1713
 		{
1714
-			if ($projectid) $sql.= ' SET fk_project = '.$projectid;
1715
-			else $sql.= ' SET fk_project = NULL';
1716
-			$sql.= ' WHERE id = '.$this->id;
1714
+			if ($projectid) $sql .= ' SET fk_project = '.$projectid;
1715
+			else $sql .= ' SET fk_project = NULL';
1716
+			$sql .= ' WHERE id = '.$this->id;
1717 1717
 		}
1718 1718
 		else
1719 1719
 		{
1720
-			if ($projectid) $sql.= ' SET fk_projet = '.$projectid;
1721
-			else $sql.= ' SET fk_projet = NULL';
1722
-			$sql.= ' WHERE rowid = '.$this->id;
1720
+			if ($projectid) $sql .= ' SET fk_projet = '.$projectid;
1721
+			else $sql .= ' SET fk_projet = NULL';
1722
+			$sql .= ' WHERE rowid = '.$this->id;
1723 1723
 		}
1724 1724
 
1725 1725
 		dol_syslog(get_class($this)."::setProject", LOG_DEBUG);
@@ -1765,14 +1765,14 @@  discard block
 block discarded – undo
1765 1765
 			else
1766 1766
 			{
1767 1767
 				dol_syslog(get_class($this).'::setPaymentMethods Erreur '.$sql.' - '.$this->db->error());
1768
-				$this->error=$this->db->error();
1768
+				$this->error = $this->db->error();
1769 1769
 				return -1;
1770 1770
 			}
1771 1771
 		}
1772 1772
 		else
1773 1773
 		{
1774 1774
 			dol_syslog(get_class($this).'::setPaymentMethods, status of the object is incompatible');
1775
-			$this->error='Status of the object is incompatible '.$this->statut;
1775
+			$this->error = 'Status of the object is incompatible '.$this->statut;
1776 1776
 			return -2;
1777 1777
 		}
1778 1778
 	}
@@ -1799,21 +1799,21 @@  discard block
 block discarded – undo
1799 1799
 				$this->multicurrency_code = $code;
1800 1800
 
1801 1801
 				list($fk_multicurrency, $rate) = MultiCurrency::getIdAndTxFromCode($this->db, $code);
1802
-				if ($rate) $this->setMulticurrencyRate($rate,2);
1802
+				if ($rate) $this->setMulticurrencyRate($rate, 2);
1803 1803
 
1804 1804
 				return 1;
1805 1805
 			}
1806 1806
 			else
1807 1807
 			{
1808 1808
 				dol_syslog(get_class($this).'::setMulticurrencyCode Erreur '.$sql.' - '.$this->db->error());
1809
-				$this->error=$this->db->error();
1809
+				$this->error = $this->db->error();
1810 1810
 				return -1;
1811 1811
 			}
1812 1812
 		}
1813 1813
 		else
1814 1814
 		{
1815 1815
 			dol_syslog(get_class($this).'::setMulticurrencyCode, status of the object is incompatible');
1816
-			$this->error='Status of the object is incompatible '.$this->statut;
1816
+			$this->error = 'Status of the object is incompatible '.$this->statut;
1817 1817
 			return -2;
1818 1818
 		}
1819 1819
 	}
@@ -1825,7 +1825,7 @@  discard block
 block discarded – undo
1825 1825
 	 *  @param		int		$mode	mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency
1826 1826
 	 *  @return		int				>0 if OK, <0 if KO
1827 1827
 	 */
1828
-	function setMulticurrencyRate($rate, $mode=1)
1828
+	function setMulticurrencyRate($rate, $mode = 1)
1829 1829
 	{
1830 1830
 		dol_syslog(get_class($this).'::setMulticurrencyRate('.$id.')');
1831 1831
 		if ($this->statut >= 0 || $this->element == 'societe')
@@ -1845,7 +1845,7 @@  discard block
 block discarded – undo
1845 1845
 				{
1846 1846
 					foreach ($this->lines as &$line)
1847 1847
 					{
1848
-						if($mode == 1) {
1848
+						if ($mode == 1) {
1849 1849
 							$line->subprice = 0;
1850 1850
 						}
1851 1851
 
@@ -1853,14 +1853,14 @@  discard block
 block discarded – undo
1853 1853
 							case 'propal':
1854 1854
 								$this->updateline(
1855 1855
 									$line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1856
-									($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1856
+									($line->description ? $line->description : $line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1857 1857
 									$line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start,
1858 1858
 									$line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1859 1859
 								);
1860 1860
 								break;
1861 1861
 							case 'commande':
1862 1862
 								$this->updateline(
1863
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1863
+									$line->id, ($line->description ? $line->description : $line->desc), $line->subprice, $line->qty, $line->remise_percent,
1864 1864
 									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->date_start, $line->date_end,
1865 1865
 									$line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1866 1866
 									$line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
@@ -1868,7 +1868,7 @@  discard block
 block discarded – undo
1868 1868
 								break;
1869 1869
 							case 'facture':
1870 1870
 								$this->updateline(
1871
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1871
+									$line->id, ($line->description ? $line->description : $line->desc), $line->subprice, $line->qty, $line->remise_percent,
1872 1872
 									$line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits,
1873 1873
 									$line->product_type, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label,
1874 1874
 									$line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit, $line->multicurrency_subprice
@@ -1877,21 +1877,21 @@  discard block
 block discarded – undo
1877 1877
 							case 'supplier_proposal':
1878 1878
 								$this->updateline(
1879 1879
 									$line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
1880
-									($line->description?$line->description:$line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1880
+									($line->description ? $line->description : $line->desc), 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line,
1881 1881
 									$line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options,
1882 1882
 									$line->ref_fourn, $line->multicurrency_subprice
1883 1883
 								);
1884 1884
 								break;
1885 1885
 							case 'order_supplier':
1886 1886
 								$this->updateline(
1887
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
1887
+									$line->id, ($line->description ? $line->description : $line->desc), $line->subprice, $line->qty, $line->remise_percent,
1888 1888
 									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false,
1889 1889
 									$line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1890 1890
 								);
1891 1891
 								break;
1892 1892
 							case 'invoice_supplier':
1893 1893
 								$this->updateline(
1894
-									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->tva_tx, $line->localtax1_tx,
1894
+									$line->id, ($line->description ? $line->description : $line->desc), $line->subprice, $line->tva_tx, $line->localtax1_tx,
1895 1895
 									$line->localtax2_tx, $line->qty, 0, 'HT', $line->info_bits, $line->product_type, $line->remise_percent, false,
1896 1896
 									$line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
1897 1897
 								);
@@ -1908,14 +1908,14 @@  discard block
 block discarded – undo
1908 1908
 			else
1909 1909
 			{
1910 1910
 				dol_syslog(get_class($this).'::setMulticurrencyRate Erreur '.$sql.' - '.$this->db->error());
1911
-				$this->error=$this->db->error();
1911
+				$this->error = $this->db->error();
1912 1912
 				return -1;
1913 1913
 			}
1914 1914
 		}
1915 1915
 		else
1916 1916
 		{
1917 1917
 			dol_syslog(get_class($this).'::setMulticurrencyRate, status of the object is incompatible');
1918
-			$this->error='Status of the object is incompatible '.$this->statut;
1918
+			$this->error = 'Status of the object is incompatible '.$this->statut;
1919 1919
 			return -2;
1920 1920
 		}
1921 1921
 	}
@@ -1945,20 +1945,20 @@  discard block
 block discarded – undo
1945 1945
 				$this->cond_reglement_id = $id;
1946 1946
 				// for supplier
1947 1947
 				if (get_class($this) == 'Fournisseur') $this->cond_reglement_supplier_id = $id;
1948
-				$this->cond_reglement = $id;	// for compatibility
1948
+				$this->cond_reglement = $id; // for compatibility
1949 1949
 				return 1;
1950 1950
 			}
1951 1951
 			else
1952 1952
 			{
1953 1953
 				dol_syslog(get_class($this).'::setPaymentTerms Erreur '.$sql.' - '.$this->db->error());
1954
-				$this->error=$this->db->error();
1954
+				$this->error = $this->db->error();
1955 1955
 				return -1;
1956 1956
 			}
1957 1957
 		}
1958 1958
 		else
1959 1959
 		{
1960 1960
 			dol_syslog(get_class($this).'::setPaymentTerms, status of the object is incompatible');
1961
-			$this->error='Status of the object is incompatible '.$this->statut;
1961
+			$this->error = 'Status of the object is incompatible '.$this->statut;
1962 1962
 			return -2;
1963 1963
 		}
1964 1964
 	}
@@ -1976,7 +1976,7 @@  discard block
 block discarded – undo
1976 1976
 		if ($this->element == 'delivery' || $this->element == 'shipping') $fieldname = 'fk_address';
1977 1977
 
1978 1978
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ".$fieldname." = ".$id;
1979
-		$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
1979
+		$sql .= " WHERE rowid = ".$this->id." AND fk_statut = 0";
1980 1980
 
1981 1981
 		if ($this->db->query($sql))
1982 1982
 		{
@@ -1985,7 +1985,7 @@  discard block
 block discarded – undo
1985 1985
 		}
1986 1986
 		else
1987 1987
 		{
1988
-			$this->error=$this->db->error();
1988
+			$this->error = $this->db->error();
1989 1989
 			dol_syslog(get_class($this).'::setDeliveryAddress Erreur '.$sql.' - '.$this->error);
1990 1990
 			return -1;
1991 1991
 		}
@@ -2001,29 +2001,29 @@  discard block
 block discarded – undo
2001 2001
 	 *
2002 2002
 	 *  @return     int              1 if OK, 0 if KO
2003 2003
 	 */
2004
-	function setShippingMethod($shipping_method_id, $notrigger=false, $userused=null)
2004
+	function setShippingMethod($shipping_method_id, $notrigger = false, $userused = null)
2005 2005
 	{
2006 2006
         global $user;
2007 2007
 
2008
-        if (empty($userused)) $userused=$user;
2008
+        if (empty($userused)) $userused = $user;
2009 2009
 
2010 2010
         $error = 0;
2011 2011
 
2012
-		if (! $this->table_element) {
2013
-			dol_syslog(get_class($this)."::setShippingMethod was called on objet with property table_element not defined",LOG_ERR);
2012
+		if (!$this->table_element) {
2013
+			dol_syslog(get_class($this)."::setShippingMethod was called on objet with property table_element not defined", LOG_ERR);
2014 2014
 			return -1;
2015 2015
 		}
2016 2016
 
2017 2017
         $this->db->begin();
2018 2018
 
2019
-		if ($shipping_method_id<0) $shipping_method_id='NULL';
2019
+		if ($shipping_method_id < 0) $shipping_method_id = 'NULL';
2020 2020
 		dol_syslog(get_class($this).'::setShippingMethod('.$shipping_method_id.')');
2021 2021
 
2022 2022
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2023
-		$sql.= " SET fk_shipping_method = ".$shipping_method_id;
2024
-		$sql.= " WHERE rowid=".$this->id;
2023
+		$sql .= " SET fk_shipping_method = ".$shipping_method_id;
2024
+		$sql .= " WHERE rowid=".$this->id;
2025 2025
         $resql = $this->db->query($sql);
2026
-		if (! $resql) {
2026
+		if (!$resql) {
2027 2027
 			dol_syslog(get_class($this).'::setShippingMethod Error ', LOG_DEBUG);
2028 2028
 			$this->error = $this->db->lasterror();
2029 2029
 			$error++;
@@ -2031,8 +2031,8 @@  discard block
 block discarded – undo
2031 2031
             if (!$notrigger)
2032 2032
             {
2033 2033
                 // Call trigger
2034
-                $this->context=array('shippingmethodupdate'=>1);
2035
-                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2034
+                $this->context = array('shippingmethodupdate'=>1);
2035
+                $result = $this->call_trigger(strtoupper(get_class($this)).'_MODIFY', $userused);
2036 2036
                 if ($result < 0) $error++;
2037 2037
                 // End call trigger
2038 2038
             }
@@ -2042,7 +2042,7 @@  discard block
 block discarded – undo
2042 2042
             $this->db->rollback();
2043 2043
             return -1;
2044 2044
         } else {
2045
-            $this->shipping_method_id = ($shipping_method_id=='NULL')?null:$shipping_method_id;
2045
+            $this->shipping_method_id = ($shipping_method_id == 'NULL') ?null:$shipping_method_id;
2046 2046
             $this->db->commit();
2047 2047
             return 1;
2048 2048
         }
@@ -2057,23 +2057,23 @@  discard block
 block discarded – undo
2057 2057
 	 */
2058 2058
 	function setWarehouse($warehouse_id)
2059 2059
 	{
2060
-		if (! $this->table_element) {
2061
-			dol_syslog(get_class($this)."::setWarehouse was called on objet with property table_element not defined",LOG_ERR);
2060
+		if (!$this->table_element) {
2061
+			dol_syslog(get_class($this)."::setWarehouse was called on objet with property table_element not defined", LOG_ERR);
2062 2062
 			return -1;
2063 2063
 		}
2064
-		if ($warehouse_id<0) $warehouse_id='NULL';
2064
+		if ($warehouse_id < 0) $warehouse_id = 'NULL';
2065 2065
 		dol_syslog(get_class($this).'::setWarehouse('.$warehouse_id.')');
2066 2066
 
2067 2067
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2068
-		$sql.= " SET fk_warehouse = ".$warehouse_id;
2069
-		$sql.= " WHERE rowid=".$this->id;
2068
+		$sql .= " SET fk_warehouse = ".$warehouse_id;
2069
+		$sql .= " WHERE rowid=".$this->id;
2070 2070
 
2071 2071
 		if ($this->db->query($sql)) {
2072
-			$this->warehouse_id = ($warehouse_id=='NULL')?null:$warehouse_id;
2072
+			$this->warehouse_id = ($warehouse_id == 'NULL') ?null:$warehouse_id;
2073 2073
 			return 1;
2074 2074
 		} else {
2075 2075
 			dol_syslog(get_class($this).'::setWarehouse Error ', LOG_DEBUG);
2076
-			$this->error=$this->db->error();
2076
+			$this->error = $this->db->error();
2077 2077
 			return 0;
2078 2078
 		}
2079 2079
 	}
@@ -2088,25 +2088,25 @@  discard block
 block discarded – undo
2088 2088
 	 */
2089 2089
 	function setDocModel($user, $modelpdf)
2090 2090
 	{
2091
-		if (! $this->table_element)
2091
+		if (!$this->table_element)
2092 2092
 		{
2093
-			dol_syslog(get_class($this)."::setDocModel was called on objet with property table_element not defined",LOG_ERR);
2093
+			dol_syslog(get_class($this)."::setDocModel was called on objet with property table_element not defined", LOG_ERR);
2094 2094
 			return -1;
2095 2095
 		}
2096 2096
 
2097
-		$newmodelpdf=dol_trunc($modelpdf,255);
2097
+		$newmodelpdf = dol_trunc($modelpdf, 255);
2098 2098
 
2099 2099
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2100
-		$sql.= " SET model_pdf = '".$this->db->escape($newmodelpdf)."'";
2101
-		$sql.= " WHERE rowid = ".$this->id;
2100
+		$sql .= " SET model_pdf = '".$this->db->escape($newmodelpdf)."'";
2101
+		$sql .= " WHERE rowid = ".$this->id;
2102 2102
 		// if ($this->element == 'facture') $sql.= " AND fk_statut < 2";
2103 2103
 		// if ($this->element == 'propal')  $sql.= " AND fk_statut = 0";
2104 2104
 
2105 2105
 		dol_syslog(get_class($this)."::setDocModel", LOG_DEBUG);
2106
-		$resql=$this->db->query($sql);
2106
+		$resql = $this->db->query($sql);
2107 2107
 		if ($resql)
2108 2108
 		{
2109
-			$this->modelpdf=$modelpdf;
2109
+			$this->modelpdf = $modelpdf;
2110 2110
 			return 1;
2111 2111
 		}
2112 2112
 		else
@@ -2125,29 +2125,29 @@  discard block
 block discarded – undo
2125 2125
 	 *  @param      User	$userused		Object user
2126 2126
 	 *  @return		int				1 if OK, 0 if KO
2127 2127
 	 */
2128
-	function setBankAccount($fk_account, $notrigger=false, $userused=null)
2128
+	function setBankAccount($fk_account, $notrigger = false, $userused = null)
2129 2129
 	{
2130 2130
         global $user;
2131 2131
 
2132
-        if (empty($userused)) $userused=$user;
2132
+        if (empty($userused)) $userused = $user;
2133 2133
 
2134 2134
         $error = 0;
2135 2135
 
2136
-		if (! $this->table_element) {
2137
-			dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined",LOG_ERR);
2136
+		if (!$this->table_element) {
2137
+			dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined", LOG_ERR);
2138 2138
 			return -1;
2139 2139
 		}
2140 2140
         $this->db->begin();
2141 2141
 
2142
-		if ($fk_account<0) $fk_account='NULL';
2142
+		if ($fk_account < 0) $fk_account = 'NULL';
2143 2143
 		dol_syslog(get_class($this).'::setBankAccount('.$fk_account.')');
2144 2144
 
2145 2145
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2146
-		$sql.= " SET fk_account = ".$fk_account;
2147
-		$sql.= " WHERE rowid=".$this->id;
2146
+		$sql .= " SET fk_account = ".$fk_account;
2147
+		$sql .= " WHERE rowid=".$this->id;
2148 2148
 
2149 2149
         $resql = $this->db->query($sql);
2150
-        if (! $resql)
2150
+        if (!$resql)
2151 2151
         {
2152 2152
             dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error());
2153 2153
             $this->error = $this->db->lasterror();
@@ -2158,8 +2158,8 @@  discard block
 block discarded – undo
2158 2158
             if (!$notrigger)
2159 2159
             {
2160 2160
                 // Call trigger
2161
-                $this->context=array('bankaccountupdate'=>1);
2162
-                $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2161
+                $this->context = array('bankaccountupdate'=>1);
2162
+                $result = $this->call_trigger(strtoupper(get_class($this)).'_MODIFY', $userused);
2163 2163
                 if ($result < 0) $error++;
2164 2164
                 // End call trigger
2165 2165
             }
@@ -2171,7 +2171,7 @@  discard block
 block discarded – undo
2171 2171
         }
2172 2172
         else
2173 2173
         {
2174
-            $this->fk_account = ($fk_account=='NULL')?null:$fk_account;
2174
+            $this->fk_account = ($fk_account == 'NULL') ?null:$fk_account;
2175 2175
             $this->db->commit();
2176 2176
             return 1;
2177 2177
         }
@@ -2190,26 +2190,26 @@  discard block
 block discarded – undo
2190 2190
 	 * 	@param		boolean		$fk_parent_line    Table with fk_parent_line field or not
2191 2191
 	 * 	@return		int                            <0 if KO, >0 if OK
2192 2192
 	 */
2193
-	function line_order($renum=false, $rowidorder='ASC', $fk_parent_line=true)
2193
+	function line_order($renum = false, $rowidorder = 'ASC', $fk_parent_line = true)
2194 2194
 	{
2195 2195
         // phpcs:enable
2196
-		if (! $this->table_element_line)
2196
+		if (!$this->table_element_line)
2197 2197
 		{
2198
-			dol_syslog(get_class($this)."::line_order was called on objet with property table_element_line not defined",LOG_ERR);
2198
+			dol_syslog(get_class($this)."::line_order was called on objet with property table_element_line not defined", LOG_ERR);
2199 2199
 			return -1;
2200 2200
 		}
2201
-		if (! $this->fk_element)
2201
+		if (!$this->fk_element)
2202 2202
 		{
2203
-			dol_syslog(get_class($this)."::line_order was called on objet with property fk_element not defined",LOG_ERR);
2203
+			dol_syslog(get_class($this)."::line_order was called on objet with property fk_element not defined", LOG_ERR);
2204 2204
 			return -1;
2205 2205
 		}
2206 2206
 
2207 2207
 		// Count number of lines to reorder (according to choice $renum)
2208
-		$nl=0;
2208
+		$nl = 0;
2209 2209
 		$sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2210
-		$sql.= ' WHERE '.$this->fk_element.'='.$this->id;
2211
-		if (! $renum) $sql.= ' AND rang = 0';
2212
-		if ($renum) $sql.= ' AND rang <> 0';
2210
+		$sql .= ' WHERE '.$this->fk_element.'='.$this->id;
2211
+		if (!$renum) $sql .= ' AND rang = 0';
2212
+		if ($renum) $sql .= ' AND rang <> 0';
2213 2213
 
2214 2214
 		dol_syslog(get_class($this)."::line_order", LOG_DEBUG);
2215 2215
 		$resql = $this->db->query($sql);
@@ -2223,28 +2223,28 @@  discard block
 block discarded – undo
2223 2223
 		{
2224 2224
 			// The goal of this part is to reorder all lines, with all children lines sharing the same
2225 2225
 			// counter that parents.
2226
-			$rows=array();
2226
+			$rows = array();
2227 2227
 
2228 2228
 			// We first search all lines that are parent lines (for multilevel details lines)
2229 2229
 			$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2230
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2231
-			if ($fk_parent_line) $sql.= ' AND fk_parent_line IS NULL';
2232
-			$sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
2230
+			$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2231
+			if ($fk_parent_line) $sql .= ' AND fk_parent_line IS NULL';
2232
+			$sql .= ' ORDER BY rang ASC, rowid '.$rowidorder;
2233 2233
 
2234 2234
 			dol_syslog(get_class($this)."::line_order search all parent lines", LOG_DEBUG);
2235 2235
 			$resql = $this->db->query($sql);
2236 2236
 			if ($resql)
2237 2237
 			{
2238
-				$i=0;
2238
+				$i = 0;
2239 2239
 				$num = $this->db->num_rows($resql);
2240 2240
 				while ($i < $num)
2241 2241
 				{
2242 2242
 					$row = $this->db->fetch_row($resql);
2243
-					$rows[] = $row[0];	// Add parent line into array rows
2243
+					$rows[] = $row[0]; // Add parent line into array rows
2244 2244
 					$childrens = $this->getChildrenOfLine($row[0]);
2245
-					if (! empty($childrens))
2245
+					if (!empty($childrens))
2246 2246
 					{
2247
-						foreach($childrens as $child)
2247
+						foreach ($childrens as $child)
2248 2248
 						{
2249 2249
 							array_push($rows, $child);
2250 2250
 						}
@@ -2253,11 +2253,11 @@  discard block
 block discarded – undo
2253 2253
 				}
2254 2254
 
2255 2255
 				// Now we set a new number for each lines (parent and children with children included into parent tree)
2256
-				if (! empty($rows))
2256
+				if (!empty($rows))
2257 2257
 				{
2258
-					foreach($rows as $key => $row)
2258
+					foreach ($rows as $key => $row)
2259 2259
 					{
2260
-						$this->updateRangOfLine($row, ($key+1));
2260
+						$this->updateRangOfLine($row, ($key + 1));
2261 2261
 					}
2262 2262
 				}
2263 2263
 			}
@@ -2277,18 +2277,18 @@  discard block
 block discarded – undo
2277 2277
 	 */
2278 2278
 	function getChildrenOfLine($id)
2279 2279
 	{
2280
-		$rows=array();
2280
+		$rows = array();
2281 2281
 
2282 2282
 		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2283
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2284
-		$sql.= ' AND fk_parent_line = '.$id;
2285
-		$sql.= ' ORDER BY rang ASC';
2283
+		$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2284
+		$sql .= ' AND fk_parent_line = '.$id;
2285
+		$sql .= ' ORDER BY rang ASC';
2286 2286
 
2287 2287
 		dol_syslog(get_class($this)."::getChildrenOfLine search children lines for line ".$id."", LOG_DEBUG);
2288 2288
 		$resql = $this->db->query($sql);
2289 2289
 		if ($resql)
2290 2290
 		{
2291
-			$i=0;
2291
+			$i = 0;
2292 2292
 			$num = $this->db->num_rows($resql);
2293 2293
 			while ($i < $num)
2294 2294
 			{
@@ -2309,7 +2309,7 @@  discard block
 block discarded – undo
2309 2309
 	 * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2310 2310
 	 * 	@return	void
2311 2311
 	 */
2312
-	function line_up($rowid, $fk_parent_line=true)
2312
+	function line_up($rowid, $fk_parent_line = true)
2313 2313
 	{
2314 2314
         // phpcs:enable
2315 2315
 		$this->line_order(false, 'ASC', $fk_parent_line);
@@ -2329,7 +2329,7 @@  discard block
 block discarded – undo
2329 2329
 	 * 	@param	boolean		$fk_parent_line		Table with fk_parent_line field or not
2330 2330
 	 * 	@return	void
2331 2331
 	 */
2332
-	function line_down($rowid, $fk_parent_line=true)
2332
+	function line_down($rowid, $fk_parent_line = true)
2333 2333
 	{
2334 2334
         // phpcs:enable
2335 2335
 		$this->line_order(false, 'ASC', $fk_parent_line);
@@ -2351,16 +2351,16 @@  discard block
 block discarded – undo
2351 2351
 	 * 	@param	int		$rang		Position
2352 2352
 	 * 	@return	void
2353 2353
 	 */
2354
-	function updateRangOfLine($rowid,$rang)
2354
+	function updateRangOfLine($rowid, $rang)
2355 2355
 	{
2356 2356
 		$fieldposition = 'rang';
2357 2357
 		if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2358 2358
 
2359 2359
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2360
-		$sql.= ' WHERE rowid = '.$rowid;
2360
+		$sql .= ' WHERE rowid = '.$rowid;
2361 2361
 
2362 2362
 		dol_syslog(get_class($this)."::updateRangOfLine", LOG_DEBUG);
2363
-		if (! $this->db->query($sql))
2363
+		if (!$this->db->query($sql))
2364 2364
 		{
2365 2365
 			dol_print_error($this->db);
2366 2366
 		}
@@ -2377,9 +2377,9 @@  discard block
 block discarded – undo
2377 2377
 	{
2378 2378
         // phpcs:enable
2379 2379
 		$num = count($rows);
2380
-		for ($i = 0 ; $i < $num ; $i++)
2380
+		for ($i = 0; $i < $num; $i++)
2381 2381
 		{
2382
-			$this->updateRangOfLine($rows[$i], ($i+1));
2382
+			$this->updateRangOfLine($rows[$i], ($i + 1));
2383 2383
 		}
2384 2384
 	}
2385 2385
 
@@ -2390,21 +2390,21 @@  discard block
 block discarded – undo
2390 2390
 	 * 	@param	int		$rang		Position
2391 2391
 	 * 	@return	void
2392 2392
 	 */
2393
-	function updateLineUp($rowid,$rang)
2393
+	function updateLineUp($rowid, $rang)
2394 2394
 	{
2395 2395
 		if ($rang > 1)
2396 2396
 		{
2397 2397
 			$fieldposition = 'rang';
2398 2398
 			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2399 2399
 
2400
-			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang ;
2401
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2402
-			$sql.= ' AND rang = '.($rang - 1);
2403
-			if ($this->db->query($sql) )
2400
+			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2401
+			$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2402
+			$sql .= ' AND rang = '.($rang - 1);
2403
+			if ($this->db->query($sql))
2404 2404
 			{
2405 2405
 				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang - 1);
2406
-				$sql.= ' WHERE rowid = '.$rowid;
2407
-				if (! $this->db->query($sql) )
2406
+				$sql .= ' WHERE rowid = '.$rowid;
2407
+				if (!$this->db->query($sql))
2408 2408
 				{
2409 2409
 					dol_print_error($this->db);
2410 2410
 				}
@@ -2424,7 +2424,7 @@  discard block
 block discarded – undo
2424 2424
 	 * 	@param	int		$max		Max
2425 2425
 	 * 	@return	void
2426 2426
 	 */
2427
-	function updateLineDown($rowid,$rang,$max)
2427
+	function updateLineDown($rowid, $rang, $max)
2428 2428
 	{
2429 2429
 		if ($rang < $max)
2430 2430
 		{
@@ -2432,13 +2432,13 @@  discard block
 block discarded – undo
2432 2432
 			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2433 2433
 
2434 2434
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2435
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2436
-			$sql.= ' AND rang = '.($rang+1);
2437
-			if ($this->db->query($sql) )
2435
+			$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2436
+			$sql .= ' AND rang = '.($rang + 1);
2437
+			if ($this->db->query($sql))
2438 2438
 			{
2439
-				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang+1);
2440
-				$sql.= ' WHERE rowid = '.$rowid;
2441
-				if (! $this->db->query($sql) )
2439
+				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang + 1);
2440
+				$sql .= ' WHERE rowid = '.$rowid;
2441
+				if (!$this->db->query($sql))
2442 2442
 				{
2443 2443
 					dol_print_error($this->db);
2444 2444
 				}
@@ -2459,7 +2459,7 @@  discard block
 block discarded – undo
2459 2459
 	function getRangOfLine($rowid)
2460 2460
 	{
2461 2461
 		$sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2462
-		$sql.= ' WHERE rowid ='.$rowid;
2462
+		$sql .= ' WHERE rowid ='.$rowid;
2463 2463
 
2464 2464
 		dol_syslog(get_class($this)."::getRangOfLine", LOG_DEBUG);
2465 2465
 		$resql = $this->db->query($sql);
@@ -2479,8 +2479,8 @@  discard block
 block discarded – undo
2479 2479
 	function getIdOfLine($rang)
2480 2480
 	{
2481 2481
 		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2482
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2483
-		$sql.= ' AND rang = '.$rang;
2482
+		$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2483
+		$sql .= ' AND rang = '.$rang;
2484 2484
 		$resql = $this->db->query($sql);
2485 2485
 		if ($resql)
2486 2486
 		{
@@ -2496,22 +2496,22 @@  discard block
 block discarded – undo
2496 2496
 	 * 	@param		int		$fk_parent_line		Parent line id
2497 2497
 	 *  @return     int  			   			Max value of rang in table of lines
2498 2498
 	 */
2499
-	function line_max($fk_parent_line=0)
2499
+	function line_max($fk_parent_line = 0)
2500 2500
 	{
2501 2501
         // phpcs:enable
2502 2502
 		// Search the last rang with fk_parent_line
2503 2503
 		if ($fk_parent_line)
2504 2504
 		{
2505 2505
 			$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2506
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2507
-			$sql.= ' AND fk_parent_line = '.$fk_parent_line;
2506
+			$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2507
+			$sql .= ' AND fk_parent_line = '.$fk_parent_line;
2508 2508
 
2509 2509
 			dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2510 2510
 			$resql = $this->db->query($sql);
2511 2511
 			if ($resql)
2512 2512
 			{
2513 2513
 				$row = $this->db->fetch_row($resql);
2514
-				if (! empty($row[0]))
2514
+				if (!empty($row[0]))
2515 2515
 				{
2516 2516
 					return $row[0];
2517 2517
 				}
@@ -2525,7 +2525,7 @@  discard block
 block discarded – undo
2525 2525
 		else
2526 2526
 		{
2527 2527
 			$sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2528
-			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2528
+			$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2529 2529
 
2530 2530
 			dol_syslog(get_class($this)."::line_max", LOG_DEBUG);
2531 2531
 			$resql = $this->db->query($sql);
@@ -2547,15 +2547,15 @@  discard block
 block discarded – undo
2547 2547
 	function update_ref_ext($ref_ext)
2548 2548
 	{
2549 2549
         // phpcs:enable
2550
-		if (! $this->table_element)
2550
+		if (!$this->table_element)
2551 2551
 		{
2552 2552
 			dol_syslog(get_class($this)."::update_ref_ext was called on objet with property table_element not defined", LOG_ERR);
2553 2553
 			return -1;
2554 2554
 		}
2555 2555
 
2556 2556
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2557
-		$sql.= " SET ref_ext = '".$this->db->escape($ref_ext)."'";
2558
-		$sql.= " WHERE ".(isset($this->table_rowid)?$this->table_rowid:'rowid')." = ". $this->id;
2557
+		$sql .= " SET ref_ext = '".$this->db->escape($ref_ext)."'";
2558
+		$sql .= " WHERE ".(isset($this->table_rowid) ? $this->table_rowid : 'rowid')." = ".$this->id;
2559 2559
 
2560 2560
 		dol_syslog(get_class($this)."::update_ref_ext", LOG_DEBUG);
2561 2561
 		if ($this->db->query($sql))
@@ -2565,7 +2565,7 @@  discard block
 block discarded – undo
2565 2565
 		}
2566 2566
 		else
2567 2567
 		{
2568
-			$this->error=$this->db->error();
2568
+			$this->error = $this->db->error();
2569 2569
 			return -1;
2570 2570
 		}
2571 2571
 	}
@@ -2578,31 +2578,31 @@  discard block
 block discarded – undo
2578 2578
 	 *  @param		string		$suffix		'', '_public' or '_private'
2579 2579
 	 *  @return     int      		   		<0 if KO, >0 if OK
2580 2580
 	 */
2581
-	function update_note($note, $suffix='')
2581
+	function update_note($note, $suffix = '')
2582 2582
 	{
2583 2583
         // phpcs:enable
2584 2584
 		global $user;
2585 2585
 
2586
-		if (! $this->table_element)
2586
+		if (!$this->table_element)
2587 2587
 		{
2588
-			$this->error='update_note was called on objet with property table_element not defined';
2588
+			$this->error = 'update_note was called on objet with property table_element not defined';
2589 2589
 			dol_syslog(get_class($this)."::update_note was called on objet with property table_element not defined", LOG_ERR);
2590 2590
 			return -1;
2591 2591
 		}
2592
-		if (! in_array($suffix,array('','_public','_private')))
2592
+		if (!in_array($suffix, array('', '_public', '_private')))
2593 2593
 		{
2594
-			$this->error='update_note Parameter suffix must be empty, \'_private\' or \'_public\'';
2594
+			$this->error = 'update_note Parameter suffix must be empty, \'_private\' or \'_public\'';
2595 2595
 			dol_syslog(get_class($this)."::update_note Parameter suffix must be empty, '_private' or '_public'", LOG_ERR);
2596 2596
 			return -2;
2597 2597
 		}
2598 2598
 		// Special cas
2599 2599
 		//var_dump($this->table_element);exit;
2600
-		if ($this->table_element == 'product') $suffix='';
2600
+		if ($this->table_element == 'product') $suffix = '';
2601 2601
 
2602 2602
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2603
-		$sql.= " SET note".$suffix." = ".(!empty($note)?("'".$this->db->escape($note)."'"):"NULL");
2604
-		$sql.= " ,".(in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))?"fk_user_mod":"fk_user_modif")." = ".$user->id;
2605
-		$sql.= " WHERE rowid =". $this->id;
2603
+		$sql .= " SET note".$suffix." = ".(!empty($note) ? ("'".$this->db->escape($note)."'") : "NULL");
2604
+		$sql .= " ,".(in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment')) ? "fk_user_mod" : "fk_user_modif")." = ".$user->id;
2605
+		$sql .= " WHERE rowid =".$this->id;
2606 2606
 
2607 2607
 		dol_syslog(get_class($this)."::update_note", LOG_DEBUG);
2608 2608
 		if ($this->db->query($sql))
@@ -2611,14 +2611,14 @@  discard block
 block discarded – undo
2611 2611
 			else if ($suffix == '_private') $this->note_private = $note;
2612 2612
 			else
2613 2613
 			{
2614
-				$this->note = $note;      // deprecated
2614
+				$this->note = $note; // deprecated
2615 2615
 				$this->note_private = $note;
2616 2616
 			}
2617 2617
 			return 1;
2618 2618
 		}
2619 2619
 		else
2620 2620
 		{
2621
-			$this->error=$this->db->lasterror();
2621
+			$this->error = $this->db->lasterror();
2622 2622
 			return -1;
2623 2623
 		}
2624 2624
 	}
@@ -2635,7 +2635,7 @@  discard block
 block discarded – undo
2635 2635
 	function update_note_public($note)
2636 2636
 	{
2637 2637
         // phpcs:enable
2638
-		return $this->update_note($note,'_public');
2638
+		return $this->update_note($note, '_public');
2639 2639
 	}
2640 2640
 
2641 2641
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
@@ -2649,7 +2649,7 @@  discard block
 block discarded – undo
2649 2649
 	 *  @param	Societe	$seller				If roundingadjust is '0' or '1' or maybe 'auto', it means we recalculate total for lines before calculating total for object and for this, we need seller object.
2650 2650
 	 *	@return	int    			           	<0 if KO, >0 if OK
2651 2651
 	 */
2652
-	function update_price($exclspec=0,$roundingadjust='none',$nodatabaseupdate=0,$seller=null)
2652
+	function update_price($exclspec = 0, $roundingadjust = 'none', $nodatabaseupdate = 0, $seller = null)
2653 2653
 	{
2654 2654
         // phpcs:enable
2655 2655
 		global $conf, $hookmanager, $action;
@@ -2669,7 +2669,7 @@  discard block
 block discarded – undo
2669 2669
 		elseif ($this->element == 'supplier_proposal')
2670 2670
 			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
2671 2671
 
2672
-		if (! empty($MODULE)) {
2672
+		if (!empty($MODULE)) {
2673 2673
 			if (!empty(Globals::$conf->global->$MODULE)) {
2674 2674
                 $modsactivated = explode(',', Globals::$conf->global->$MODULE);
2675 2675
                 foreach ($modsactivated as $mod) {
@@ -2681,45 +2681,45 @@  discard block
 block discarded – undo
2681 2681
 
2682 2682
 		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
2683 2683
 
2684
-		if ($roundingadjust == '-1') $roundingadjust='auto';	// For backward compatibility
2684
+		if ($roundingadjust == '-1') $roundingadjust = 'auto'; // For backward compatibility
2685 2685
 
2686
-		$forcedroundingmode=$roundingadjust;
2686
+		$forcedroundingmode = $roundingadjust;
2687 2687
 		if ($forcedroundingmode == 'auto' && isset(Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND))
2688 2688
             $forcedroundingmode = Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND;
2689
-        elseif ($forcedroundingmode == 'auto') $forcedroundingmode='0';
2689
+        elseif ($forcedroundingmode == 'auto') $forcedroundingmode = '0';
2690 2690
 
2691
-		$error=0;
2691
+		$error = 0;
2692 2692
 
2693 2693
 		$multicurrency_tx = !empty($this->multicurrency_tx) ? $this->multicurrency_tx : 1;
2694 2694
 
2695 2695
 		// Define constants to find lines to sum
2696
-		$fieldtva='total_tva';
2697
-		$fieldlocaltax1='total_localtax1';
2698
-		$fieldlocaltax2='total_localtax2';
2699
-		$fieldup='subprice';
2696
+		$fieldtva = 'total_tva';
2697
+		$fieldlocaltax1 = 'total_localtax1';
2698
+		$fieldlocaltax2 = 'total_localtax2';
2699
+		$fieldup = 'subprice';
2700 2700
 		if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier')
2701 2701
 		{
2702
-			$fieldtva='tva';
2703
-			$fieldup='pu_ht';
2702
+			$fieldtva = 'tva';
2703
+			$fieldup = 'pu_ht';
2704 2704
 		}
2705 2705
 		if ($this->element == 'expensereport')
2706 2706
 		{
2707
-			$fieldup='value_unit';
2707
+			$fieldup = 'value_unit';
2708 2708
 		}
2709 2709
 
2710 2710
 		$sql = 'SELECT rowid, qty, '.$fieldup.' as up, remise_percent, total_ht, '.$fieldtva.' as total_tva, total_ttc, '.$fieldlocaltax1.' as total_localtax1, '.$fieldlocaltax2.' as total_localtax2,';
2711
-		$sql.= ' tva_tx as vatrate, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, info_bits, product_type';
2712
-			if ($this->table_element_line == 'facturedet') $sql.= ', situation_percent';
2713
-			$sql.= ', multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
2714
-		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2715
-		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2711
+		$sql .= ' tva_tx as vatrate, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, info_bits, product_type';
2712
+			if ($this->table_element_line == 'facturedet') $sql .= ', situation_percent';
2713
+			$sql .= ', multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
2714
+		$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2715
+		$sql .= ' WHERE '.$this->fk_element.' = '.$this->id;
2716 2716
 		if ($exclspec)
2717 2717
 		{
2718
-			$product_field='product_type';
2719
-			if ($this->table_element_line == 'contratdet') $product_field='';    // contratdet table has no product_type field
2720
-			if ($product_field) $sql.= ' AND '.$product_field.' <> 9';
2718
+			$product_field = 'product_type';
2719
+			if ($this->table_element_line == 'contratdet') $product_field = ''; // contratdet table has no product_type field
2720
+			if ($product_field) $sql .= ' AND '.$product_field.' <> 9';
2721 2721
 		}
2722
-		$sql.= ' ORDER by rowid';	// We want to be sure to always use same order of line to not change lines differently when option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND is used
2722
+		$sql .= ' ORDER by rowid'; // We want to be sure to always use same order of line to not change lines differently when option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND is used
2723 2723
 
2724 2724
 		dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2725 2725
 		$resql = $this->db->query($sql);
@@ -2733,7 +2733,7 @@  discard block
 block discarded – undo
2733 2733
 			$total_ht_by_vats  = array();
2734 2734
 			$total_tva_by_vats = array();
2735 2735
 			$total_ttc_by_vats = array();
2736
-			$this->multicurrency_total_ht	= 0;
2736
+			$this->multicurrency_total_ht = 0;
2737 2737
 			$this->multicurrency_total_tva	= 0;
2738 2738
 			$this->multicurrency_total_ttc	= 0;
2739 2739
 
@@ -2744,54 +2744,54 @@  discard block
 block discarded – undo
2744 2744
 				$obj = $this->db->fetch_object($resql);
2745 2745
 
2746 2746
 				// Note: There is no check on detail line and no check on total, if $forcedroundingmode = 'none'
2747
-				$parameters=array('fk_element' => $obj->rowid);
2747
+				$parameters = array('fk_element' => $obj->rowid);
2748 2748
 				$reshook = $hookmanager->executeHooks('changeRoundingMode', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
2749 2749
 
2750 2750
 				if (empty($reshook) && $forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
2751 2751
 				{
2752
-					$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
2753
-					$tmpcal=calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
2754
-					$diff=price2num($tmpcal[1] - $obj->total_tva, 'MT', 1);
2752
+					$localtax_array = array($obj->localtax1_type, $obj->localtax1_tx, $obj->localtax2_type, $obj->localtax2_tx);
2753
+					$tmpcal = calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
2754
+					$diff = price2num($tmpcal[1] - $obj->total_tva, 'MT', 1);
2755 2755
 					if ($diff)
2756 2756
 					{
2757
-						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".$tmpcal[1].", total_ttc = ".$tmpcal[2]." WHERE rowid = ".$obj->rowid;
2757
+						$sqlfix = "UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".$tmpcal[1].", total_ttc = ".$tmpcal[2]." WHERE rowid = ".$obj->rowid;
2758 2758
 						dol_syslog('We found unconsistent data into detailed line (difference of '.$diff.') for line rowid = '.$obj->rowid." (total vat of line calculated=".$tmpcal[1].", database=".$obj->total_tva."). We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2759
-								$resqlfix=$this->db->query($sqlfix);
2760
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2759
+								$resqlfix = $this->db->query($sqlfix);
2760
+								if (!$resqlfix) dol_print_error($this->db, 'Failed to update line');
2761 2761
 								$obj->total_tva = $tmpcal[1];
2762 2762
 								$obj->total_ttc = $tmpcal[2];
2763 2763
 						//
2764 2764
 					}
2765 2765
 				}
2766 2766
 
2767
-				$this->total_ht        += $obj->total_ht;		// The field visible at end of line detail
2767
+				$this->total_ht        += $obj->total_ht; // The field visible at end of line detail
2768 2768
 				$this->total_tva       += $obj->total_tva;
2769 2769
 				$this->total_localtax1 += $obj->total_localtax1;
2770 2770
 				$this->total_localtax2 += $obj->total_localtax2;
2771 2771
 				$this->total_ttc       += $obj->total_ttc;
2772
-				$this->multicurrency_total_ht        += $obj->multicurrency_total_ht;		// The field visible at end of line detail
2772
+				$this->multicurrency_total_ht        += $obj->multicurrency_total_ht; // The field visible at end of line detail
2773 2773
 				$this->multicurrency_total_tva       += $obj->multicurrency_total_tva;
2774 2774
 				$this->multicurrency_total_ttc       += $obj->multicurrency_total_ttc;
2775 2775
 
2776
-				if (! isset($total_ht_by_vats[$obj->vatrate]))  $total_ht_by_vats[$obj->vatrate]=0;
2777
-				if (! isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate]=0;
2778
-				if (! isset($total_ttc_by_vats[$obj->vatrate])) $total_ttc_by_vats[$obj->vatrate]=0;
2776
+				if (!isset($total_ht_by_vats[$obj->vatrate]))  $total_ht_by_vats[$obj->vatrate] = 0;
2777
+				if (!isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate] = 0;
2778
+				if (!isset($total_ttc_by_vats[$obj->vatrate])) $total_ttc_by_vats[$obj->vatrate] = 0;
2779 2779
 				$total_ht_by_vats[$obj->vatrate]  += $obj->total_ht;
2780 2780
 				$total_tva_by_vats[$obj->vatrate] += $obj->total_tva;
2781 2781
 				$total_ttc_by_vats[$obj->vatrate] += $obj->total_ttc;
2782 2782
 
2783 2783
 				if ($forcedroundingmode == '1')	// Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
2784 2784
 				{
2785
-					$tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
2786
-					$diff=price2num($total_tva_by_vats[$obj->vatrate]-$tmpvat, 'MT', 1);
2785
+					$tmpvat = price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
2786
+					$diff = price2num($total_tva_by_vats[$obj->vatrate] - $tmpvat, 'MT', 1);
2787 2787
 					//print 'Line '.$i.' rowid='.$obj->rowid.' vat_rate='.$obj->vatrate.' total_ht='.$obj->total_ht.' total_tva='.$obj->total_tva.' total_ttc='.$obj->total_ttc.' total_ht_by_vats='.$total_ht_by_vats[$obj->vatrate].' total_tva_by_vats='.$total_tva_by_vats[$obj->vatrate].' (new calculation = '.$tmpvat.') total_ttc_by_vats='.$total_ttc_by_vats[$obj->vatrate].($diff?" => DIFF":"")."<br>\n";
2788 2788
 					if ($diff)
2789 2789
 					{
2790 2790
 						if (abs($diff) > 0.1) { dol_syslog('A rounding difference was detected into TOTAL but is too high to be corrected', LOG_WARNING); exit; }
2791
-						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".($obj->total_tva - $diff).", total_ttc = ".($obj->total_ttc - $diff)." WHERE rowid = ".$obj->rowid;
2791
+						$sqlfix = "UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".($obj->total_tva - $diff).", total_ttc = ".($obj->total_ttc - $diff)." WHERE rowid = ".$obj->rowid;
2792 2792
 						dol_syslog('We found a difference of '.$diff.' for line rowid = '.$obj->rowid.". We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2793
-								$resqlfix=$this->db->query($sqlfix);
2794
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2793
+								$resqlfix = $this->db->query($sqlfix);
2794
+								if (!$resqlfix) dol_print_error($this->db, 'Failed to update line');
2795 2795
 								$this->total_tva -= $diff;
2796 2796
 								$this->total_ttc -= $diff;
2797 2797
 								$total_tva_by_vats[$obj->vatrate] -= $diff;
@@ -2803,11 +2803,11 @@  discard block
 block discarded – undo
2803 2803
 			}
2804 2804
 
2805 2805
 			// Add revenue stamp to total
2806
-			$this->total_ttc       			+= isset($this->revenuestamp)?$this->revenuestamp:0;
2807
-			$this->multicurrency_total_ttc  += isset($this->revenuestamp)?($this->revenuestamp * $multicurrency_tx):0;
2806
+			$this->total_ttc += isset($this->revenuestamp) ? $this->revenuestamp : 0;
2807
+			$this->multicurrency_total_ttc += isset($this->revenuestamp) ? ($this->revenuestamp * $multicurrency_tx) : 0;
2808 2808
 
2809 2809
 			// Situations totals
2810
-			if ($this->situation_cycle_ref && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits') && $this->type != $this::TYPE_CREDIT_NOTE )
2810
+			if ($this->situation_cycle_ref && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits') && $this->type != $this::TYPE_CREDIT_NOTE)
2811 2811
 			{
2812 2812
 				$prev_sits = $this->get_prev_sits();
2813 2813
 
@@ -2826,17 +2826,17 @@  discard block
 block discarded – undo
2826 2826
 			$this->db->free($resql);
2827 2827
 
2828 2828
 			// Now update global field total_ht, total_ttc and tva
2829
-			$fieldht='total_ht';
2830
-			$fieldtva='tva';
2831
-			$fieldlocaltax1='localtax1';
2832
-			$fieldlocaltax2='localtax2';
2833
-			$fieldttc='total_ttc';
2829
+			$fieldht = 'total_ht';
2830
+			$fieldtva = 'tva';
2831
+			$fieldlocaltax1 = 'localtax1';
2832
+			$fieldlocaltax2 = 'localtax2';
2833
+			$fieldttc = 'total_ttc';
2834 2834
 			// Specific code for backward compatibility with old field names
2835
-			if ($this->element == 'facture' || $this->element == 'facturerec')             $fieldht='total';
2836
-			if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva='total_tva';
2837
-			if ($this->element == 'propal')                                                $fieldttc='total';
2838
-			if ($this->element == 'expensereport')                                         $fieldtva='total_tva';
2839
-			if ($this->element == 'supplier_proposal')                                     $fieldttc='total';
2835
+			if ($this->element == 'facture' || $this->element == 'facturerec')             $fieldht = 'total';
2836
+			if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva = 'total_tva';
2837
+			if ($this->element == 'propal')                                                $fieldttc = 'total';
2838
+			if ($this->element == 'expensereport')                                         $fieldtva = 'total_tva';
2839
+			if ($this->element == 'supplier_proposal')                                     $fieldttc = 'total';
2840 2840
 
2841 2841
 			if (empty($nodatabaseupdate))
2842 2842
 			{
@@ -2853,16 +2853,16 @@  discard block
 block discarded – undo
2853 2853
 
2854 2854
 
2855 2855
 				dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
2856
-				$resql=$this->db->query($sql);
2857
-				if (! $resql)
2856
+				$resql = $this->db->query($sql);
2857
+				if (!$resql)
2858 2858
 				{
2859 2859
 					$error++;
2860
-					$this->error=$this->db->lasterror();
2861
-					$this->errors[]=$this->db->lasterror();
2860
+					$this->error = $this->db->lasterror();
2861
+					$this->errors[] = $this->db->lasterror();
2862 2862
 				}
2863 2863
 			}
2864 2864
 
2865
-			if (! $error)
2865
+			if (!$error)
2866 2866
 			{
2867 2867
 				return 1;
2868 2868
 			}
@@ -2873,7 +2873,7 @@  discard block
 block discarded – undo
2873 2873
 		}
2874 2874
 		else
2875 2875
 		{
2876
-			dol_print_error($this->db,'Bad request in update_price');
2876
+			dol_print_error($this->db, 'Bad request in update_price');
2877 2877
 			return -1;
2878 2878
 		}
2879 2879
 	}
@@ -2887,30 +2887,30 @@  discard block
 block discarded – undo
2887 2887
 	 *	@return		int					<=0 if KO, >0 if OK
2888 2888
 	 *	@see		fetchObjectLinked, updateObjectLinked, deleteObjectLinked
2889 2889
 	 */
2890
-	function add_object_linked($origin=null, $origin_id=null)
2890
+	function add_object_linked($origin = null, $origin_id = null)
2891 2891
 	{
2892 2892
         // phpcs:enable
2893
-		$origin = (! empty($origin) ? $origin : $this->origin);
2894
-		$origin_id = (! empty($origin_id) ? $origin_id : $this->origin_id);
2893
+		$origin = (!empty($origin) ? $origin : $this->origin);
2894
+		$origin_id = (!empty($origin_id) ? $origin_id : $this->origin_id);
2895 2895
 
2896 2896
 		// Special case
2897
-		if ($origin == 'order') $origin='commande';
2898
-		if ($origin == 'invoice') $origin='facture';
2899
-		if ($origin == 'invoice_template') $origin='facturerec';
2900
-    	if ($origin == 'supplierorder') $origin='order_supplier';
2897
+		if ($origin == 'order') $origin = 'commande';
2898
+		if ($origin == 'invoice') $origin = 'facture';
2899
+		if ($origin == 'invoice_template') $origin = 'facturerec';
2900
+    	if ($origin == 'supplierorder') $origin = 'order_supplier';
2901 2901
 		$this->db->begin();
2902 2902
 
2903 2903
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_element (";
2904
-		$sql.= "fk_source";
2905
-		$sql.= ", sourcetype";
2906
-		$sql.= ", fk_target";
2907
-		$sql.= ", targettype";
2908
-		$sql.= ") VALUES (";
2909
-		$sql.= $origin_id;
2910
-		$sql.= ", '".$this->db->escape($origin)."'";
2911
-		$sql.= ", ".$this->id;
2912
-		$sql.= ", '".$this->db->escape($this->element)."'";
2913
-		$sql.= ")";
2904
+		$sql .= "fk_source";
2905
+		$sql .= ", sourcetype";
2906
+		$sql .= ", fk_target";
2907
+		$sql .= ", targettype";
2908
+		$sql .= ") VALUES (";
2909
+		$sql .= $origin_id;
2910
+		$sql .= ", '".$this->db->escape($origin)."'";
2911
+		$sql .= ", ".$this->id;
2912
+		$sql .= ", '".$this->db->escape($this->element)."'";
2913
+		$sql .= ")";
2914 2914
 
2915 2915
 		dol_syslog(get_class($this)."::add_object_linked", LOG_DEBUG);
2916 2916
 		if ($this->db->query($sql))
@@ -2920,7 +2920,7 @@  discard block
 block discarded – undo
2920 2920
 	  	}
2921 2921
 	  	else
2922 2922
 	  	{
2923
-	  		$this->error=$this->db->lasterror();
2923
+	  		$this->error = $this->db->lasterror();
2924 2924
 	  		$this->db->rollback();
2925 2925
 	  		return 0;
2926 2926
 	  	}
@@ -2948,33 +2948,33 @@  discard block
 block discarded – undo
2948 2948
 	 *	@return int							<0 if KO, >0 if OK
2949 2949
 	 *  @see	add_object_linked, updateObjectLinked, deleteObjectLinked
2950 2950
 	 */
2951
-	function fetchObjectLinked($sourceid=null,$sourcetype='',$targetid=null,$targettype='',$clause='OR',$alsosametype=1,$orderby='sourcetype',$loadalsoobjects=1)
2951
+	function fetchObjectLinked($sourceid = null, $sourcetype = '', $targetid = null, $targettype = '', $clause = 'OR', $alsosametype = 1, $orderby = 'sourcetype', $loadalsoobjects = 1)
2952 2952
 	{
2953 2953
 		global $conf;
2954 2954
 
2955
-		$this->linkedObjectsIds=array();
2956
-		$this->linkedObjects=array();
2955
+		$this->linkedObjectsIds = array();
2956
+		$this->linkedObjects = array();
2957 2957
 
2958
-		$justsource=false;
2959
-		$justtarget=false;
2960
-		$withtargettype=false;
2961
-		$withsourcetype=false;
2958
+		$justsource = false;
2959
+		$justtarget = false;
2960
+		$withtargettype = false;
2961
+		$withsourcetype = false;
2962 2962
 
2963
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid))
2963
+		if (!empty($sourceid) && !empty($sourcetype) && empty($targetid))
2964 2964
 		{
2965
-			$justsource=true;  // the source (id and type) is a search criteria
2966
-			if (! empty($targettype)) $withtargettype=true;
2965
+			$justsource = true; // the source (id and type) is a search criteria
2966
+			if (!empty($targettype)) $withtargettype = true;
2967 2967
 		}
2968
-		if (! empty($targetid) && ! empty($targettype) && empty($sourceid))
2968
+		if (!empty($targetid) && !empty($targettype) && empty($sourceid))
2969 2969
 		{
2970
-			$justtarget=true;  // the target (id and type) is a search criteria
2971
-			if (! empty($sourcetype)) $withsourcetype=true;
2970
+			$justtarget = true; // the target (id and type) is a search criteria
2971
+			if (!empty($sourcetype)) $withsourcetype = true;
2972 2972
 		}
2973 2973
 
2974
-		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
2975
-		$targetid = (! empty($targetid) ? $targetid : $this->id);
2976
-		$sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
2977
-		$targettype = (! empty($targettype) ? $targettype : $this->element);
2974
+		$sourceid = (!empty($sourceid) ? $sourceid : $this->id);
2975
+		$targetid = (!empty($targetid) ? $targetid : $this->id);
2976
+		$sourcetype = (!empty($sourcetype) ? $sourcetype : $this->element);
2977
+		$targettype = (!empty($targettype) ? $targettype : $this->element);
2978 2978
 
2979 2979
 		/*if (empty($sourceid) && empty($targetid))
2980 2980
 		 {
@@ -2984,25 +2984,25 @@  discard block
 block discarded – undo
2984 2984
 
2985 2985
 		// Links between objects are stored in table element_element
2986 2986
 		$sql = 'SELECT rowid, fk_source, sourcetype, fk_target, targettype';
2987
-		$sql.= ' FROM '.MAIN_DB_PREFIX.'element_element';
2988
-		$sql.= " WHERE ";
2987
+		$sql .= ' FROM '.MAIN_DB_PREFIX.'element_element';
2988
+		$sql .= " WHERE ";
2989 2989
 		if ($justsource || $justtarget)
2990 2990
 		{
2991 2991
 			if ($justsource)
2992 2992
 			{
2993
-				$sql.= "fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."'";
2994
-				if ($withtargettype) $sql.= " AND targettype = '".$targettype."'";
2993
+				$sql .= "fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."'";
2994
+				if ($withtargettype) $sql .= " AND targettype = '".$targettype."'";
2995 2995
 			}
2996 2996
 			else if ($justtarget)
2997 2997
 			{
2998
-				$sql.= "fk_target = ".$targetid." AND targettype = '".$targettype."'";
2999
-				if ($withsourcetype) $sql.= " AND sourcetype = '".$sourcetype."'";
2998
+				$sql .= "fk_target = ".$targetid." AND targettype = '".$targettype."'";
2999
+				if ($withsourcetype) $sql .= " AND sourcetype = '".$sourcetype."'";
3000 3000
 			}
3001 3001
 		}
3002 3002
 		else
3003 3003
 		{
3004
-			$sql.= "(fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."')";
3005
-			$sql.= " ".$clause." (fk_target = ".$targetid." AND targettype = '".$targettype."')";
3004
+			$sql .= "(fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."')";
3005
+			$sql .= " ".$clause." (fk_target = ".$targetid." AND targettype = '".$targettype."')";
3006 3006
 		}
3007 3007
 		$sql .= ' ORDER BY '.$orderby;
3008 3008
 
@@ -3019,36 +3019,36 @@  discard block
 block discarded – undo
3019 3019
 				{
3020 3020
 					if ($justsource)
3021 3021
 					{
3022
-						$this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3022
+						$this->linkedObjectsIds[$obj->targettype][$obj->rowid] = $obj->fk_target;
3023 3023
 					}
3024 3024
 					else if ($justtarget)
3025 3025
 					{
3026
-						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3026
+						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid] = $obj->fk_source;
3027 3027
 					}
3028 3028
 				}
3029 3029
 				else
3030 3030
 				{
3031 3031
 					if ($obj->fk_source == $sourceid && $obj->sourcetype == $sourcetype)
3032 3032
 					{
3033
-						$this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3033
+						$this->linkedObjectsIds[$obj->targettype][$obj->rowid] = $obj->fk_target;
3034 3034
 					}
3035 3035
 					if ($obj->fk_target == $targetid && $obj->targettype == $targettype)
3036 3036
 					{
3037
-						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3037
+						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid] = $obj->fk_source;
3038 3038
 					}
3039 3039
 				}
3040 3040
 				$i++;
3041 3041
 			}
3042 3042
 
3043
-			if (! empty($this->linkedObjectsIds))
3043
+			if (!empty($this->linkedObjectsIds))
3044 3044
 			{
3045 3045
 				$tmparray = $this->linkedObjectsIds;
3046
-				foreach($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3046
+				foreach ($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3047 3047
 				{
3048 3048
 					// Parse element/subelement (ex: project_task, cabinetmed_consultation, ...)
3049 3049
 					$module = $element = $subelement = $objecttype;
3050 3050
 					if ($objecttype != 'supplier_proposal' && $objecttype != 'order_supplier' && $objecttype != 'invoice_supplier'
3051
-						&& preg_match('/^([^_]+)_([^_]+)/i',$objecttype,$regs))
3051
+						&& preg_match('/^([^_]+)_([^_]+)/i', $objecttype, $regs))
3052 3052
 					{
3053 3053
 						$module = $element = $regs[1];
3054 3054
 						$subelement = $regs[2];
@@ -3056,31 +3056,31 @@  discard block
 block discarded – undo
3056 3056
 
3057 3057
 					$classpath = $element.'/class';
3058 3058
 					// To work with non standard classpath or module name
3059
-					if ($objecttype == 'facture')			{
3059
+					if ($objecttype == 'facture') {
3060 3060
 						$classpath = 'compta/facture/class';
3061 3061
 					}
3062
-					else if ($objecttype == 'facturerec')			{
3062
+					else if ($objecttype == 'facturerec') {
3063 3063
 						$classpath = 'compta/facture/class'; $module = 'facture';
3064 3064
 					}
3065
-					else if ($objecttype == 'propal')			{
3065
+					else if ($objecttype == 'propal') {
3066 3066
 						$classpath = 'comm/propal/class';
3067 3067
 					}
3068
-					else if ($objecttype == 'supplier_proposal')			{
3068
+					else if ($objecttype == 'supplier_proposal') {
3069 3069
 						$classpath = 'supplier_proposal/class';
3070 3070
 					}
3071
-					else if ($objecttype == 'shipping')			{
3071
+					else if ($objecttype == 'shipping') {
3072 3072
 						$classpath = 'expedition/class'; $subelement = 'expedition'; $module = 'expedition_bon';
3073 3073
 					}
3074
-					else if ($objecttype == 'delivery')			{
3074
+					else if ($objecttype == 'delivery') {
3075 3075
 						$classpath = 'livraison/class'; $subelement = 'livraison'; $module = 'livraison_bon';
3076 3076
 					}
3077
-					else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier')	{
3077
+					else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier') {
3078 3078
 						$classpath = 'fourn/class'; $module = 'fournisseur';
3079 3079
 					}
3080
-					else if ($objecttype == 'fichinter')			{
3080
+					else if ($objecttype == 'fichinter') {
3081 3081
 						$classpath = 'fichinter/class'; $subelement = 'fichinter'; $module = 'ficheinter';
3082 3082
 					}
3083
-					else if ($objecttype == 'subscription')			{
3083
+					else if ($objecttype == 'subscription') {
3084 3084
 						$classpath = 'adherents/class'; $module = 'adherent';
3085 3085
 					}
3086 3086
 
@@ -3093,16 +3093,16 @@  discard block
 block discarded – undo
3093 3093
 					else if ($objecttype == 'invoice_supplier') {
3094 3094
 						$classfile = 'fournisseur.facture'; $classname = 'FactureFournisseur';
3095 3095
 					}
3096
-					else if ($objecttype == 'order_supplier')   {
3096
+					else if ($objecttype == 'order_supplier') {
3097 3097
 						$classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur';
3098 3098
 					}
3099
-					else if ($objecttype == 'supplier_proposal')   {
3099
+					else if ($objecttype == 'supplier_proposal') {
3100 3100
 						$classfile = 'supplier_proposal'; $classname = 'SupplierProposal';
3101 3101
 					}
3102
-					else if ($objecttype == 'facturerec')   {
3102
+					else if ($objecttype == 'facturerec') {
3103 3103
 						$classfile = 'facture-rec'; $classname = 'FactureRec';
3104 3104
 					}
3105
-					else if ($objecttype == 'subscription')   {
3105
+					else if ($objecttype == 'subscription') {
3106 3106
 						$classfile = 'subscription'; $classname = 'Subscription';
3107 3107
 					}
3108 3108
 
@@ -3114,7 +3114,7 @@  discard block
 block discarded – undo
3114 3114
 							//print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
3115 3115
 							if (class_exists($classname))
3116 3116
 							{
3117
-								foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
3117
+								foreach ($objectids as $i => $objectid)	// $i is rowid into llx_element_element
3118 3118
 								{
3119 3119
 									$object = new $classname($this->db);
3120 3120
 									$ret = $object->fetch($objectid);
@@ -3151,28 +3151,28 @@  discard block
 block discarded – undo
3151 3151
 	 *	@return							int	>0 if OK, <0 if KO
3152 3152
 	 *	@see	add_object_linked, fetObjectLinked, deleteObjectLinked
3153 3153
 	 */
3154
-	function updateObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='')
3154
+	function updateObjectLinked($sourceid = null, $sourcetype = '', $targetid = null, $targettype = '')
3155 3155
 	{
3156
-		$updatesource=false;
3157
-		$updatetarget=false;
3156
+		$updatesource = false;
3157
+		$updatetarget = false;
3158 3158
 
3159
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $updatesource=true;
3160
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $updatetarget=true;
3159
+		if (!empty($sourceid) && !empty($sourcetype) && empty($targetid) && empty($targettype)) $updatesource = true;
3160
+		else if (empty($sourceid) && empty($sourcetype) && !empty($targetid) && !empty($targettype)) $updatetarget = true;
3161 3161
 
3162 3162
 		$sql = "UPDATE ".MAIN_DB_PREFIX."element_element SET ";
3163 3163
 		if ($updatesource)
3164 3164
 		{
3165
-			$sql.= "fk_source = ".$sourceid;
3166
-			$sql.= ", sourcetype = '".$this->db->escape($sourcetype)."'";
3167
-			$sql.= " WHERE fk_target = ".$this->id;
3168
-			$sql.= " AND targettype = '".$this->db->escape($this->element)."'";
3165
+			$sql .= "fk_source = ".$sourceid;
3166
+			$sql .= ", sourcetype = '".$this->db->escape($sourcetype)."'";
3167
+			$sql .= " WHERE fk_target = ".$this->id;
3168
+			$sql .= " AND targettype = '".$this->db->escape($this->element)."'";
3169 3169
 		}
3170 3170
 		else if ($updatetarget)
3171 3171
 		{
3172
-			$sql.= "fk_target = ".$targetid;
3173
-			$sql.= ", targettype = '".$this->db->escape($targettype)."'";
3174
-			$sql.= " WHERE fk_source = ".$this->id;
3175
-			$sql.= " AND sourcetype = '".$this->db->escape($this->element)."'";
3172
+			$sql .= "fk_target = ".$targetid;
3173
+			$sql .= ", targettype = '".$this->db->escape($targettype)."'";
3174
+			$sql .= " WHERE fk_source = ".$this->id;
3175
+			$sql .= " AND sourcetype = '".$this->db->escape($this->element)."'";
3176 3176
 		}
3177 3177
 
3178 3178
 		dol_syslog(get_class($this)."::updateObjectLinked", LOG_DEBUG);
@@ -3182,7 +3182,7 @@  discard block
 block discarded – undo
3182 3182
 		}
3183 3183
 		else
3184 3184
 		{
3185
-			$this->error=$this->db->lasterror();
3185
+			$this->error = $this->db->lasterror();
3186 3186
 			return -1;
3187 3187
 		}
3188 3188
 	}
@@ -3198,42 +3198,42 @@  discard block
 block discarded – undo
3198 3198
 	 *	@return     					int	>0 if OK, <0 if KO
3199 3199
 	 *	@see	add_object_linked, updateObjectLinked, fetchObjectLinked
3200 3200
 	 */
3201
-	function deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid='')
3201
+	function deleteObjectLinked($sourceid = null, $sourcetype = '', $targetid = null, $targettype = '', $rowid = '')
3202 3202
 	{
3203
-		$deletesource=false;
3204
-		$deletetarget=false;
3203
+		$deletesource = false;
3204
+		$deletetarget = false;
3205 3205
 
3206
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $deletesource=true;
3207
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $deletetarget=true;
3206
+		if (!empty($sourceid) && !empty($sourcetype) && empty($targetid) && empty($targettype)) $deletesource = true;
3207
+		else if (empty($sourceid) && empty($sourcetype) && !empty($targetid) && !empty($targettype)) $deletetarget = true;
3208 3208
 
3209
-		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
3210
-		$sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
3211
-		$targetid = (! empty($targetid) ? $targetid : $this->id);
3212
-		$targettype = (! empty($targettype) ? $targettype : $this->element);
3209
+		$sourceid = (!empty($sourceid) ? $sourceid : $this->id);
3210
+		$sourcetype = (!empty($sourcetype) ? $sourcetype : $this->element);
3211
+		$targetid = (!empty($targetid) ? $targetid : $this->id);
3212
+		$targettype = (!empty($targettype) ? $targettype : $this->element);
3213 3213
 
3214 3214
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_element";
3215
-		$sql.= " WHERE";
3215
+		$sql .= " WHERE";
3216 3216
 		if ($rowid > 0)
3217 3217
 		{
3218
-			$sql.=" rowid = ".$rowid;
3218
+			$sql .= " rowid = ".$rowid;
3219 3219
 		}
3220 3220
 		else
3221 3221
 		{
3222 3222
 			if ($deletesource)
3223 3223
 			{
3224
-				$sql.= " fk_source = ".$sourceid." AND sourcetype = '".$this->db->escape($sourcetype)."'";
3225
-				$sql.= " AND fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."'";
3224
+				$sql .= " fk_source = ".$sourceid." AND sourcetype = '".$this->db->escape($sourcetype)."'";
3225
+				$sql .= " AND fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."'";
3226 3226
 			}
3227 3227
 			else if ($deletetarget)
3228 3228
 			{
3229
-				$sql.= " fk_target = ".$targetid." AND targettype = '".$this->db->escape($targettype)."'";
3230
-				$sql.= " AND fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."'";
3229
+				$sql .= " fk_target = ".$targetid." AND targettype = '".$this->db->escape($targettype)."'";
3230
+				$sql .= " AND fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."'";
3231 3231
 			}
3232 3232
 			else
3233 3233
 			{
3234
-				$sql.= " (fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."')";
3235
-				$sql.= " OR";
3236
-				$sql.= " (fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."')";
3234
+				$sql .= " (fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."')";
3235
+				$sql .= " OR";
3236
+				$sql .= " (fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."')";
3237 3237
 			}
3238 3238
 		}
3239 3239
 
@@ -3244,8 +3244,8 @@  discard block
 block discarded – undo
3244 3244
 		}
3245 3245
 		else
3246 3246
 		{
3247
-			$this->error=$this->db->lasterror();
3248
-			$this->errors[]=$this->error;
3247
+			$this->error = $this->db->lasterror();
3248
+			$this->errors[] = $this->error;
3249 3249
 			return -1;
3250 3250
 		}
3251 3251
 	}
@@ -3259,30 +3259,30 @@  discard block
 block discarded – undo
3259 3259
 	 *      @param	string	$trigkey		Trigger key to use for trigger
3260 3260
 	 *      @return int						<0 if KO, >0 if OK
3261 3261
 	 */
3262
-	function setStatut($status, $elementId=null, $elementType='', $trigkey='')
3262
+	function setStatut($status, $elementId = null, $elementType = '', $trigkey = '')
3263 3263
 	{
3264
-		global $user,$langs,$conf;
3264
+		global $user, $langs, $conf;
3265 3265
 
3266
-		$savElementId=$elementId;  // To be used later to know if we were using the method using the id of this or not.
3266
+		$savElementId = $elementId; // To be used later to know if we were using the method using the id of this or not.
3267 3267
 
3268
-		$elementId = (!empty($elementId)?$elementId:$this->id);
3269
-		$elementTable = (!empty($elementType)?$elementType:$this->table_element);
3268
+		$elementId = (!empty($elementId) ? $elementId : $this->id);
3269
+		$elementTable = (!empty($elementType) ? $elementType : $this->table_element);
3270 3270
 
3271 3271
 		$this->db->begin();
3272 3272
 
3273
-		$fieldstatus="fk_statut";
3274
-		if ($elementTable == 'facture_rec') $fieldstatus="suspended";
3275
-		if ($elementTable == 'mailing') $fieldstatus="statut";
3276
-		if ($elementTable == 'cronjob') $fieldstatus="status";
3277
-		if ($elementTable == 'user') $fieldstatus="statut";
3278
-		if ($elementTable == 'expensereport') $fieldstatus="fk_statut";
3279
-		if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status";
3273
+		$fieldstatus = "fk_statut";
3274
+		if ($elementTable == 'facture_rec') $fieldstatus = "suspended";
3275
+		if ($elementTable == 'mailing') $fieldstatus = "statut";
3276
+		if ($elementTable == 'cronjob') $fieldstatus = "status";
3277
+		if ($elementTable == 'user') $fieldstatus = "statut";
3278
+		if ($elementTable == 'expensereport') $fieldstatus = "fk_statut";
3279
+		if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus = "status";
3280 3280
 
3281 3281
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable;
3282
-		$sql.= " SET ".$fieldstatus." = ".$status;
3282
+		$sql .= " SET ".$fieldstatus." = ".$status;
3283 3283
 		// If status = 1 = validated, update also fk_user_valid
3284
-		if ($status == 1 && $elementTable == 'expensereport') $sql.=", fk_user_valid = ".$user->id;
3285
-		$sql.= " WHERE rowid=".$elementId;
3284
+		if ($status == 1 && $elementTable == 'expensereport') $sql .= ", fk_user_valid = ".$user->id;
3285
+		$sql .= " WHERE rowid=".$elementId;
3286 3286
 
3287 3287
 		dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
3288 3288
 		if ($this->db->query($sql))
@@ -3292,27 +3292,27 @@  discard block
 block discarded – undo
3292 3292
 			// Try autoset of trigkey
3293 3293
 			if (empty($trigkey))
3294 3294
 			{
3295
-				if ($this->element == 'supplier_proposal' && $status == 2) $trigkey='SUPPLIER_PROPOSAL_SIGN';   // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3296
-				if ($this->element == 'supplier_proposal' && $status == 3) $trigkey='SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3297
-				if ($this->element == 'supplier_proposal' && $status == 4) $trigkey='SUPPLIER_PROPOSAL_CLOSE';  // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3298
-				if ($this->element == 'fichinter' && $status == 3) $trigkey='FICHINTER_CLASSIFY_DONE';
3299
-				if ($this->element == 'fichinter' && $status == 2) $trigkey='FICHINTER_CLASSIFY_BILLED';
3300
-				if ($this->element == 'fichinter' && $status == 1) $trigkey='FICHINTER_CLASSIFY_UNBILLED';
3295
+				if ($this->element == 'supplier_proposal' && $status == 2) $trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3296
+				if ($this->element == 'supplier_proposal' && $status == 3) $trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3297
+				if ($this->element == 'supplier_proposal' && $status == 4) $trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3298
+				if ($this->element == 'fichinter' && $status == 3) $trigkey = 'FICHINTER_CLASSIFY_DONE';
3299
+				if ($this->element == 'fichinter' && $status == 2) $trigkey = 'FICHINTER_CLASSIFY_BILLED';
3300
+				if ($this->element == 'fichinter' && $status == 1) $trigkey = 'FICHINTER_CLASSIFY_UNBILLED';
3301 3301
 			}
3302 3302
 
3303 3303
 			if ($trigkey)
3304 3304
 			{
3305 3305
 				// Appel des triggers
3306
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
3307
-				$interface=new Interfaces($this->db);
3308
-				$result=$interface->run_triggers($trigkey,$this,$user,$langs,$conf);
3306
+				include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php';
3307
+				$interface = new Interfaces($this->db);
3308
+				$result = $interface->run_triggers($trigkey, $this, $user, $langs, $conf);
3309 3309
 				if ($result < 0) {
3310
-					$error++; $this->errors=$interface->errors;
3310
+					$error++; $this->errors = $interface->errors;
3311 3311
 				}
3312 3312
 				// Fin appel triggers
3313 3313
 			}
3314 3314
 
3315
-			if (! $error)
3315
+			if (!$error)
3316 3316
 			{
3317 3317
 				$this->db->commit();
3318 3318
 
@@ -3327,13 +3327,13 @@  discard block
 block discarded – undo
3327 3327
 			else
3328 3328
 			{
3329 3329
 				$this->db->rollback();
3330
-				dol_syslog(get_class($this)."::setStatus ".$this->error,LOG_ERR);
3330
+				dol_syslog(get_class($this)."::setStatus ".$this->error, LOG_ERR);
3331 3331
 				return -1;
3332 3332
 			}
3333 3333
 		}
3334 3334
 		else
3335 3335
 		{
3336
-			$this->error=$this->db->lasterror();
3336
+			$this->error = $this->db->lasterror();
3337 3337
 			$this->db->rollback();
3338 3338
 			return -1;
3339 3339
 		}
@@ -3347,22 +3347,22 @@  discard block
 block discarded – undo
3347 3347
 	 *  @param      string	$ref    Record ref
3348 3348
 	 *  @return		int				<0 if KO, 0 if nothing done, >0 if OK
3349 3349
 	 */
3350
-	function getCanvas($id=0,$ref='')
3350
+	function getCanvas($id = 0, $ref = '')
3351 3351
 	{
3352 3352
 		global $conf;
3353 3353
 
3354 3354
 		if (empty($id) && empty($ref)) return 0;
3355 3355
 		if (!empty(Globals::$conf->global->MAIN_DISABLE_CANVAS))
3356
-            return 0;    // To increase speed. Not enabled by default.
3356
+            return 0; // To increase speed. Not enabled by default.
3357 3357
 
3358 3358
             // Clean parameters
3359 3359
 		$ref = trim($ref);
3360 3360
 
3361 3361
 		$sql = "SELECT rowid, canvas";
3362
-		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
3363
-		$sql.= " WHERE entity IN (".getEntity($this->element).")";
3364
-		if (! empty($id))  $sql.= " AND rowid = ".$id;
3365
-		if (! empty($ref)) $sql.= " AND ref = '".$this->db->escape($ref)."'";
3362
+		$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element;
3363
+		$sql .= " WHERE entity IN (".getEntity($this->element).")";
3364
+		if (!empty($id))  $sql .= " AND rowid = ".$id;
3365
+		if (!empty($ref)) $sql .= " AND ref = '".$this->db->escape($ref)."'";
3366 3366
 
3367 3367
 		$resql = $this->db->query($sql);
3368 3368
 		if ($resql)
@@ -3370,7 +3370,7 @@  discard block
 block discarded – undo
3370 3370
 			$obj = $this->db->fetch_object($resql);
3371 3371
 			if ($obj)
3372 3372
 			{
3373
-				$this->canvas   = $obj->canvas;
3373
+				$this->canvas = $obj->canvas;
3374 3374
 				return 1;
3375 3375
 			}
3376 3376
 			else return 0;
@@ -3392,7 +3392,7 @@  discard block
 block discarded – undo
3392 3392
 	function getSpecialCode($lineid)
3393 3393
 	{
3394 3394
 		$sql = 'SELECT special_code FROM '.MAIN_DB_PREFIX.$this->table_element_line;
3395
-		$sql.= ' WHERE rowid = '.$lineid;
3395
+		$sql .= ' WHERE rowid = '.$lineid;
3396 3396
 		$resql = $this->db->query($sql);
3397 3397
 		if ($resql)
3398 3398
 		{
@@ -3408,14 +3408,14 @@  discard block
 block discarded – undo
3408 3408
 	 *  @param	int		$id			Force id of object
3409 3409
 	 *  @return	int					<0 if KO, 0 if not used, >0 if already used
3410 3410
 	 */
3411
-	function isObjectUsed($id=0)
3411
+	function isObjectUsed($id = 0)
3412 3412
 	{
3413 3413
 		global $langs;
3414 3414
 
3415
-		if (empty($id)) $id=$this->id;
3415
+		if (empty($id)) $id = $this->id;
3416 3416
 
3417 3417
 		// Check parameters
3418
-		if (! isset($this->childtables) || ! is_array($this->childtables) || count($this->childtables) == 0)
3418
+		if (!isset($this->childtables) || !is_array($this->childtables) || count($this->childtables) == 0)
3419 3419
 		{
3420 3420
 			dol_print_error('Called isObjectUsed on a class with property this->childtables not defined');
3421 3421
 			return -1;
@@ -3423,24 +3423,24 @@  discard block
 block discarded – undo
3423 3423
 
3424 3424
 		$arraytoscan = $this->childtables;
3425 3425
 		// For backward compatibility, we check if array is old format array('table1', 'table2', ...)
3426
-		$tmparray=array_keys($this->childtables);
3426
+		$tmparray = array_keys($this->childtables);
3427 3427
 		if (is_numeric($tmparray[0]))
3428 3428
 		{
3429 3429
 			$arraytoscan = array_flip($this->childtables);
3430 3430
 		}
3431 3431
 
3432 3432
 		// Test if child exists
3433
-		$haschild=0;
3434
-		foreach($arraytoscan as $table => $elementname)
3433
+		$haschild = 0;
3434
+		foreach ($arraytoscan as $table => $elementname)
3435 3435
 		{
3436 3436
 			//print $id.'-'.$table.'-'.$elementname.'<br>';
3437 3437
 			// Check if third party can be deleted
3438 3438
 			$sql = "SELECT COUNT(*) as nb from ".MAIN_DB_PREFIX.$table;
3439
-			$sql.= " WHERE ".$this->fk_element." = ".$id;
3440
-			$resql=$this->db->query($sql);
3439
+			$sql .= " WHERE ".$this->fk_element." = ".$id;
3440
+			$resql = $this->db->query($sql);
3441 3441
 			if ($resql)
3442 3442
 			{
3443
-				$obj=$this->db->fetch_object($resql);
3443
+				$obj = $this->db->fetch_object($resql);
3444 3444
 				if ($obj->nb > 0)
3445 3445
 				{
3446 3446
 					$langs->load("errors");
@@ -3448,24 +3448,24 @@  discard block
 block discarded – undo
3448 3448
 					$haschild += $obj->nb;
3449 3449
 					if (is_numeric($elementname))	// old usage
3450 3450
 					{
3451
-						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3451
+						$this->errors[] = $langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3452 3452
 					}
3453 3453
 					else	// new usage: $elementname=Translation key
3454 3454
 					{
3455
-						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $langs->transnoentitiesnoconv($elementname));
3455
+						$this->errors[] = $langs->trans("ErrorRecordHasAtLeastOneChildOfType", $langs->transnoentitiesnoconv($elementname));
3456 3456
 					}
3457
-					break;    // We found at least one, we stop here
3457
+					break; // We found at least one, we stop here
3458 3458
 				}
3459 3459
 			}
3460 3460
 			else
3461 3461
 			{
3462
-				$this->errors[]=$this->db->lasterror();
3462
+				$this->errors[] = $this->db->lasterror();
3463 3463
 				return -1;
3464 3464
 			}
3465 3465
 		}
3466 3466
 		if ($haschild > 0)
3467 3467
 		{
3468
-			$this->errors[]="ErrorRecordHasChildren";
3468
+			$this->errors[] = "ErrorRecordHasChildren";
3469 3469
 			return $haschild;
3470 3470
 		}
3471 3471
 		else return 0;
@@ -3477,18 +3477,18 @@  discard block
 block discarded – undo
3477 3477
 	 *	@param	int		$predefined		-1=All, 0=Count free product/service only, 1=Count predefined product/service only, 2=Count predefined product, 3=Count predefined service
3478 3478
 	 *  @return	int						<0 if KO, 0 if no predefined products, nb of lines with predefined products if found
3479 3479
 	 */
3480
-	function hasProductsOrServices($predefined=-1)
3480
+	function hasProductsOrServices($predefined = -1)
3481 3481
 	{
3482
-		$nb=0;
3482
+		$nb = 0;
3483 3483
 
3484
-		foreach($this->lines as $key => $val)
3484
+		foreach ($this->lines as $key => $val)
3485 3485
 		{
3486
-			$qualified=0;
3487
-			if ($predefined == -1) $qualified=1;
3488
-			if ($predefined == 1 && $val->fk_product > 0) $qualified=1;
3489
-			if ($predefined == 0 && $val->fk_product <= 0) $qualified=1;
3490
-			if ($predefined == 2 && $val->fk_product > 0 && $val->product_type==0) $qualified=1;
3491
-			if ($predefined == 3 && $val->fk_product > 0 && $val->product_type==1) $qualified=1;
3486
+			$qualified = 0;
3487
+			if ($predefined == -1) $qualified = 1;
3488
+			if ($predefined == 1 && $val->fk_product > 0) $qualified = 1;
3489
+			if ($predefined == 0 && $val->fk_product <= 0) $qualified = 1;
3490
+			if ($predefined == 2 && $val->fk_product > 0 && $val->product_type == 0) $qualified = 1;
3491
+			if ($predefined == 3 && $val->fk_product > 0 && $val->product_type == 1) $qualified = 1;
3492 3492
 			if ($qualified) $nb++;
3493 3493
 		}
3494 3494
 		dol_syslog(get_class($this).'::hasProductsOrServices we found '.$nb.' qualified lines of products/servcies');
@@ -3502,24 +3502,24 @@  discard block
 block discarded – undo
3502 3502
 	 */
3503 3503
 	function getTotalDiscount()
3504 3504
 	{
3505
-		$total_discount=0.00;
3505
+		$total_discount = 0.00;
3506 3506
 
3507 3507
 		$sql = "SELECT subprice as pu_ht, qty, remise_percent, total_ht";
3508
-		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element."det";
3509
-		$sql.= " WHERE ".$this->fk_element." = ".$this->id;
3508
+		$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element."det";
3509
+		$sql .= " WHERE ".$this->fk_element." = ".$this->id;
3510 3510
 
3511 3511
 		dol_syslog(get_class($this).'::getTotalDiscount', LOG_DEBUG);
3512 3512
 		$resql = $this->db->query($sql);
3513 3513
 		if ($resql)
3514 3514
 		{
3515
-			$num=$this->db->num_rows($resql);
3516
-			$i=0;
3515
+			$num = $this->db->num_rows($resql);
3516
+			$i = 0;
3517 3517
 			while ($i < $num)
3518 3518
 			{
3519 3519
 				$obj = $this->db->fetch_object($resql);
3520 3520
 
3521 3521
 				$pu_ht = $obj->pu_ht;
3522
-				$qty= $obj->qty;
3522
+				$qty = $obj->qty;
3523 3523
 				$total_ht = $obj->total_ht;
3524 3524
 
3525 3525
 				$total_discount_line = floatval(price2num(($pu_ht * $qty) - $total_ht, 'MT'));
@@ -3553,17 +3553,17 @@  discard block
 block discarded – undo
3553 3553
 		{
3554 3554
 			if (isset($line->qty_asked))
3555 3555
 			{
3556
-				if (empty($totalOrdered)) $totalOrdered=0;  // Avoid warning because $totalOrdered is ''
3557
-				$totalOrdered+=$line->qty_asked;    // defined for shipment only
3556
+				if (empty($totalOrdered)) $totalOrdered = 0; // Avoid warning because $totalOrdered is ''
3557
+				$totalOrdered += $line->qty_asked; // defined for shipment only
3558 3558
 			}
3559 3559
 			if (isset($line->qty_shipped))
3560 3560
 			{
3561
-				if (empty($totalToShip)) $totalToShip=0;    // Avoid warning because $totalToShip is ''
3562
-				$totalToShip+=$line->qty_shipped;   // defined for shipment only
3563
-            }else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
3561
+				if (empty($totalToShip)) $totalToShip = 0; // Avoid warning because $totalToShip is ''
3562
+				$totalToShip += $line->qty_shipped; // defined for shipment only
3563
+            } else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
3564 3564
             {
3565
-                if (empty($totalToShip)) $totalToShip=0;
3566
-                $totalToShip+=$line->qty;   // defined for reception only
3565
+                if (empty($totalToShip)) $totalToShip = 0;
3566
+                $totalToShip += $line->qty; // defined for reception only
3567 3567
 			}
3568 3568
 
3569 3569
 			// Define qty, weight, volume, weight_units, volume_units
@@ -3576,27 +3576,27 @@  discard block
 block discarded – undo
3576 3576
 			}
3577 3577
 
3578 3578
 			$weight = $line->weight ? $line->weight : 0;
3579
-            ($weight==0 && !empty($line->product->weight))? $weight=$line->product->weight: 0;
3579
+            ($weight == 0 && !empty($line->product->weight)) ? $weight = $line->product->weight : 0;
3580 3580
 			$volume = $line->volume ? $line->volume : 0;
3581
-			($volume==0 && !empty($line->product->volume))? $volume=$line->product->volume: 0;
3581
+			($volume == 0 && !empty($line->product->volume)) ? $volume = $line->product->volume : 0;
3582 3582
 
3583
-			$weight_units=$line->weight_units;
3584
-			($weight_units==0 && !empty($line->product->weight_units))? $weight_units=$line->product->weight_units: 0;
3585
-			$volume_units=$line->volume_units;
3586
-			($volume_units==0 && !empty($line->product->volume_units))? $volume_units=$line->product->volume_units: 0;
3583
+			$weight_units = $line->weight_units;
3584
+			($weight_units == 0 && !empty($line->product->weight_units)) ? $weight_units = $line->product->weight_units : 0;
3585
+			$volume_units = $line->volume_units;
3586
+			($volume_units == 0 && !empty($line->product->volume_units)) ? $volume_units = $line->product->volume_units : 0;
3587 3587
 
3588
-			$weightUnit=0;
3589
-			$volumeUnit=0;
3590
-			if (! empty($weight_units)) $weightUnit = $weight_units;
3591
-			if (! empty($volume_units)) $volumeUnit = $volume_units;
3588
+			$weightUnit = 0;
3589
+			$volumeUnit = 0;
3590
+			if (!empty($weight_units)) $weightUnit = $weight_units;
3591
+			if (!empty($volume_units)) $volumeUnit = $volume_units;
3592 3592
 
3593
-			if (empty($totalWeight)) $totalWeight=0;  // Avoid warning because $totalWeight is ''
3594
-			if (empty($totalVolume)) $totalVolume=0;  // Avoid warning because $totalVolume is ''
3593
+			if (empty($totalWeight)) $totalWeight = 0; // Avoid warning because $totalWeight is ''
3594
+			if (empty($totalVolume)) $totalVolume = 0; // Avoid warning because $totalVolume is ''
3595 3595
 
3596 3596
 			//var_dump($line->volume_units);
3597 3597
 			if ($weight_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3598 3598
 			{
3599
-				$trueWeightUnit=pow(10, $weightUnit);
3599
+				$trueWeightUnit = pow(10, $weightUnit);
3600 3600
 				$totalWeight += $weight * $qty * $trueWeightUnit;
3601 3601
 			}
3602 3602
 			else {
@@ -3610,18 +3610,18 @@  discard block
 block discarded – undo
3610 3610
 			$totalWeight += $weight * $qty * $trueWeightUnit;
3611 3611
 		}
3612 3612
 		else
3613
-					$totalWeight += $weight * $qty;   // This may be wrong if we mix different units
3613
+					$totalWeight += $weight * $qty; // This may be wrong if we mix different units
3614 3614
 			}
3615 3615
 			if ($volume_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3616 3616
 			{
3617 3617
 				//print $line->volume."x".$line->volume_units."x".($line->volume_units < 50)."x".$volumeUnit;
3618
-				$trueVolumeUnit=pow(10, $volumeUnit);
3618
+				$trueVolumeUnit = pow(10, $volumeUnit);
3619 3619
 				//print $line->volume;
3620 3620
 				$totalVolume += $volume * $qty * $trueVolumeUnit;
3621 3621
 			}
3622 3622
 			else
3623 3623
 			{
3624
-				$totalVolume += $volume * $qty;   // This may be wrong if we mix different units
3624
+				$totalVolume += $volume * $qty; // This may be wrong if we mix different units
3625 3625
 			}
3626 3626
 		}
3627 3627
 
@@ -3638,17 +3638,17 @@  discard block
 block discarded – undo
3638 3638
 	{
3639 3639
 		$this->db->begin();
3640 3640
 
3641
-		$extraparams = (! empty($this->extraparams) ? json_encode($this->extraparams) : null);
3641
+		$extraparams = (!empty($this->extraparams) ? json_encode($this->extraparams) : null);
3642 3642
 
3643 3643
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3644
-		$sql.= " SET extraparams = ".(! empty($extraparams) ? "'".$this->db->escape($extraparams)."'" : "null");
3645
-		$sql.= " WHERE rowid = ".$this->id;
3644
+		$sql .= " SET extraparams = ".(!empty($extraparams) ? "'".$this->db->escape($extraparams)."'" : "null");
3645
+		$sql .= " WHERE rowid = ".$this->id;
3646 3646
 
3647 3647
 		dol_syslog(get_class($this)."::setExtraParameters", LOG_DEBUG);
3648 3648
 		$resql = $this->db->query($sql);
3649
-		if (! $resql)
3649
+		if (!$resql)
3650 3650
 		{
3651
-			$this->error=$this->db->lasterror();
3651
+			$this->error = $this->db->lasterror();
3652 3652
 			$this->db->rollback();
3653 3653
 			return -1;
3654 3654
 		}
@@ -3683,7 +3683,7 @@  discard block
 block discarded – undo
3683 3683
 			}
3684 3684
 		}
3685 3685
 
3686
-		$out .= (($res->code && $this->location_incoterms)?' - ':'').$this->location_incoterms;
3686
+		$out .= (($res->code && $this->location_incoterms) ? ' - ' : '').$this->location_incoterms;
3687 3687
 
3688 3688
 		return $out;
3689 3689
 	}
@@ -3729,11 +3729,11 @@  discard block
 block discarded – undo
3729 3729
 		if ($this->id && $this->table_element)
3730 3730
 		{
3731 3731
 			$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
3732
-			$sql.= " SET fk_incoterms = ".($id_incoterm > 0 ? $id_incoterm : "null");
3733
-			$sql.= ", location_incoterms = ".($id_incoterm > 0 ? "'".$this->db->escape($location)."'" : "null");
3734
-			$sql.= " WHERE rowid = " . $this->id;
3732
+			$sql .= " SET fk_incoterms = ".($id_incoterm > 0 ? $id_incoterm : "null");
3733
+			$sql .= ", location_incoterms = ".($id_incoterm > 0 ? "'".$this->db->escape($location)."'" : "null");
3734
+			$sql .= " WHERE rowid = ".$this->id;
3735 3735
 			dol_syslog(get_class($this).'::setIncoterms', LOG_DEBUG);
3736
-			$resql=$this->db->query($sql);
3736
+			$resql = $this->db->query($sql);
3737 3737
 			if ($resql)
3738 3738
 			{
3739 3739
 				$this->fk_incoterms = $id_incoterm;
@@ -3774,24 +3774,24 @@  discard block
 block discarded – undo
3774 3774
 	 */
3775 3775
 	function formAddObjectLine($dateSelector, $seller, $buyer)
3776 3776
 	{
3777
-		global $conf,$user,$langs,$object,$hookmanager;
3778
-		global $form,$bcnd,$var;
3777
+		global $conf, $user, $langs, $object, $hookmanager;
3778
+		global $form, $bcnd, $var;
3779 3779
 
3780 3780
 		// Line extrafield
3781 3781
 		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3782 3782
 		$extrafieldsline = new AlExtraFields($this->db);
3783
-        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3783
+        $extralabelslines = $extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3784 3784
 
3785 3785
 		// Output template part (modules that overwrite templates must declare this into descriptor)
3786 3786
 		// Use global variables + $dateSelector + $seller and $buyer
3787 3787
 		$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
3788
-        foreach($dirtpls as $reldir)
3788
+        foreach ($dirtpls as $reldir)
3789 3789
 		{
3790 3790
 			$tpl = dol_buildpath($reldir.'/objectline_create.tpl.php');
3791 3791
 			if (empty(Globals::$conf->file->strict_mode)) {
3792
-                $res=@include $tpl;
3792
+                $res = @include $tpl;
3793 3793
 			} else {
3794
-				$res=include $tpl; // for debug
3794
+				$res = include $tpl; // for debug
3795 3795
 			}
3796 3796
 			if ($res) break;
3797 3797
 		}
@@ -3815,14 +3815,14 @@  discard block
 block discarded – undo
3815 3815
 	 *	@param  int	    	$dateSelector      	1=Show also date range input fields
3816 3816
 	 *	@return	void
3817 3817
 	 */
3818
-	function printObjectLines($action, $seller, $buyer, $selected=0, $dateSelector=0)
3818
+	function printObjectLines($action, $seller, $buyer, $selected = 0, $dateSelector = 0)
3819 3819
 	{
3820 3820
 		global $conf, $hookmanager, $langs, $user;
3821 3821
 		// TODO We should not use global var for this !
3822 3822
 		global $inputalsopricewithtax, $usemargins, $disableedit, $disablemove, $disableremove, $outputalsopricetotalwithtax;
3823 3823
 
3824 3824
 		// Define usemargins
3825
-		$usemargins=0;
3825
+		$usemargins = 0;
3826 3826
 		if (!empty(Globals::$conf->margin->enabled) && !empty($this->element) && in_array($this->element, array('facture', 'propal', 'commande')))
3827 3827
             $usemargins = 1;
3828 3828
 
@@ -3831,9 +3831,9 @@  discard block
 block discarded – undo
3831 3831
 		// Line extrafield
3832 3832
 		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
3833 3833
 		$extrafieldsline = new AlExtraFields($this->db);
3834
-        $extralabelslines=$extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3834
+        $extralabelslines = $extrafieldsline->fetch_name_optionals_label($this->table_element_line);
3835 3835
 
3836
-		$parameters = array('num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3836
+		$parameters = array('num'=>$num, 'i'=>$i, 'dateSelector'=>$dateSelector, 'seller'=>$seller, 'buyer'=>$buyer, 'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3837 3837
 		$reshook = $hookmanager->executeHooks('printObjectLineTitle', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
3838 3838
 		if (empty($reshook))
3839 3839
 		{
@@ -3862,7 +3862,7 @@  discard block
 block discarded – undo
3862 3862
 
3863 3863
 			// Multicurrency
3864 3864
 			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3865
-                print '<td class="linecoluht_currency" align="right" width="80">' . $langs->trans('PriceUHTCurrency', $this->multicurrency_code) . '</td>';
3865
+                print '<td class="linecoluht_currency" align="right" width="80">'.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).'</td>';
3866 3866
 
3867 3867
             if ($inputalsopricewithtax) print '<td align="right" width="80">'.$langs->trans('PriceUTTC').'</td>';
3868 3868
 
@@ -3877,7 +3877,7 @@  discard block
 block discarded – undo
3877 3877
 			print '<td class="linecoldiscount" align="right">'.$langs->trans('ReductionShort').'</td>';
3878 3878
 
3879 3879
 			if ($this->situation_cycle_ref) {
3880
-				print '<td class="linecolcycleref" align="right">' . $langs->trans('Progress') . '</td>';
3880
+				print '<td class="linecolcycleref" align="right">'.$langs->trans('Progress').'</td>';
3881 3881
 			}
3882 3882
 
3883 3883
 			if ($usemargins && !empty(Globals::$conf->margin->enabled) && empty($user->societe_id)) {
@@ -3900,17 +3900,17 @@  discard block
 block discarded – undo
3900 3900
 
3901 3901
 			// Multicurrency
3902 3902
 			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3903
-                print '<td class="linecoltotalht_currency" align="right">' . $langs->trans('TotalHTShortCurrency', $this->multicurrency_code) . '</td>';
3903
+                print '<td class="linecoltotalht_currency" align="right">'.$langs->trans('TotalHTShortCurrency', $this->multicurrency_code).'</td>';
3904 3904
 
3905 3905
             if ($outputalsopricetotalwithtax) print '<td align="right" width="80">'.$langs->trans('TotalTTCShort').'</td>';
3906 3906
 
3907
-			print '<td class="linecoledit"></td>';  // No width to allow autodim
3907
+			print '<td class="linecoledit"></td>'; // No width to allow autodim
3908 3908
 
3909 3909
 			print '<td class="linecoldelete" width="10"></td>';
3910 3910
 
3911 3911
 			print '<td class="linecolmove" width="10"></td>';
3912 3912
 
3913
-			if($action == 'selectlines')
3913
+			if ($action == 'selectlines')
3914 3914
 			{
3915 3915
 			    print '<td class="linecolcheckall" align="center">';
3916 3916
 			    print '<input type="checkbox" class="linecheckboxtoggle" />';
@@ -3923,7 +3923,7 @@  discard block
 block discarded – undo
3923 3923
 		}
3924 3924
 
3925 3925
 		$var = true;
3926
-		$i	 = 0;
3926
+		$i = 0;
3927 3927
 
3928 3928
 		print "<tbody>\n";
3929 3929
 		foreach ($this->lines as $line)
@@ -3936,18 +3936,18 @@  discard block
 block discarded – undo
3936 3936
 			{
3937 3937
 				if (empty($line->fk_parent_line))
3938 3938
 				{
3939
-					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3940
-					$reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3939
+					$parameters = array('line'=>$line, 'var'=>$var, 'num'=>$num, 'i'=>$i, 'dateSelector'=>$dateSelector, 'seller'=>$seller, 'buyer'=>$buyer, 'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
3940
+					$reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
3941 3941
 				}
3942 3942
 				else
3943 3943
 				{
3944
-					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline, 'fk_parent_line'=>$line->fk_parent_line);
3945
-					$reshook = $hookmanager->executeHooks('printObjectSubLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3944
+					$parameters = array('line'=>$line, 'var'=>$var, 'num'=>$num, 'i'=>$i, 'dateSelector'=>$dateSelector, 'seller'=>$seller, 'buyer'=>$buyer, 'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline, 'fk_parent_line'=>$line->fk_parent_line);
3945
+					$reshook = $hookmanager->executeHooks('printObjectSubLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
3946 3946
 				}
3947 3947
 			}
3948 3948
 			if (empty($reshook))
3949 3949
 			{
3950
-				$this->printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected,$extrafieldsline);
3950
+				$this->printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected, $extrafieldsline);
3951 3951
 			}
3952 3952
 
3953 3953
 			$i++;
@@ -3971,23 +3971,23 @@  discard block
 block discarded – undo
3971 3971
 	 *  @param  int			$extrafieldsline	Object of extrafield line attribute
3972 3972
 	 *	@return	void
3973 3973
 	 */
3974
-	function printObjectLine($action,$line,$var,$num,$i,$dateSelector,$seller,$buyer,$selected=0,$extrafieldsline=0)
3974
+	function printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected = 0, $extrafieldsline = 0)
3975 3975
 	{
3976
-		global $conf,$langs,$user,$object,$hookmanager;
3977
-		global $form,$bc,$bcdd;
3978
-		global $object_rights, $disableedit, $disablemove, $disableremove;   // TODO We should not use global var for this !
3976
+		global $conf, $langs, $user, $object, $hookmanager;
3977
+		global $form, $bc, $bcdd;
3978
+		global $object_rights, $disableedit, $disablemove, $disableremove; // TODO We should not use global var for this !
3979 3979
 
3980 3980
 		$object_rights = $this->getRights();
3981 3981
 
3982
-		$element=$this->element;
3982
+		$element = $this->element;
3983 3983
 
3984
-		$text=''; $description=''; $type=0;
3984
+		$text = ''; $description = ''; $type = 0;
3985 3985
 
3986 3986
 		// Show product and description
3987
-		$type=(! empty($line->product_type)?$line->product_type:$line->fk_product_type);
3987
+		$type = (!empty($line->product_type) ? $line->product_type : $line->fk_product_type);
3988 3988
 		// Try to enhance type detection using date_start and date_end for free lines where type was not saved.
3989
-		if (! empty($line->date_start)) $type=1; // deprecated
3990
-		if (! empty($line->date_end)) $type=1; // deprecated
3989
+		if (!empty($line->date_start)) $type = 1; // deprecated
3990
+		if (!empty($line->date_end)) $type = 1; // deprecated
3991 3991
 
3992 3992
 		// Ligne en mode visu
3993 3993
 		if ($action != 'editline' || $selected != $line->id)
@@ -4000,13 +4000,13 @@  discard block
 block discarded – undo
4000 4000
 
4001 4001
 				$product_static->ref = $line->ref; //can change ref in hook
4002 4002
 				$product_static->label = $line->label; //can change label in hook
4003
-				$text=$product_static->getNomUrl(1);
4003
+				$text = $product_static->getNomUrl(1);
4004 4004
 
4005 4005
 				// Define output language and label
4006 4006
 				if (!empty(Globals::$conf->global->MAIN_MULTILANGS)) {
4007
-					if (! is_object($this->thirdparty))
4007
+					if (!is_object($this->thirdparty))
4008 4008
 					{
4009
-						dol_print_error('','Error: Method printObjectLine was called on an object and object->fetch_thirdparty was not done before');
4009
+						dol_print_error('', 'Error: Method printObjectLine was called on an object and object->fetch_thirdparty was not done before');
4010 4010
 						return;
4011 4011
 					}
4012 4012
 
@@ -4014,39 +4014,39 @@  discard block
 block discarded – undo
4014 4014
 					$prod->fetch($line->fk_product);
4015 4015
 
4016 4016
 					$outputlangs = $langs;
4017
-					$newlang='';
4018
-					if (empty($newlang) && GETPOST('lang_id','aZ09')) $newlang=GETPOST('lang_id','aZ09');
4017
+					$newlang = '';
4018
+					if (empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09');
4019 4019
 					if (!empty(Globals::$conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang))
4020
-                        $newlang = $this->thirdparty->default_lang;  // For language to language of customer
4021
-                    if (! empty($newlang))
4020
+                        $newlang = $this->thirdparty->default_lang; // For language to language of customer
4021
+                    if (!empty($newlang))
4022 4022
 					{
4023
-						$outputlangs = new Translate("",$conf);
4023
+						$outputlangs = new Translate("", $conf);
4024 4024
 						$outputlangs->setDefaultLang($newlang);
4025 4025
 					}
4026 4026
 
4027
-					$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $line->product_label;
4027
+					$label = (!empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $line->product_label;
4028 4028
 				}
4029 4029
 				else
4030 4030
 				{
4031 4031
 					$label = $line->product_label;
4032 4032
 				}
4033 4033
 
4034
-				$text.= ' - '.(! empty($line->label)?$line->label:$label);
4034
+				$text .= ' - '.(!empty($line->label) ? $line->label : $label);
4035 4035
 				$description .= (!empty(Globals::$conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($line->description)); // Description is what to show on popup. We shown nothing if already into desc.
4036 4036
             }
4037 4037
 
4038
-			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
4038
+			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx / 100)), 'MU');
4039 4039
 
4040 4040
 			// Output template part (modules that overwrite templates must declare this into descriptor)
4041 4041
 			// Use global variables + $dateSelector + $seller and $buyer
4042 4042
 			$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4043
-            foreach($dirtpls as $reldir)
4043
+            foreach ($dirtpls as $reldir)
4044 4044
 			{
4045 4045
 				$tpl = dol_buildpath($reldir.'/objectline_view.tpl.php');
4046 4046
 				if (empty(Globals::$conf->file->strict_mode)) {
4047
-                    $res=@include $tpl;
4047
+                    $res = @include $tpl;
4048 4048
 				} else {
4049
-					$res=include $tpl; // for debug
4049
+					$res = include $tpl; // for debug
4050 4050
 				}
4051 4051
 				if ($res) break;
4052 4052
 			}
@@ -4055,21 +4055,21 @@  discard block
 block discarded – undo
4055 4055
 		// Ligne en mode update
4056 4056
 		if ($this->statut == 0 && $action == 'editline' && $selected == $line->id)
4057 4057
 		{
4058
-			$label = (! empty($line->label) ? $line->label : (($line->fk_product > 0) ? $line->product_label : ''));
4059
-			$placeholder=' placeholder="'.$langs->trans("Label").'"';
4058
+			$label = (!empty($line->label) ? $line->label : (($line->fk_product > 0) ? $line->product_label : ''));
4059
+			$placeholder = ' placeholder="'.$langs->trans("Label").'"';
4060 4060
 
4061
-			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx/100)), 'MU');
4061
+			$line->pu_ttc = price2num($line->subprice * (1 + ($line->tva_tx / 100)), 'MU');
4062 4062
 
4063 4063
 			// Output template part (modules that overwrite templates must declare this into descriptor)
4064 4064
 			// Use global variables + $dateSelector + $seller and $buyer
4065 4065
 			$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4066
-            foreach($dirtpls as $reldir)
4066
+            foreach ($dirtpls as $reldir)
4067 4067
 			{
4068 4068
 				$tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php');
4069 4069
 				if (empty(Globals::$conf->file->strict_mode)) {
4070
-                    $res=@include $tpl;
4070
+                    $res = @include $tpl;
4071 4071
 				} else {
4072
-					$res=include $tpl; // for debug
4072
+					$res = include $tpl; // for debug
4073 4073
 				}
4074 4074
 				if ($res) break;
4075 4075
 			}
@@ -4089,7 +4089,7 @@  discard block
 block discarded – undo
4089 4089
 	 *	@param	string		$restrictlist		''=All lines, 'services'=Restrict to services only
4090 4090
 	 *  @return	void
4091 4091
 	 */
4092
-	function printOriginLinesList($restrictlist='')
4092
+	function printOriginLinesList($restrictlist = '')
4093 4093
 	{
4094 4094
 		global $langs, $hookmanager, $conf;
4095 4095
 
@@ -4099,7 +4099,7 @@  discard block
 block discarded – undo
4099 4099
 		print '<td align="right">'.$langs->trans('VATRate').'</td>';
4100 4100
 		print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
4101 4101
 		if (!empty(Globals::$conf->multicurrency->enabled))
4102
-            print '<td align="right">' . $langs->trans('PriceUHTCurrency') . '</td>';
4102
+            print '<td align="right">'.$langs->trans('PriceUHTCurrency').'</td>';
4103 4103
         print '<td align="right">'.$langs->trans('Qty').'</td>';
4104 4104
 		if (Globals::$conf->global->PRODUCT_USE_UNITS) {
4105 4105
 			print '<td align="left">'.$langs->trans('Unit').'</td>';
@@ -4107,19 +4107,19 @@  discard block
 block discarded – undo
4107 4107
 		print '<td align="right">'.$langs->trans('ReductionShort').'</td></tr>';
4108 4108
 
4109 4109
 		$var = true;
4110
-		$i	 = 0;
4110
+		$i = 0;
4111 4111
 
4112
-		if (! empty($this->lines))
4112
+		if (!empty($this->lines))
4113 4113
 		{
4114 4114
 			foreach ($this->lines as $line)
4115 4115
 			{
4116
-				if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
4116
+				if (is_object($hookmanager) && (($line->product_type == 9 && !empty($line->special_code)) || !empty($line->fk_parent_line)))
4117 4117
 				{
4118 4118
 					if (empty($line->fk_parent_line))
4119 4119
 					{
4120
-						$parameters=array('line'=>$line,'var'=>$var,'i'=>$i);
4121
-						$action='';
4122
-						$hookmanager->executeHooks('printOriginObjectLine',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
4120
+						$parameters = array('line'=>$line, 'var'=>$var, 'i'=>$i);
4121
+						$action = '';
4122
+						$hookmanager->executeHooks('printOriginObjectLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
4123 4123
 					}
4124 4124
 				}
4125 4125
 				else
@@ -4143,103 +4143,103 @@  discard block
 block discarded – undo
4143 4143
 	 *	@param	string				$restrictlist		''=All lines, 'services'=Restrict to services only (strike line if not)
4144 4144
 	 * 	@return	void
4145 4145
 	 */
4146
-	function printOriginLine($line, $var, $restrictlist='')
4146
+	function printOriginLine($line, $var, $restrictlist = '')
4147 4147
 	{
4148 4148
 		global $langs, $conf;
4149 4149
 
4150 4150
 		//var_dump($line);
4151 4151
 		if (!empty($line->date_start))
4152 4152
 		{
4153
-			$date_start=$line->date_start;
4153
+			$date_start = $line->date_start;
4154 4154
 		}
4155 4155
 		else
4156 4156
 		{
4157
-			$date_start=$line->date_debut_prevue;
4158
-			if ($line->date_debut_reel) $date_start=$line->date_debut_reel;
4157
+			$date_start = $line->date_debut_prevue;
4158
+			if ($line->date_debut_reel) $date_start = $line->date_debut_reel;
4159 4159
 		}
4160 4160
 		if (!empty($line->date_end))
4161 4161
 		{
4162
-			$date_end=$line->date_end;
4162
+			$date_end = $line->date_end;
4163 4163
 		}
4164 4164
 		else
4165 4165
 		{
4166
-			$date_end=$line->date_fin_prevue;
4167
-			if ($line->date_fin_reel) $date_end=$line->date_fin_reel;
4166
+			$date_end = $line->date_fin_prevue;
4167
+			if ($line->date_fin_reel) $date_end = $line->date_fin_reel;
4168 4168
 		}
4169 4169
 
4170 4170
 		$this->tpl['label'] = '';
4171
-		if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow');
4171
+		if (!empty($line->fk_parent_line)) $this->tpl['label'] .= img_picto('', 'rightarrow');
4172 4172
 
4173 4173
 		if (($line->info_bits & 2) == 2)  // TODO Not sure this is used for source object
4174 4174
 		{
4175
-			$discount=new DiscountAbsolute($this->db);
4175
+			$discount = new DiscountAbsolute($this->db);
4176 4176
 			$discount->fk_soc = $this->socid;
4177
-			$this->tpl['label'].= $discount->getNomUrl(0,'discount');
4177
+			$this->tpl['label'] .= $discount->getNomUrl(0, 'discount');
4178 4178
 		}
4179
-		else if (! empty($line->fk_product))
4179
+		else if (!empty($line->fk_product))
4180 4180
 		{
4181 4181
 			$productstatic = new Product($this->db);
4182 4182
 			$productstatic->id = $line->fk_product;
4183 4183
 			$productstatic->ref = $line->ref;
4184 4184
 			$productstatic->type = $line->fk_product_type;
4185
-            if(empty($productstatic->ref)){
4185
+            if (empty($productstatic->ref)) {
4186 4186
 				$line->fetch_product();
4187 4187
 				$productstatic = $line->product;
4188 4188
 			}
4189 4189
 			
4190
-			$this->tpl['label'].= $productstatic->getNomUrl(1);
4191
-			$this->tpl['label'].= ' - '.(! empty($line->label)?$line->label:$line->product_label);
4190
+			$this->tpl['label'] .= $productstatic->getNomUrl(1);
4191
+			$this->tpl['label'] .= ' - '.(!empty($line->label) ? $line->label : $line->product_label);
4192 4192
 			// Dates
4193 4193
 			if ($line->product_type == 1 && ($date_start || $date_end))
4194 4194
 			{
4195
-				$this->tpl['label'].= get_date_range($date_start,$date_end);
4195
+				$this->tpl['label'] .= get_date_range($date_start, $date_end);
4196 4196
 			}
4197 4197
 		}
4198 4198
 		else
4199 4199
 		{
4200
-			$this->tpl['label'].= ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
4200
+			$this->tpl['label'] .= ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''), 'service') : img_object($langs->trans(''), 'product')));
4201 4201
 			if (!empty($line->desc)) {
4202
-				$this->tpl['label'].=$line->desc;
4203
-			}else {
4204
-				$this->tpl['label'].= ($line->label ? '&nbsp;'.$line->label : '');
4202
+				$this->tpl['label'] .= $line->desc;
4203
+			} else {
4204
+				$this->tpl['label'] .= ($line->label ? '&nbsp;'.$line->label : '');
4205 4205
 			}
4206 4206
 			
4207 4207
 			// Dates
4208 4208
 			if ($line->product_type == 1 && ($date_start || $date_end))
4209 4209
 			{
4210
-				$this->tpl['label'].= get_date_range($date_start,$date_end);
4210
+				$this->tpl['label'] .= get_date_range($date_start, $date_end);
4211 4211
 			}
4212 4212
 		}
4213 4213
 
4214
-		if (! empty($line->desc))
4214
+		if (!empty($line->desc))
4215 4215
 		{
4216 4216
 			if ($line->desc == '(CREDIT_NOTE)')  // TODO Not sure this is used for source object
4217 4217
 			{
4218
-				$discount=new DiscountAbsolute($this->db);
4218
+				$discount = new DiscountAbsolute($this->db);
4219 4219
 				$discount->fetch($line->fk_remise_except);
4220
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
4220
+				$this->tpl['description'] = $langs->transnoentities("DiscountFromCreditNote", $discount->getNomUrl(0));
4221 4221
 			}
4222 4222
 			elseif ($line->desc == '(DEPOSIT)')  // TODO Not sure this is used for source object
4223 4223
 			{
4224
-				$discount=new DiscountAbsolute($this->db);
4224
+				$discount = new DiscountAbsolute($this->db);
4225 4225
 				$discount->fetch($line->fk_remise_except);
4226
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
4226
+				$this->tpl['description'] = $langs->transnoentities("DiscountFromDeposit", $discount->getNomUrl(0));
4227 4227
 			}
4228 4228
 			elseif ($line->desc == '(EXCESS RECEIVED)')
4229 4229
 			{
4230
-				$discount=new DiscountAbsolute($this->db);
4230
+				$discount = new DiscountAbsolute($this->db);
4231 4231
 				$discount->fetch($line->fk_remise_except);
4232
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessReceived",$discount->getNomUrl(0));
4232
+				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessReceived", $discount->getNomUrl(0));
4233 4233
 			}
4234 4234
 			elseif ($line->desc == '(EXCESS PAID)')
4235 4235
 			{
4236
-				$discount=new DiscountAbsolute($this->db);
4236
+				$discount = new DiscountAbsolute($this->db);
4237 4237
 				$discount->fetch($line->fk_remise_except);
4238
-				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessPaid",$discount->getNomUrl(0));
4238
+				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessPaid", $discount->getNomUrl(0));
4239 4239
 			}
4240 4240
 			else
4241 4241
 			{
4242
-				$this->tpl['description'] = dol_trunc($line->desc,60);
4242
+				$this->tpl['description'] = dol_trunc($line->desc, 60);
4243 4243
 			}
4244 4244
 		}
4245 4245
 		else
@@ -4250,7 +4250,7 @@  discard block
 block discarded – undo
4250 4250
         // VAT Rate
4251 4251
         $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
4252 4252
         $this->tpl['vat_rate'] .= (($line->info_bits & 1) == 1) ? '*' : '';
4253
-        if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
4253
+        if (!empty($line->vat_src_code) && !preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'] .= ' ('.$line->vat_src_code.')';
4254 4254
 
4255 4255
 		$this->tpl['price'] = price($line->subprice);
4256 4256
 		$this->tpl['multicurrency_price'] = price($line->multicurrency_subprice);
@@ -4260,19 +4260,19 @@  discard block
 block discarded – undo
4260 4260
         $this->tpl['remise_percent'] = (($line->info_bits & 2) != 2) ? vatrate($line->remise_percent, true) : '&nbsp;';
4261 4261
 
4262 4262
 		// Is the line strike or not
4263
-		$this->tpl['strike']=0;
4264
-		if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) $this->tpl['strike']=1;
4263
+		$this->tpl['strike'] = 0;
4264
+		if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) $this->tpl['strike'] = 1;
4265 4265
 
4266 4266
 		// Output template part (modules that overwrite templates must declare this into descriptor)
4267 4267
 		// Use global variables + $dateSelector + $seller and $buyer
4268 4268
 		$dirtpls = array_merge(Globals::$conf->modules_parts['tpl'], array('/core/tpl'));
4269
-        foreach($dirtpls as $reldir)
4269
+        foreach ($dirtpls as $reldir)
4270 4270
 		{
4271 4271
 			$tpl = dol_buildpath($reldir.'/originproductline.tpl.php');
4272 4272
 			if (empty(Globals::$conf->file->strict_mode)) {
4273
-                $res=@include $tpl;
4273
+                $res = @include $tpl;
4274 4274
 			} else {
4275
-				$res=include $tpl; // for debug
4275
+				$res = include $tpl; // for debug
4276 4276
 			}
4277 4277
 			if ($res) break;
4278 4278
 		}
@@ -4290,26 +4290,26 @@  discard block
 block discarded – undo
4290 4290
 	 *	@param		int		$mandatory			Mandatory or not
4291 4291
 	 *	@return		int							<=0 if KO, >0 if OK
4292 4292
 	 */
4293
-	function add_element_resource($resource_id, $resource_type, $busy=0, $mandatory=0)
4293
+	function add_element_resource($resource_id, $resource_type, $busy = 0, $mandatory = 0)
4294 4294
 	{
4295 4295
         // phpcs:enable
4296 4296
 		$this->db->begin();
4297 4297
 
4298 4298
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_resources (";
4299
-		$sql.= "resource_id";
4300
-		$sql.= ", resource_type";
4301
-		$sql.= ", element_id";
4302
-		$sql.= ", element_type";
4303
-		$sql.= ", busy";
4304
-		$sql.= ", mandatory";
4305
-		$sql.= ") VALUES (";
4306
-		$sql.= $resource_id;
4307
-		$sql.= ", '".$this->db->escape($resource_type)."'";
4308
-		$sql.= ", '".$this->db->escape($this->id)."'";
4309
-		$sql.= ", '".$this->db->escape($this->element)."'";
4310
-		$sql.= ", '".$this->db->escape($busy)."'";
4311
-		$sql.= ", '".$this->db->escape($mandatory)."'";
4312
-		$sql.= ")";
4299
+		$sql .= "resource_id";
4300
+		$sql .= ", resource_type";
4301
+		$sql .= ", element_id";
4302
+		$sql .= ", element_type";
4303
+		$sql .= ", busy";
4304
+		$sql .= ", mandatory";
4305
+		$sql .= ") VALUES (";
4306
+		$sql .= $resource_id;
4307
+		$sql .= ", '".$this->db->escape($resource_type)."'";
4308
+		$sql .= ", '".$this->db->escape($this->id)."'";
4309
+		$sql .= ", '".$this->db->escape($this->element)."'";
4310
+		$sql .= ", '".$this->db->escape($busy)."'";
4311
+		$sql .= ", '".$this->db->escape($mandatory)."'";
4312
+		$sql .= ")";
4313 4313
 
4314 4314
 		dol_syslog(get_class($this)."::add_element_resource", LOG_DEBUG);
4315 4315
 		if ($this->db->query($sql))
@@ -4319,7 +4319,7 @@  discard block
 block discarded – undo
4319 4319
 		}
4320 4320
 		else
4321 4321
 		{
4322
-			$this->error=$this->db->lasterror();
4322
+			$this->error = $this->db->lasterror();
4323 4323
 			$this->db->rollback();
4324 4324
 			return  0;
4325 4325
 		}
@@ -4334,7 +4334,7 @@  discard block
 block discarded – undo
4334 4334
 	 *    @param	int		$notrigger		Disable all triggers
4335 4335
 	 *    @return   int						>0 if OK, <0 if KO
4336 4336
 	 */
4337
-	function delete_resource($rowid, $element, $notrigger=0)
4337
+	function delete_resource($rowid, $element, $notrigger = 0)
4338 4338
 	{
4339 4339
         // phpcs:enable
4340 4340
 		global $user;
@@ -4342,22 +4342,22 @@  discard block
 block discarded – undo
4342 4342
 		$this->db->begin();
4343 4343
 
4344 4344
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_resources";
4345
-		$sql.= " WHERE rowid=".$rowid;
4345
+		$sql .= " WHERE rowid=".$rowid;
4346 4346
 
4347 4347
 		dol_syslog(get_class($this)."::delete_resource", LOG_DEBUG);
4348 4348
 
4349
-		$resql=$this->db->query($sql);
4350
-		if (! $resql)
4349
+		$resql = $this->db->query($sql);
4350
+		if (!$resql)
4351 4351
 		{
4352
-			$this->error=$this->db->lasterror();
4352
+			$this->error = $this->db->lasterror();
4353 4353
 			$this->db->rollback();
4354 4354
 			return -1;
4355 4355
 		}
4356 4356
 		else
4357 4357
 		{
4358
-			if (! $notrigger)
4358
+			if (!$notrigger)
4359 4359
 			{
4360
-				$result=$this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user);
4360
+				$result = $this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user);
4361 4361
 				if ($result < 0) { $this->db->rollback(); return -1; }
4362 4362
 			}
4363 4363
 			$this->db->commit();
@@ -4376,8 +4376,8 @@  discard block
 block discarded – undo
4376 4376
 		// Force a copy of this->lines, otherwise it will point to same object.
4377 4377
 		if (isset($this->lines) && is_array($this->lines))
4378 4378
 		{
4379
-			$nboflines=count($this->lines);
4380
-			for($i=0; $i < $nboflines; $i++)
4379
+			$nboflines = count($this->lines);
4380
+			for ($i = 0; $i < $nboflines; $i++)
4381 4381
 			{
4382 4382
 				$this->lines[$i] = clone $this->lines[$i];
4383 4383
 			}
@@ -4397,44 +4397,44 @@  discard block
 block discarded – undo
4397 4397
 	 * @return 	int 						>0 if OK, <0 if KO
4398 4398
 	 * @see	addFileIntoDatabaseIndex
4399 4399
 	 */
4400
-	protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
4400
+	protected function commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams = null)
4401 4401
 	{
4402 4402
 		global $conf, $langs, $user;
4403 4403
 
4404
-		$srctemplatepath='';
4404
+		$srctemplatepath = '';
4405 4405
 
4406 4406
 		// Increase limit for PDF build
4407
-		$err=error_reporting();
4407
+		$err = error_reporting();
4408 4408
 		error_reporting(0);
4409 4409
 		@set_time_limit(120);
4410 4410
 		error_reporting($err);
4411 4411
 
4412 4412
 		// If selected model is a filename template (then $modele="modelname" or "modelname:filename")
4413
-		$tmp=explode(':',$modele,2);
4414
-		if (! empty($tmp[1]))
4413
+		$tmp = explode(':', $modele, 2);
4414
+		if (!empty($tmp[1]))
4415 4415
 		{
4416
-			$modele=$tmp[0];
4417
-			$srctemplatepath=$tmp[1];
4416
+			$modele = $tmp[0];
4417
+			$srctemplatepath = $tmp[1];
4418 4418
 		}
4419 4419
 
4420 4420
 		// Search template files
4421
-		$file=''; $classname=''; $filefound=0;
4422
-		$dirmodels=array('/');
4421
+		$file = ''; $classname = ''; $filefound = 0;
4422
+		$dirmodels = array('/');
4423 4423
 		if (is_array(Globals::$conf->modules_parts['models']))
4424 4424
             $dirmodels = array_merge($dirmodels, Globals::$conf->modules_parts['models']);
4425
-        foreach($dirmodels as $reldir)
4425
+        foreach ($dirmodels as $reldir)
4426 4426
 		{
4427
-			foreach(array('doc','pdf') as $prefix)
4427
+			foreach (array('doc', 'pdf') as $prefix)
4428 4428
 			{
4429
-				if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php";     // Member module use prefix_module.class.php
4429
+				if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php"; // Member module use prefix_module.class.php
4430 4430
 				else $file = $prefix."_".$modele.".modules.php";
4431 4431
 
4432 4432
 				// On verifie l'emplacement du modele
4433
-				$file=dol_buildpath($reldir.$modelspath.$file,0);
4433
+				$file = dol_buildpath($reldir.$modelspath.$file, 0);
4434 4434
 				if (file_exists($file))
4435 4435
 				{
4436
-					$filefound=1;
4437
-					$classname=$prefix.'_'.$modele;
4436
+					$filefound = 1;
4437
+					$classname = $prefix.'_'.$modele;
4438 4438
 					break;
4439 4439
 				}
4440 4440
 			}
@@ -4444,7 +4444,7 @@  discard block
 block discarded – undo
4444 4444
 		// If generator was found
4445 4445
 		if ($filefound)
4446 4446
 		{
4447
-			global $db;  // Required to solve a conception default in commonstickergenerator.class.php making an include of code using $db
4447
+			global $db; // Required to solve a conception default in commonstickergenerator.class.php making an include of code using $db
4448 4448
 
4449 4449
 			require_once $file;
4450 4450
 
@@ -4453,31 +4453,31 @@  discard block
 block discarded – undo
4453 4453
 			// If generator is ODT, we must have srctemplatepath defined, if not we set it.
4454 4454
 			if ($obj->type == 'odt' && empty($srctemplatepath))
4455 4455
 			{
4456
-				$varfortemplatedir=$obj->scandir;
4456
+				$varfortemplatedir = $obj->scandir;
4457 4457
 				if ($varfortemplatedir && !empty(Globals::$conf->global->$varfortemplatedir)) {
4458 4458
 					$dirtoscan = Globals::$conf->global->$varfortemplatedir;
4459 4459
 
4460
-                    $listoffiles=array();
4460
+                    $listoffiles = array();
4461 4461
 
4462 4462
 					// Now we add first model found in directories scanned
4463
-					$listofdir=explode(',',$dirtoscan);
4464
-					foreach($listofdir as $key => $tmpdir)
4463
+					$listofdir = explode(',', $dirtoscan);
4464
+					foreach ($listofdir as $key => $tmpdir)
4465 4465
 					{
4466
-						$tmpdir=trim($tmpdir);
4467
-						$tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir);
4468
-						if (! $tmpdir) { unset($listofdir[$key]); continue; }
4466
+						$tmpdir = trim($tmpdir);
4467
+						$tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
4468
+						if (!$tmpdir) { unset($listofdir[$key]); continue; }
4469 4469
 						if (is_dir($tmpdir))
4470 4470
 						{
4471
-							$tmpfiles=dol_dir_list($tmpdir,'files',0,'\.od(s|t)$','','name',SORT_ASC,0);
4472
-							if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
4471
+							$tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\.od(s|t)$', '', 'name', SORT_ASC, 0);
4472
+							if (count($tmpfiles)) $listoffiles = array_merge($listoffiles, $tmpfiles);
4473 4473
 						}
4474 4474
 					}
4475 4475
 
4476 4476
 					if (count($listoffiles))
4477 4477
 					{
4478
-						foreach($listoffiles as $record)
4478
+						foreach ($listoffiles as $record)
4479 4479
 						{
4480
-							$srctemplatepath=$record['fullname'];
4480
+							$srctemplatepath = $record['fullname'];
4481 4481
 							break;
4482 4482
 						}
4483 4483
 					}
@@ -4485,27 +4485,27 @@  discard block
 block discarded – undo
4485 4485
 
4486 4486
 				if (empty($srctemplatepath))
4487 4487
 				{
4488
-					$this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined';
4488
+					$this->error = 'ErrorGenerationAskedForOdtTemplateWithSrcFileNotDefined';
4489 4489
 					return -1;
4490 4490
 				}
4491 4491
 			}
4492 4492
 
4493
-			if ($obj->type == 'odt' && ! empty($srctemplatepath))
4493
+			if ($obj->type == 'odt' && !empty($srctemplatepath))
4494 4494
 			{
4495
-				if (! dol_is_file($srctemplatepath))
4495
+				if (!dol_is_file($srctemplatepath))
4496 4496
 				{
4497
-					$this->error='ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound';
4497
+					$this->error = 'ErrorGenerationAskedForOdtTemplateWithSrcFileNotFound';
4498 4498
 					return -1;
4499 4499
 				}
4500 4500
 			}
4501 4501
 
4502 4502
 			// We save charset_output to restore it because write_file can change it if needed for
4503 4503
 			// output format that does not support UTF8.
4504
-			$sav_charset_output=$outputlangs->charset_output;
4504
+			$sav_charset_output = $outputlangs->charset_output;
4505 4505
 
4506 4506
 			if (in_array(get_class($this), array('Adherent')))
4507 4507
 			{
4508
-				$arrayofrecords = array();   // The write_file of templates of adherent class need this var
4508
+				$arrayofrecords = array(); // The write_file of templates of adherent class need this var
4509 4509
 				$resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams);
4510 4510
 			}
4511 4511
 			else
@@ -4516,36 +4516,36 @@  discard block
 block discarded – undo
4516 4516
 
4517 4517
 			if ($resultwritefile > 0)
4518 4518
 			{
4519
-				$outputlangs->charset_output=$sav_charset_output;
4519
+				$outputlangs->charset_output = $sav_charset_output;
4520 4520
 
4521 4521
 				// We delete old preview
4522 4522
 				require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
4523 4523
 				dol_delete_preview($this);
4524 4524
 
4525 4525
 				// Index file in database
4526
-				if (! empty($obj->result['fullpath']))
4526
+				if (!empty($obj->result['fullpath']))
4527 4527
 				{
4528 4528
 					$destfull = $obj->result['fullpath'];
4529 4529
 					$upload_dir = dirname($destfull);
4530 4530
 					$destfile = basename($destfull);
4531
-					$rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $upload_dir);
4531
+					$rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $upload_dir);
4532 4532
 
4533
-					if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir))     // If not a tmp dir
4533
+					if (!preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir))     // If not a tmp dir
4534 4534
 					{
4535 4535
 						$filename = basename($destfile);
4536 4536
 						$rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
4537 4537
 						$rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
4538 4538
 
4539 4539
 						include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
4540
-						$ecmfile=new EcmFiles($this->db);
4541
-						$result = $ecmfile->fetch(0, '', ($rel_dir?$rel_dir.'/':'').$filename);
4540
+						$ecmfile = new EcmFiles($this->db);
4541
+						$result = $ecmfile->fetch(0, '', ($rel_dir ? $rel_dir.'/' : '').$filename);
4542 4542
 
4543 4543
 						// Set the public "share" key
4544 4544
 						$setsharekey = false;
4545 4545
 						if ($this->element == 'propal')
4546 4546
 						{
4547 4547
 							$useonlinesignature = Globals::$conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok
4548
-                            if ($useonlinesignature) $setsharekey=true;
4548
+                            if ($useonlinesignature) $setsharekey = true;
4549 4549
 							if (!empty(Globals::$conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD))
4550 4550
                                 $setsharekey = true;
4551 4551
                         }
@@ -4567,11 +4567,11 @@  discard block
 block discarded – undo
4567 4567
 
4568 4568
 						if ($result > 0)
4569 4569
 						{
4570
-							$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4570
+							$ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content
4571 4571
 							$ecmfile->fullpath_orig = '';
4572 4572
 							$ecmfile->gen_or_uploaded = 'generated';
4573
-							$ecmfile->description = '';    // indexed content
4574
-							$ecmfile->keyword = '';        // keyword content
4573
+							$ecmfile->description = ''; // indexed content
4574
+							$ecmfile->keyword = ''; // keyword content
4575 4575
 							$result = $ecmfile->update($user);
4576 4576
 							if ($result < 0)
4577 4577
 							{
@@ -4583,11 +4583,11 @@  discard block
 block discarded – undo
4583 4583
 							$ecmfile->entity = Globals::$conf->entity;
4584 4584
                             $ecmfile->filepath = $rel_dir;
4585 4585
 							$ecmfile->filename = $filename;
4586
-							$ecmfile->label = md5_file(dol_osencode($destfull));	// hash of file content
4586
+							$ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content
4587 4587
 							$ecmfile->fullpath_orig = '';
4588 4588
 							$ecmfile->gen_or_uploaded = 'generated';
4589
-							$ecmfile->description = '';    // indexed content
4590
-							$ecmfile->keyword = '';        // keyword content
4589
+							$ecmfile->description = ''; // indexed content
4590
+							$ecmfile->keyword = ''; // keyword content
4591 4591
 							$ecmfile->src_object_type = $this->table_element;
4592 4592
 							$ecmfile->src_object_id   = $this->id;
4593 4593
 
@@ -4604,14 +4604,14 @@  discard block
 block discarded – undo
4604 4604
 						//var_dump($obj->update_main_doc_field);exit;
4605 4605
 
4606 4606
 						// Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set)
4607
-						$update_main_doc_field=0;
4608
-						if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1;
4609
-						if ($update_main_doc_field && ! empty($this->table_element))
4607
+						$update_main_doc_field = 0;
4608
+						if (!empty($obj->update_main_doc_field)) $update_main_doc_field = 1;
4609
+						if ($update_main_doc_field && !empty($this->table_element))
4610 4610
 						{
4611 4611
 							$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".($ecmfile->filepath.'/'.$ecmfile->filename)."'";
4612
-							$sql.= ' WHERE rowid = '.$this->id;
4612
+							$sql .= ' WHERE rowid = '.$this->id;
4613 4613
 							$resql = $this->db->query($sql);
4614
-							if (! $resql) dol_print_error($this->db);
4614
+							if (!$resql) dol_print_error($this->db);
4615 4615
 						}
4616 4616
 					}
4617 4617
 				}
@@ -4627,15 +4627,15 @@  discard block
 block discarded – undo
4627 4627
 			}
4628 4628
 			else
4629 4629
 			{
4630
-				$outputlangs->charset_output=$sav_charset_output;
4630
+				$outputlangs->charset_output = $sav_charset_output;
4631 4631
 				dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors);
4632 4632
 				return -1;
4633 4633
 			}
4634 4634
 		}
4635 4635
 		else
4636 4636
 		{
4637
-			$this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
4638
-			dol_print_error('',$this->error);
4637
+			$this->error = $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists", $file);
4638
+			dol_print_error('', $this->error);
4639 4639
 			return -1;
4640 4640
 		}
4641 4641
 	}
@@ -4651,9 +4651,9 @@  discard block
 block discarded – undo
4651 4651
 	{
4652 4652
 		global $maxwidthsmall, $maxheightsmall, $maxwidthmini, $maxheightmini, $quality;
4653 4653
 
4654
-		require_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';		// This define also $maxwidthsmall, $quality, ...
4654
+		require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; // This define also $maxwidthsmall, $quality, ...
4655 4655
 
4656
-		$file_osencoded=dol_osencode($file);
4656
+		$file_osencoded = dol_osencode($file);
4657 4657
 		if (file_exists($file_osencoded))
4658 4658
 		{
4659 4659
 			// Create small thumbs for company (Ratio is near 16/9)
@@ -4683,7 +4683,7 @@  discard block
 block discarded – undo
4683 4683
 	 * @param   string              $alternatevalue     Alternate value to use
4684 4684
 	 * @return  string|string[]                         Default value (can be an array if the GETPOST return an array)
4685 4685
 	 **/
4686
-	function getDefaultCreateValueFor($fieldname, $alternatevalue=null)
4686
+	function getDefaultCreateValueFor($fieldname, $alternatevalue = null)
4687 4687
 	{
4688 4688
 		global $conf, $_POST;
4689 4689
 
@@ -4692,16 +4692,16 @@  discard block
 block discarded – undo
4692 4692
 
4693 4693
 		if (isset($alternatevalue)) return $alternatevalue;
4694 4694
 
4695
-		$newelement=$this->element;
4696
-		if ($newelement == 'facture') $newelement='invoice';
4697
-		if ($newelement == 'commande') $newelement='order';
4695
+		$newelement = $this->element;
4696
+		if ($newelement == 'facture') $newelement = 'invoice';
4697
+		if ($newelement == 'commande') $newelement = 'order';
4698 4698
 		if (empty($newelement))
4699 4699
 		{
4700 4700
 			dol_syslog("Ask a default value using common method getDefaultCreateValueForField on an object with no property ->element defined. Return empty string.", LOG_WARNING);
4701 4701
 			return '';
4702 4702
 		}
4703 4703
 
4704
-		$keyforfieldname=strtoupper($newelement.'_DEFAULT_'.$fieldname);
4704
+		$keyforfieldname = strtoupper($newelement.'_DEFAULT_'.$fieldname);
4705 4705
 		//var_dump($keyforfieldname);
4706 4706
 		if (isset(Globals::$conf->global->$keyforfieldname))
4707 4707
             return Globals::$conf->global->$keyforfieldname;
@@ -4727,21 +4727,21 @@  discard block
 block discarded – undo
4727 4727
 	function call_trigger($trigger_name, $user)
4728 4728
 	{
4729 4729
         // phpcs:enable
4730
-		global $langs,$conf;
4730
+		global $langs, $conf;
4731 4731
 
4732
-		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
4733
-		$interface=new Interfaces($this->db);
4734
-		$result=$interface->run_triggers($trigger_name,$this,$user,$langs,$conf);
4732
+		include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php';
4733
+		$interface = new Interfaces($this->db);
4734
+		$result = $interface->run_triggers($trigger_name, $this, $user, $langs, $conf);
4735 4735
 
4736 4736
 		if ($result < 0)
4737 4737
 		{
4738 4738
 			if (!empty($this->errors))
4739 4739
 			{
4740
-				$this->errors=array_unique(array_merge($this->errors,$interface->errors));   // We use array_unique because when a trigger call another trigger on same object, this->errors is added twice.
4740
+				$this->errors = array_unique(array_merge($this->errors, $interface->errors)); // We use array_unique because when a trigger call another trigger on same object, this->errors is added twice.
4741 4741
 			}
4742 4742
 			else
4743 4743
 			{
4744
-				$this->errors=$interface->errors;
4744
+				$this->errors = $interface->errors;
4745 4745
 			}
4746 4746
 		}
4747 4747
 		return $result;
@@ -4760,7 +4760,7 @@  discard block
 block discarded – undo
4760 4760
 	 *  @param  array	$optionsArray   Array resulting of call of extrafields->fetch_name_optionals_label(). Deprecated. Function must be called without parameters.
4761 4761
 	 *  @return	int						<0 if error, 0 if no values of extrafield to find nor found, 1 if an attribute is found and value loaded
4762 4762
 	 */
4763
-	function fetch_optionals($rowid=null, $optionsArray=null)
4763
+	function fetch_optionals($rowid = null, $optionsArray = null)
4764 4764
 	{
4765 4765
         // phpcs:enable
4766 4766
 		if (empty($rowid)) {
@@ -4772,9 +4772,9 @@  discard block
 block discarded – undo
4772 4772
 			return 0;
4773 4773
 		}
4774 4774
 
4775
-		$this->array_options=array();
4775
+		$this->array_options = array();
4776 4776
 
4777
-		if (! is_array($optionsArray))
4777
+		if (!is_array($optionsArray))
4778 4778
 		{
4779 4779
 			// If $extrafields is not a known object, we initialize it. Best practice is to have $extrafields defined into card.php or list.php page.
4780 4780
 			// TODO Use of existing $extrafield is not yet ready (must mutualize code that use extrafields in form first)
@@ -4790,7 +4790,7 @@  discard block
 block discarded – undo
4790 4790
 			{
4791 4791
 				$extrafields->fetch_name_optionals_label($this->table_element);
4792 4792
 			}
4793
-			$optionsArray = (! empty($extrafields->attributes[$this->table_element]['label'])?$extrafields->attributes[$this->table_element]['label']:null);
4793
+			$optionsArray = (!empty($extrafields->attributes[$this->table_element]['label']) ? $extrafields->attributes[$this->table_element]['label'] : null);
4794 4794
 		}
4795 4795
 		else
4796 4796
 		{
@@ -4809,18 +4809,18 @@  discard block
 block discarded – undo
4809 4809
 			{
4810 4810
 				if (empty($extrafields->attributes[$this->table_element]['type'][$name]) || $extrafields->attributes[$this->table_element]['type'][$name] != 'separate')
4811 4811
 				{
4812
-					$sql.= ", ".$name;
4812
+					$sql .= ", ".$name;
4813 4813
 				}
4814 4814
 			}
4815
-			$sql.= " FROM ".MAIN_DB_PREFIX.$table_element."_extrafields";
4816
-			$sql.= " WHERE fk_object = ".$rowid;
4815
+			$sql .= " FROM ".MAIN_DB_PREFIX.$table_element."_extrafields";
4816
+			$sql .= " WHERE fk_object = ".$rowid;
4817 4817
 
4818 4818
 			//dol_syslog(get_class($this)."::fetch_optionals get extrafields data for ".$this->table_element, LOG_DEBUG);		// Too verbose
4819
-			$resql=$this->db->query($sql);
4819
+			$resql = $this->db->query($sql);
4820 4820
 			if ($resql)
4821 4821
 			{
4822 4822
 				$this->array_options = array();
4823
-				$numrows=$this->db->num_rows($resql);
4823
+				$numrows = $this->db->num_rows($resql);
4824 4824
 				if ($numrows)
4825 4825
 				{
4826 4826
 					$tab = $this->db->fetch_array($resql);
@@ -4828,17 +4828,17 @@  discard block
 block discarded – undo
4828 4828
 					foreach ($tab as $key => $value)
4829 4829
 					{
4830 4830
 						// Test fetch_array ! is_int($key) because fetch_array result is a mix table with Key as alpha and Key as int (depend db engine)
4831
-						if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && ! is_int($key))
4831
+						if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && !is_int($key))
4832 4832
 						{
4833 4833
 							// we can add this attribute to object
4834
-							if (! empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date','datetime')))
4834
+							if (!empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date', 'datetime')))
4835 4835
 							{
4836 4836
 								//var_dump($extrafields->attributes[$this->table_element]['type'][$key]);
4837
-								$this->array_options["options_".$key]=$this->db->jdate($value);
4837
+								$this->array_options["options_".$key] = $this->db->jdate($value);
4838 4838
 							}
4839 4839
 							else
4840 4840
 							{
4841
-								$this->array_options["options_".$key]=$value;
4841
+								$this->array_options["options_".$key] = $value;
4842 4842
 							}
4843 4843
 
4844 4844
 							//var_dump('key '.$key.' '.$value.' type='.$extrafields->attributes[$this->table_element]['type'][$key].' '.$this->array_options["options_".$key]);
@@ -4874,10 +4874,10 @@  discard block
 block discarded – undo
4874 4874
 
4875 4875
 		$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
4876 4876
 		dol_syslog(get_class($this)."::deleteExtraFields delete", LOG_DEBUG);
4877
-		$resql=$this->db->query($sql_del);
4878
-		if (! $resql)
4877
+		$resql = $this->db->query($sql_del);
4878
+		if (!$resql)
4879 4879
 		{
4880
-			$this->error=$this->db->lasterror();
4880
+			$this->error = $this->db->lasterror();
4881 4881
 			$this->db->rollback();
4882 4882
 			return -1;
4883 4883
 		}
@@ -4898,37 +4898,37 @@  discard block
 block discarded – undo
4898 4898
 	 *  @return int 						-1=error, O=did nothing, 1=OK
4899 4899
 	 *  @see updateExtraField, setValueFrom
4900 4900
 	 */
4901
-	function insertExtraFields($trigger='', $userused=null)
4901
+	function insertExtraFields($trigger = '', $userused = null)
4902 4902
 	{
4903
-		global $conf,$langs,$user;
4903
+		global $conf, $langs, $user;
4904 4904
 
4905
-		if (empty($userused)) $userused=$user;
4905
+		if (empty($userused)) $userused = $user;
4906 4906
 
4907
-		$error=0;
4907
+		$error = 0;
4908 4908
 
4909 4909
 		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
4910 4910
             return 0; // For avoid conflicts if trigger used
4911 4911
 
4912
-        if (! empty($this->array_options))
4912
+        if (!empty($this->array_options))
4913 4913
 		{
4914 4914
 			// Check parameters
4915 4915
 			$langs->load('admin');
4916 4916
 			require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
4917 4917
 			$extrafields = new AlExtraFields($this->db);
4918
-            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
4918
+            $target_extrafields = $extrafields->fetch_name_optionals_label($this->table_element);
4919 4919
 
4920 4920
 			//Eliminate copied source object extra_fields that do not exist in target object
4921
-			$new_array_options=array();
4921
+			$new_array_options = array();
4922 4922
 			foreach ($this->array_options as $key => $value) {
4923
-				if (in_array(substr($key,8), array_keys($target_extrafields)))	// We remove the 'options_' from $key for test
4923
+				if (in_array(substr($key, 8), array_keys($target_extrafields)))	// We remove the 'options_' from $key for test
4924 4924
 					$new_array_options[$key] = $value;
4925 4925
 				elseif (in_array($key, array_keys($target_extrafields)))		// We test on $key that does not contains the 'options_' prefix
4926 4926
 					$new_array_options['options_'.$key] = $value;
4927 4927
 			}
4928 4928
 
4929
-			foreach($new_array_options as $key => $value)
4929
+			foreach ($new_array_options as $key => $value)
4930 4930
 			{
4931
-			   	$attributeKey      = substr($key,8);   // Remove 'options_' prefix
4931
+			   	$attributeKey      = substr($key, 8); // Remove 'options_' prefix
4932 4932
 			   	$attributeType     = $extrafields->attributes[$this->table_element]['type'][$attributeKey];
4933 4933
 			   	$attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$attributeKey];
4934 4934
 			   	$attributeParam    = $extrafields->attributes[$this->table_element]['param'][$attributeKey];
@@ -4936,13 +4936,13 @@  discard block
 block discarded – undo
4936 4936
 
4937 4937
 			   	if ($attributeRequired)
4938 4938
 			   	{
4939
-			   		$mandatorypb=false;
4940
-			   		if ($attributeType == 'link' && $this->array_options[$key] == '-1') $mandatorypb=true;
4941
-			   		if ($this->array_options[$key] === '') $mandatorypb=true;
4939
+			   		$mandatorypb = false;
4940
+			   		if ($attributeType == 'link' && $this->array_options[$key] == '-1') $mandatorypb = true;
4941
+			   		if ($this->array_options[$key] === '') $mandatorypb = true;
4942 4942
 			   		if ($mandatorypb)
4943 4943
 			   		{
4944 4944
 			   			dol_syslog($this->error);
4945
-			   			$this->errors[]=$langs->trans('ErrorFieldRequired', $attributeLabel);
4945
+			   			$this->errors[] = $langs->trans('ErrorFieldRequired', $attributeLabel);
4946 4946
 			   			return -1;
4947 4947
 			   		}
4948 4948
 			   	}
@@ -4953,25 +4953,25 @@  discard block
 block discarded – undo
4953 4953
 			   	switch ($attributeType)
4954 4954
 			   	{
4955 4955
 			   		case 'int':
4956
-			  			if (!is_numeric($value) && $value!='')
4956
+			  			if (!is_numeric($value) && $value != '')
4957 4957
 			   			{
4958
-			   				$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4958
+			   				$this->errors[] = $langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4959 4959
 			   				return -1;
4960 4960
 			  			}
4961
-			   			elseif ($value=='')
4961
+			   			elseif ($value == '')
4962 4962
 			   			{
4963 4963
 			   				$new_array_options[$key] = null;
4964 4964
 			   			}
4965 4965
 			 			break;
4966 4966
 					case 'double':
4967 4967
 						$value = price2num($value);
4968
-						if (!is_numeric($value) && $value!='')
4968
+						if (!is_numeric($value) && $value != '')
4969 4969
 						{
4970 4970
 							dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
4971
-							$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4971
+							$this->errors[] = $langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4972 4972
 							return -1;
4973 4973
 						}
4974
-						elseif ($value=='')
4974
+						elseif ($value == '')
4975 4975
 						{
4976 4976
 							$new_array_options[$key] = null;
4977 4977
 						}
@@ -4985,12 +4985,12 @@  discard block
 block discarded – undo
4985 4985
              			}
4986 4986
              			break;*/
4987 4987
 			   		case 'password':
4988
-			   			$algo='';
4988
+			   			$algo = '';
4989 4989
 			   			if ($this->array_options[$key] != '' && is_array($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']))
4990 4990
 			   			{
4991 4991
 			   				// If there is an encryption choice, we use it to crypt data before insert
4992 4992
 			   				$tmparrays = array_keys($extrafields->attributes[$this->table_element]['param'][$attributeKey]['options']);
4993
-			   				$algo=reset($tmparrays);
4993
+			   				$algo = reset($tmparrays);
4994 4994
 			   				if ($algo != '')
4995 4995
 			   				{
4996 4996
 			   					//global $action;		// $action may be 'create', 'update', 'update_extras'...
@@ -5001,7 +5001,7 @@  discard block
 block discarded – undo
5001 5001
 			   						//var_dump($this->oldcopy->array_options[$key]); var_dump($this->array_options[$key]);
5002 5002
 				   					if ($this->array_options[$key] == $this->oldcopy->array_options[$key])	// If old value crypted in database is same than submited new value, it means we don't change it, so we don't update.
5003 5003
 				   					{
5004
-				   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5004
+				   						$new_array_options[$key] = $this->array_options[$key]; // Value is kept
5005 5005
 				   					}
5006 5006
 									else
5007 5007
 									{
@@ -5012,7 +5012,7 @@  discard block
 block discarded – undo
5012 5012
 			   					}
5013 5013
 			   					else
5014 5014
 			   					{
5015
-			   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5015
+			   						$new_array_options[$key] = $this->array_options[$key]; // Value is kept
5016 5016
 			   					}
5017 5017
 			   				}
5018 5018
 			   			}
@@ -5029,13 +5029,13 @@  discard block
 block discarded – undo
5029 5029
 						break;
5030 5030
 					case 'datetime':
5031 5031
 						// If data is a string instead of a timestamp, we convert it
5032
-						if (! is_int($this->array_options[$key])) {
5032
+						if (!is_int($this->array_options[$key])) {
5033 5033
 							$this->array_options[$key] = strtotime($this->array_options[$key]);
5034 5034
 						}
5035 5035
 						$new_array_options[$key] = $this->db->idate($this->array_options[$key]);
5036 5036
 						break;
5037 5037
 		   			case 'link':
5038
-						$param_list=array_keys($attributeParam['options']);
5038
+						$param_list = array_keys($attributeParam['options']);
5039 5039
 						// 0 : ObjectName
5040 5040
 						// 1 : classPath
5041 5041
 						$InfoFieldList = explode(":", $param_list[0]);
@@ -5044,18 +5044,18 @@  discard block
 block discarded – undo
5044 5044
 						{
5045 5045
 							if ($value == '-1')	// -1 is key for no defined in combo list of objects
5046 5046
 							{
5047
-								$new_array_options[$key]='';
5047
+								$new_array_options[$key] = '';
5048 5048
 							}
5049 5049
 							elseif ($value)
5050 5050
 							{
5051 5051
 								$object = new $InfoFieldList[0]($this->db);
5052
-								if (is_numeric($value)) $res=$object->fetch($value);
5053
-								else $res=$object->fetch('',$value);
5052
+								if (is_numeric($value)) $res = $object->fetch($value);
5053
+								else $res = $object->fetch('', $value);
5054 5054
 
5055
-								if ($res > 0) $new_array_options[$key]=$object->id;
5055
+								if ($res > 0) $new_array_options[$key] = $object->id;
5056 5056
 								else
5057 5057
 								{
5058
-									$this->error="Id/Ref '".$value."' for object '".$object->element."' not found";
5058
+									$this->error = "Id/Ref '".$value."' for object '".$object->element."' not found";
5059 5059
 									$this->db->rollback();
5060 5060
 									return -1;
5061 5061
 								}
@@ -5079,46 +5079,46 @@  discard block
 block discarded – undo
5079 5079
 			$this->db->query($sql_del);
5080 5080
 
5081 5081
 			$sql = "INSERT INTO ".MAIN_DB_PREFIX.$table_element."_extrafields (fk_object";
5082
-			foreach($new_array_options as $key => $value)
5082
+			foreach ($new_array_options as $key => $value)
5083 5083
 			{
5084
-				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5084
+				$attributeKey = substr($key, 8); // Remove 'options_' prefix
5085 5085
 				// Add field of attribut
5086 5086
 				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator
5087
-					$sql.=",".$attributeKey;
5087
+					$sql .= ",".$attributeKey;
5088 5088
 			}
5089 5089
 			$sql .= ") VALUES (".$this->id;
5090 5090
 
5091
-			foreach($new_array_options as $key => $value)
5091
+			foreach ($new_array_options as $key => $value)
5092 5092
 			{
5093
-				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5093
+				$attributeKey = substr($key, 8); // Remove 'options_' prefix
5094 5094
 				// Add field of attribute
5095 5095
 				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator)
5096 5096
 				{
5097 5097
 					if ($new_array_options[$key] != '')
5098 5098
 					{
5099
-						$sql.=",'".$this->db->escape($new_array_options[$key])."'";
5099
+						$sql .= ",'".$this->db->escape($new_array_options[$key])."'";
5100 5100
 					}
5101 5101
 					else
5102 5102
 					{
5103
-						$sql.=",null";
5103
+						$sql .= ",null";
5104 5104
 					}
5105 5105
 				}
5106 5106
 			}
5107
-			$sql.=")";
5107
+			$sql .= ")";
5108 5108
 
5109 5109
 			dol_syslog(get_class($this)."::insertExtraFields insert", LOG_DEBUG);
5110 5110
 			$resql = $this->db->query($sql);
5111
-			if (! $resql)
5111
+			if (!$resql)
5112 5112
 			{
5113
-				$this->error=$this->db->lasterror();
5113
+				$this->error = $this->db->lasterror();
5114 5114
 				$error++;
5115 5115
 			}
5116 5116
 
5117
-			if (! $error && $trigger)
5117
+			if (!$error && $trigger)
5118 5118
 			{
5119 5119
 				// Call trigger
5120
-				$this->context=array('extrafieldaddupdate'=>1);
5121
-				$result=$this->call_trigger($trigger, $userused);
5120
+				$this->context = array('extrafieldaddupdate'=>1);
5121
+				$result = $this->call_trigger($trigger, $userused);
5122 5122
 				if ($result < 0) $error++;
5123 5123
 				// End call trigger
5124 5124
 			}
@@ -5147,26 +5147,26 @@  discard block
 block discarded – undo
5147 5147
 	 *  @return int                 		-1=error, O=did nothing, 1=OK
5148 5148
 	 *  @see setValueFrom, insertExtraFields
5149 5149
 	 */
5150
-	function updateExtraField($key, $trigger=null, $userused=null)
5150
+	function updateExtraField($key, $trigger = null, $userused = null)
5151 5151
 	{
5152
-		global $conf,$langs,$user;
5152
+		global $conf, $langs, $user;
5153 5153
 
5154
-		if (empty($userused)) $userused=$user;
5154
+		if (empty($userused)) $userused = $user;
5155 5155
 
5156
-		$error=0;
5156
+		$error = 0;
5157 5157
 
5158 5158
 		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
5159 5159
             return 0; // For avoid conflicts if trigger used
5160 5160
 
5161
-        if (! empty($this->array_options) && isset($this->array_options["options_".$key]))
5161
+        if (!empty($this->array_options) && isset($this->array_options["options_".$key]))
5162 5162
 		{
5163 5163
 			// Check parameters
5164 5164
 			$langs->load('admin');
5165 5165
 			require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
5166 5166
 			$extrafields = new AlExtraFields($this->db);
5167
-            $target_extrafields=$extrafields->fetch_name_optionals_label($this->table_element);
5167
+            $target_extrafields = $extrafields->fetch_name_optionals_label($this->table_element);
5168 5168
 
5169
-			$value=$this->array_options["options_".$key];
5169
+			$value = $this->array_options["options_".$key];
5170 5170
 
5171 5171
 			$attributeType     = $extrafields->attributes[$this->table_element]['type'][$key];
5172 5172
 			$attributeLabel    = $extrafields->attributes[$this->table_element]['label'][$key];
@@ -5179,25 +5179,25 @@  discard block
 block discarded – undo
5179 5179
 			switch ($attributeType)
5180 5180
 			{
5181 5181
 				case 'int':
5182
-					if (!is_numeric($value) && $value!='')
5182
+					if (!is_numeric($value) && $value != '')
5183 5183
 					{
5184
-						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue",$attributeLabel);
5184
+						$this->errors[] = $langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5185 5185
 						return -1;
5186 5186
 					}
5187
-					elseif ($value=='')
5187
+					elseif ($value == '')
5188 5188
 					{
5189 5189
 						$this->array_options["options_".$key] = null;
5190 5190
 					}
5191 5191
 					break;
5192 5192
 				case 'double':
5193 5193
 					$value = price2num($value);
5194
-					if (!is_numeric($value) && $value!='')
5194
+					if (!is_numeric($value) && $value != '')
5195 5195
 					{
5196 5196
 						dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
5197
-						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5197
+						$this->errors[] = $langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5198 5198
 						return -1;
5199 5199
 					}
5200
-					elseif ($value=='')
5200
+					elseif ($value == '')
5201 5201
 					{
5202 5202
 						$this->array_options["options_".$key] = null;
5203 5203
 					}
@@ -5214,13 +5214,13 @@  discard block
 block discarded – undo
5214 5214
 					$this->array_options["options_".$key] = price2num($this->array_options["options_".$key]);
5215 5215
 					break;
5216 5216
 				case 'date':
5217
-					$this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5217
+					$this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]);
5218 5218
 					break;
5219 5219
 				case 'datetime':
5220
-					$this->array_options["options_".$key]=$this->db->idate($this->array_options["options_".$key]);
5220
+					$this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]);
5221 5221
 					break;
5222 5222
 				case 'link':
5223
-					$param_list=array_keys($attributeParam['options']);
5223
+					$param_list = array_keys($attributeParam['options']);
5224 5224
 					// 0 : ObjectName
5225 5225
 					// 1 : classPath
5226 5226
 					$InfoFieldList = explode(":", $param_list[0]);
@@ -5228,8 +5228,8 @@  discard block
 block discarded – undo
5228 5228
 					if ($value)
5229 5229
 					{
5230 5230
 						$object = new $InfoFieldList[0]($this->db);
5231
-						$object->fetch(0,$value);
5232
-						$this->array_options["options_".$key]=$object->id;
5231
+						$object->fetch(0, $value);
5232
+						$this->array_options["options_".$key] = $object->id;
5233 5233
 					}
5234 5234
 					break;
5235 5235
 			}
@@ -5238,24 +5238,24 @@  discard block
 block discarded – undo
5238 5238
 			$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key."='".$this->db->escape($this->array_options["options_".$key])."'";
5239 5239
 			$sql .= " WHERE fk_object = ".$this->id;
5240 5240
 			$resql = $this->db->query($sql);
5241
-			if (! $resql)
5241
+			if (!$resql)
5242 5242
 			{
5243 5243
 				$error++;
5244
-				$this->error=$this->db->lasterror();
5244
+				$this->error = $this->db->lasterror();
5245 5245
 			}
5246 5246
 
5247
-			if (! $error && $trigger)
5247
+			if (!$error && $trigger)
5248 5248
 			{
5249 5249
 				// Call trigger
5250
-				$this->context=array('extrafieldupdate'=>1);
5251
-				$result=$this->call_trigger($trigger, $userused);
5250
+				$this->context = array('extrafieldupdate'=>1);
5251
+				$result = $this->call_trigger($trigger, $userused);
5252 5252
 				if ($result < 0) $error++;
5253 5253
 				// End call trigger
5254 5254
 			}
5255 5255
 
5256 5256
 			if ($error)
5257 5257
 			{
5258
-				dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR);
5258
+				dol_syslog(get_class($this)."::".__METHOD__.$this->error, LOG_ERR);
5259 5259
 				$this->db->rollback();
5260 5260
 				return -1;
5261 5261
 			}
@@ -5282,71 +5282,71 @@  discard block
 block discarded – undo
5282 5282
 	 * @param  string|int		$morecss       Value for css to define style/length of field. May also be a numeric.
5283 5283
 	 * @return string
5284 5284
 	 */
5285
-	function showInputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $morecss=0)
5285
+	function showInputField($val, $key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = 0)
5286 5286
 	{
5287
-		global $conf,$langs,$form;
5287
+		global $conf, $langs, $form;
5288 5288
 
5289
-		if (! is_object($form))
5289
+		if (!is_object($form))
5290 5290
 		{
5291 5291
 			require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5292
-			$form=new Form($this->db);
5292
+			$form = new Form($this->db);
5293 5293
 		}
5294 5294
 
5295
-		$val=$this->fields[$key];
5295
+		$val = $this->fields[$key];
5296 5296
 
5297
-		$out='';
5298
-        $type='';
5297
+		$out = '';
5298
+        $type = '';
5299 5299
         $param = array();
5300
-        $param['options']=array();
5301
-        $size =$this->fields[$key]['size'];
5300
+        $param['options'] = array();
5301
+        $size = $this->fields[$key]['size'];
5302 5302
         // Because we work on extrafields
5303
-        if(preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)){
5304
-            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5305
-            $type ='link';
5306
-        } elseif(preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) {
5307
-            $param['options']=array($reg[1].':'.$reg[2]=>'N');
5308
-            $type ='link';
5309
-        } elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
5310
-            $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N');
5311
-            $type ='sellist';
5312
-        } elseif(preg_match('/varchar\((\d+)\)/', $val['type'],$reg)) {
5313
-            $param['options']=array();
5314
-            $type ='varchar';
5315
-            $size=$reg[1];
5316
-        } elseif(preg_match('/varchar/', $val['type'])) {
5317
-            $param['options']=array();
5318
-            $type ='varchar';
5319
-        } elseif(is_array($this->fields[$key]['arrayofkeyval'])) {
5320
-            $param['options']=$this->fields[$key]['arrayofkeyval'];
5321
-            $type ='select';
5303
+        if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) {
5304
+            $param['options'] = array($reg[1].':'.$reg[2]=>'N');
5305
+            $type = 'link';
5306
+        } elseif (preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) {
5307
+            $param['options'] = array($reg[1].':'.$reg[2]=>'N');
5308
+            $type = 'link';
5309
+        } elseif (preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
5310
+            $param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N');
5311
+            $type = 'sellist';
5312
+        } elseif (preg_match('/varchar\((\d+)\)/', $val['type'], $reg)) {
5313
+            $param['options'] = array();
5314
+            $type = 'varchar';
5315
+            $size = $reg[1];
5316
+        } elseif (preg_match('/varchar/', $val['type'])) {
5317
+            $param['options'] = array();
5318
+            $type = 'varchar';
5319
+        } elseif (is_array($this->fields[$key]['arrayofkeyval'])) {
5320
+            $param['options'] = $this->fields[$key]['arrayofkeyval'];
5321
+            $type = 'select';
5322 5322
         } else {
5323
-            $param['options']=array();
5324
-            $type =$this->fields[$key]['type'];
5323
+            $param['options'] = array();
5324
+            $type = $this->fields[$key]['type'];
5325 5325
         }
5326 5326
 
5327
-		$label=$this->fields[$key]['label'];
5327
+		$label = $this->fields[$key]['label'];
5328 5328
 		//$elementtype=$this->fields[$key]['elementtype'];	// Seems not used
5329
-		$default=$this->fields[$key]['default'];
5330
-		$computed=$this->fields[$key]['computed'];
5331
-		$unique=$this->fields[$key]['unique'];
5332
-		$required=$this->fields[$key]['required'];
5329
+		$default = $this->fields[$key]['default'];
5330
+		$computed = $this->fields[$key]['computed'];
5331
+		$unique = $this->fields[$key]['unique'];
5332
+		$required = $this->fields[$key]['required'];
5333 5333
 
5334
-		$langfile=$this->fields[$key]['langfile'];
5335
-		$list=$this->fields[$key]['list'];
5336
-		$hidden=abs($this->fields[$key]['visible'])!=1?1:0;
5334
+		$langfile = $this->fields[$key]['langfile'];
5335
+		$list = $this->fields[$key]['list'];
5336
+		$hidden = abs($this->fields[$key]['visible']) != 1 ? 1 : 0;
5337 5337
 
5338 5338
 		$objectid = $this->id;
5339 5339
 
5340 5340
 
5341 5341
 		if ($computed)
5342 5342
 		{
5343
-			if (! preg_match('/^search_/', $keyprefix)) return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5343
+			if (!preg_match('/^search_/', $keyprefix)) return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5344 5344
 			else return '';
5345 5345
 		}
5346 5346
 
5347 5347
 
5348 5348
 		// Use in priority showsize from parameters, then $val['css'] then autodefine
5349
-		if (empty($morecss) && ! empty($val['css']))
5349
+		if (empty($morecss) && !empty($val['css']))
5350 5350
 		{
5351 5351
 			$showsize = $val['css'];
5352 5352
 		}
@@ -5360,16 +5360,16 @@  discard block
 block discarded – undo
5360 5360
 			{
5361 5361
 				$morecss = 'minwidth200imp';
5362 5362
 			}
5363
-			elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5363
+			elseif (in_array($type, array('int', 'integer', 'price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/', $type))
5364 5364
 			{
5365 5365
 				$morecss = 'maxwidth75';
5366 5366
                         }elseif ($type == 'url')
5367 5367
 			{
5368
-				$morecss='minwidth400';
5368
+				$morecss = 'minwidth400';
5369 5369
 			}
5370 5370
 			elseif ($type == 'boolean')
5371 5371
 			{
5372
-				$morecss='';
5372
+				$morecss = '';
5373 5373
 			}
5374 5374
 			else
5375 5375
 			{
@@ -5388,12 +5388,12 @@  discard block
 block discarded – undo
5388 5388
 			}
5389 5389
 		}
5390 5390
 
5391
-		if (in_array($type,array('date','datetime')))
5391
+		if (in_array($type, array('date', 'datetime')))
5392 5392
 		{
5393
-			$tmp=explode(',',$size);
5394
-			$newsize=$tmp[0];
5393
+			$tmp = explode(',', $size);
5394
+			$newsize = $tmp[0];
5395 5395
 
5396
-			$showtime = in_array($type,array('datetime')) ? 1 : 0;
5396
+			$showtime = in_array($type, array('datetime')) ? 1 : 0;
5397 5397
 
5398 5398
 			// Do not show current date when field not required (see selectDate() method)
5399 5399
 			if (!$required && $value == '') $value = '-1';
@@ -5401,235 +5401,235 @@  discard block
 block discarded – undo
5401 5401
 			// TODO Must also support $moreparam
5402 5402
 			$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
5403 5403
 		}
5404
-		elseif (in_array($type,array('int','integer')))
5404
+		elseif (in_array($type, array('int', 'integer')))
5405 5405
 		{
5406
-			$tmp=explode(',',$size);
5407
-			$newsize=$tmp[0];
5408
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5406
+			$tmp = explode(',', $size);
5407
+			$newsize = $tmp[0];
5408
+			$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam ? $moreparam : '').'>';
5409 5409
 		}
5410 5410
 		elseif (preg_match('/varchar/', $type))
5411 5411
 		{
5412
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5412
+			$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam ? $moreparam : '').'>';
5413 5413
 		}
5414 5414
 		elseif (in_array($type, array('mail', 'phone', 'url')))
5415 5415
 		{
5416
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5416
+			$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
5417 5417
 		}
5418 5418
 		elseif ($type == 'text')
5419 5419
 		{
5420
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5420
+			if (!preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5421 5421
 			{
5422 5422
 				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5423
-				$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,false,ROWS_5,'90%');
5424
-				$out=$doleditor->Create(1);
5423
+				$doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, false, ROWS_5, '90%');
5424
+				$out = $doleditor->Create(1);
5425 5425
 			}
5426 5426
 			else
5427 5427
 			{
5428
-				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5428
+				$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
5429 5429
 			}
5430 5430
 		}
5431 5431
 		elseif ($type == 'html')
5432 5432
 		{
5433
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5433
+			if (!preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5434 5434
 			{
5435 5435
 				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5436
-				$doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
5437
-                $out=$doleditor->Create(1);
5436
+				$doleditor = new DolEditor($keyprefix.$key.$keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
5437
+                $out = $doleditor->Create(1);
5438 5438
 			}
5439 5439
 			else
5440 5440
 			{
5441
-				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5441
+				$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam ? $moreparam : '').'>';
5442 5442
 			}
5443 5443
 		}
5444 5444
 		elseif ($type == 'boolean')
5445 5445
 		{
5446
-			$checked='';
5446
+			$checked = '';
5447 5447
 			if (!empty($value)) {
5448
-				$checked=' checked value="1" ';
5448
+				$checked = ' checked value="1" ';
5449 5449
 			} else {
5450
-				$checked=' value="1" ';
5450
+				$checked = ' value="1" ';
5451 5451
 			}
5452
-			$out='<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
5452
+			$out = '<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam ? $moreparam : '').'>';
5453 5453
 		}
5454 5454
 		elseif ($type == 'price')
5455 5455
 		{
5456 5456
 			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5457
-				$value=price($value);
5457
+				$value = price($value);
5458 5458
 			}
5459
-			$out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ' . $langs->getCurrencySymbol(Globals::$conf->currency);
5459
+			$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'> '.$langs->getCurrencySymbol(Globals::$conf->currency);
5460 5460
         }
5461
-		elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5461
+		elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/', $type))
5462 5462
 		{
5463 5463
 			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5464
-				$value=price($value);
5464
+				$value = price($value);
5465 5465
 			}
5466
-			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
5466
+			$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'> ';
5467 5467
 		}
5468 5468
 		elseif ($type == 'select')
5469 5469
 		{
5470 5470
 			$out = '';
5471 5471
 			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5472
-				include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5473
-				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5472
+				include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
5473
+				$out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5474 5474
 			}
5475 5475
 
5476
-			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5477
-                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1))$out.='<option value="0">&nbsp;</option>';
5476
+			$out .= '<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '').'>';
5477
+                if ((!isset($this->fields[$key]['default'])) || ($this->fields[$key]['notnull'] != 1))$out .= '<option value="0">&nbsp;</option>';
5478 5478
 			foreach ($param['options'] as $key => $val)
5479 5479
 			{
5480 5480
 				if ((string) $key == '') continue;
5481 5481
 				list($val, $parent) = explode('|', $val);
5482
-				$out.='<option value="'.$key.'"';
5483
-				$out.= (((string) $value == (string) $key)?' selected':'');
5484
-				$out.= (!empty($parent)?' parent="'.$parent.'"':'');
5485
-				$out.='>'.$val.'</option>';
5482
+				$out .= '<option value="'.$key.'"';
5483
+				$out .= (((string) $value == (string) $key) ? ' selected' : '');
5484
+				$out .= (!empty($parent) ? ' parent="'.$parent.'"' : '');
5485
+				$out .= '>'.$val.'</option>';
5486 5486
 			}
5487
-			$out.='</select>';
5487
+			$out .= '</select>';
5488 5488
 		}
5489 5489
 		elseif ($type == 'sellist')
5490 5490
 		{
5491 5491
 			$out = '';
5492 5492
 			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
5493
-				include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
5494
-				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5493
+				include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
5494
+				$out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
5495 5495
 			}
5496 5496
 
5497
-			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5497
+			$out .= '<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '').'>';
5498 5498
 			if (is_array($param['options']))
5499 5499
 			{
5500
-				$param_list=array_keys($param['options']);
5500
+				$param_list = array_keys($param['options']);
5501 5501
 				$InfoFieldList = explode(":", $param_list[0]);
5502
-				$parentName='';
5503
-				$parentField='';
5502
+				$parentName = '';
5503
+				$parentField = '';
5504 5504
 				// 0 : tableName
5505 5505
 				// 1 : label field name
5506 5506
 				// 2 : key fields name (if differ of rowid)
5507 5507
 				// 3 : key field parent (for dependent lists)
5508 5508
 				// 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5509
-				$keyList=(empty($InfoFieldList[2])?'rowid':$InfoFieldList[2].' as rowid');
5509
+				$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
5510 5510
 
5511 5511
 
5512
-				if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4]))
5512
+				if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4]))
5513 5513
 				{
5514 5514
 					if (strpos($InfoFieldList[4], 'extra.') !== false)
5515 5515
 					{
5516
-						$keyList='main.'.$InfoFieldList[2].' as rowid';
5516
+						$keyList = 'main.'.$InfoFieldList[2].' as rowid';
5517 5517
 					} else {
5518
-						$keyList=$InfoFieldList[2].' as rowid';
5518
+						$keyList = $InfoFieldList[2].' as rowid';
5519 5519
 					}
5520 5520
 				}
5521
-				if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3]))
5521
+				if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3]))
5522 5522
 				{
5523 5523
 					list($parentName, $parentField) = explode('|', $InfoFieldList[3]);
5524
-					$keyList.= ', '.$parentField;
5524
+					$keyList .= ', '.$parentField;
5525 5525
 				}
5526 5526
 
5527
-				$fields_label = explode('|',$InfoFieldList[1]);
5527
+				$fields_label = explode('|', $InfoFieldList[1]);
5528 5528
 				if (is_array($fields_label))
5529 5529
 				{
5530
-					$keyList .=', ';
5530
+					$keyList .= ', ';
5531 5531
 					$keyList .= implode(', ', $fields_label);
5532 5532
 				}
5533 5533
 
5534
-				$sqlwhere='';
5534
+				$sqlwhere = '';
5535 5535
 				$sql = 'SELECT '.$keyList;
5536
-				$sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
5536
+				$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
5537 5537
 				if (!empty($InfoFieldList[4]))
5538 5538
 				{
5539 5539
 					// can use SELECT request
5540
-					if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5541
-						$InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5540
+					if (strpos($InfoFieldList[4], '$SEL$') !== false) {
5541
+						$InfoFieldList[4] = str_replace('$SEL$', 'SELECT', $InfoFieldList[4]);
5542 5542
 					}
5543 5543
 
5544 5544
 					// current object id can be use into filter
5545
-					if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5546
-						$InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5545
+					if (strpos($InfoFieldList[4], '$ID$') !== false && !empty($objectid)) {
5546
+						$InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]);
5547 5547
 					} else {
5548
-						$InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5548
+						$InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
5549 5549
 					}
5550 5550
 					//We have to join on extrafield table
5551
-					if (strpos($InfoFieldList[4], 'extra')!==false)
5551
+					if (strpos($InfoFieldList[4], 'extra') !== false)
5552 5552
 					{
5553
-						$sql.= ' as main, '.MAIN_DB_PREFIX .$InfoFieldList[0].'_extrafields as extra';
5554
-						$sqlwhere.= ' WHERE extra.fk_object=main.'.$InfoFieldList[2]. ' AND '.$InfoFieldList[4];
5553
+						$sql .= ' as main, '.MAIN_DB_PREFIX.$InfoFieldList[0].'_extrafields as extra';
5554
+						$sqlwhere .= ' WHERE extra.fk_object=main.'.$InfoFieldList[2].' AND '.$InfoFieldList[4];
5555 5555
 					}
5556 5556
 					else
5557 5557
 					{
5558
-						$sqlwhere.= ' WHERE '.$InfoFieldList[4];
5558
+						$sqlwhere .= ' WHERE '.$InfoFieldList[4];
5559 5559
 					}
5560 5560
 				}
5561 5561
 				else
5562 5562
 				{
5563
-					$sqlwhere.= ' WHERE 1=1';
5563
+					$sqlwhere .= ' WHERE 1=1';
5564 5564
 				}
5565 5565
 				// Some tables may have field, some other not. For the moment we disable it.
5566
-				if (in_array($InfoFieldList[0],array('tablewithentity')))
5566
+				if (in_array($InfoFieldList[0], array('tablewithentity')))
5567 5567
 				{
5568
-					$sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5568
+					$sqlwhere .= ' AND entity = '.Globals::$conf->entity;
5569 5569
                 }
5570
-				$sql.=$sqlwhere;
5570
+				$sql .= $sqlwhere;
5571 5571
 				//print $sql;
5572 5572
 
5573
-				$sql .= ' ORDER BY ' . implode(', ', $fields_label);
5573
+				$sql .= ' ORDER BY '.implode(', ', $fields_label);
5574 5574
 
5575 5575
 				dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG);
5576 5576
 				$resql = $this->db->query($sql);
5577 5577
 				if ($resql)
5578 5578
 				{
5579
-					$out.='<option value="0">&nbsp;</option>';
5579
+					$out .= '<option value="0">&nbsp;</option>';
5580 5580
 					$num = $this->db->num_rows($resql);
5581 5581
 					$i = 0;
5582 5582
 					while ($i < $num)
5583 5583
 					{
5584
-						$labeltoshow='';
5584
+						$labeltoshow = '';
5585 5585
 						$obj = $this->db->fetch_object($resql);
5586 5586
 
5587 5587
 						// Several field into label (eq table:code|libelle:rowid)
5588 5588
 						$notrans = false;
5589
-						$fields_label = explode('|',$InfoFieldList[1]);
5589
+						$fields_label = explode('|', $InfoFieldList[1]);
5590 5590
 						if (is_array($fields_label))
5591 5591
 						{
5592 5592
 							$notrans = true;
5593 5593
 							foreach ($fields_label as $field_toshow)
5594 5594
 							{
5595
-								$labeltoshow.= $obj->$field_toshow.' ';
5595
+								$labeltoshow .= $obj->$field_toshow.' ';
5596 5596
 							}
5597 5597
 						}
5598 5598
 						else
5599 5599
 						{
5600
-							$labeltoshow=$obj->{$InfoFieldList[1]};
5600
+							$labeltoshow = $obj->{$InfoFieldList[1]};
5601 5601
 						}
5602
-						$labeltoshow=dol_trunc($labeltoshow,45);
5602
+						$labeltoshow = dol_trunc($labeltoshow, 45);
5603 5603
 
5604 5604
 						if ($value == $obj->rowid)
5605 5605
 						{
5606 5606
 							foreach ($fields_label as $field_toshow)
5607 5607
 							{
5608
-								$translabel=$langs->trans($obj->$field_toshow);
5609
-								if ($translabel!=$obj->$field_toshow) {
5610
-									$labeltoshow=dol_trunc($translabel,18).' ';
5611
-								}else {
5612
-									$labeltoshow=dol_trunc($obj->$field_toshow,18).' ';
5608
+								$translabel = $langs->trans($obj->$field_toshow);
5609
+								if ($translabel != $obj->$field_toshow) {
5610
+									$labeltoshow = dol_trunc($translabel, 18).' ';
5611
+								} else {
5612
+									$labeltoshow = dol_trunc($obj->$field_toshow, 18).' ';
5613 5613
 								}
5614 5614
 							}
5615
-							$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5615
+							$out .= '<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5616 5616
 						}
5617 5617
 						else
5618 5618
 						{
5619
-							if (! $notrans)
5619
+							if (!$notrans)
5620 5620
 							{
5621
-								$translabel=$langs->trans($obj->{$InfoFieldList[1]});
5622
-								if ($translabel!=$obj->{$InfoFieldList[1]}) {
5623
-									$labeltoshow=dol_trunc($translabel,18);
5621
+								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
5622
+								if ($translabel != $obj->{$InfoFieldList[1]}) {
5623
+									$labeltoshow = dol_trunc($translabel, 18);
5624 5624
 								}
5625 5625
 								else {
5626
-									$labeltoshow=dol_trunc($obj->{$InfoFieldList[1]},18);
5626
+									$labeltoshow = dol_trunc($obj->{$InfoFieldList[1]},18);
5627 5627
 								}
5628 5628
 							}
5629
-							if (empty($labeltoshow)) $labeltoshow='(not defined)';
5630
-							if ($value==$obj->rowid)
5629
+							if (empty($labeltoshow)) $labeltoshow = '(not defined)';
5630
+							if ($value == $obj->rowid)
5631 5631
 							{
5632
-								$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5632
+								$out .= '<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5633 5633
 							}
5634 5634
 
5635 5635
 							if (!empty($InfoFieldList[3]) && $parentField)
@@ -5637,10 +5637,10 @@  discard block
 block discarded – undo
5637 5637
 								$parent = $parentName.':'.$obj->{$parentField};
5638 5638
 							}
5639 5639
 
5640
-							$out.='<option value="'.$obj->rowid.'"';
5641
-							$out.= ($value==$obj->rowid?' selected':'');
5642
-							$out.= (!empty($parent)?' parent="'.$parent.'"':'');
5643
-							$out.='>'.$labeltoshow.'</option>';
5640
+							$out .= '<option value="'.$obj->rowid.'"';
5641
+							$out .= ($value == $obj->rowid ? ' selected' : '');
5642
+							$out .= (!empty($parent) ? ' parent="'.$parent.'"' : '');
5643
+							$out .= '>'.$labeltoshow.'</option>';
5644 5644
 						}
5645 5645
 
5646 5646
 						$i++;
@@ -5651,23 +5651,23 @@  discard block
 block discarded – undo
5651 5651
 					print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.<br>';
5652 5652
 				}
5653 5653
 			}
5654
-			$out.='</select>';
5654
+			$out .= '</select>';
5655 5655
 		}
5656 5656
 		elseif ($type == 'checkbox')
5657 5657
 		{
5658
-			$value_arr=explode(',',$value);
5659
-			$out=$form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options'])?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
5658
+			$value_arr = explode(',', $value);
5659
+			$out = $form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options']) ?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
5660 5660
 		}
5661 5661
 		elseif ($type == 'radio')
5662 5662
 		{
5663
-			$out='';
5663
+			$out = '';
5664 5664
 			foreach ($param['options'] as $keyopt => $val)
5665 5665
 			{
5666
-				$out.='<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'');
5667
-				$out.=' value="'.$keyopt.'"';
5668
-				$out.=' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
5669
-				$out.= ($value==$keyopt?'checked':'');
5670
-				$out.='/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
5666
+				$out .= '<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam ? $moreparam : '');
5667
+				$out .= ' value="'.$keyopt.'"';
5668
+				$out .= ' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
5669
+				$out .= ($value == $keyopt ? 'checked' : '');
5670
+				$out .= '/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
5671 5671
 			}
5672 5672
 		}
5673 5673
 		elseif ($type == 'chkbxlst')
@@ -5682,24 +5682,24 @@  discard block
 block discarded – undo
5682 5682
 			if (is_array($param['options'])) {
5683 5683
 				$param_list = array_keys($param['options']);
5684 5684
 				$InfoFieldList = explode(":", $param_list[0]);
5685
-				$parentName='';
5686
-				$parentField='';
5685
+				$parentName = '';
5686
+				$parentField = '';
5687 5687
 				// 0 : tableName
5688 5688
 				// 1 : label field name
5689 5689
 				// 2 : key fields name (if differ of rowid)
5690 5690
 				// 3 : key field parent (for dependent lists)
5691 5691
 				// 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
5692
-				$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
5692
+				$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
5693 5693
 
5694
-				if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) {
5695
-					list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]);
5696
-					$keyList .= ', ' . $parentField;
5694
+				if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3])) {
5695
+					list ($parentName, $parentField) = explode('|', $InfoFieldList[3]);
5696
+					$keyList .= ', '.$parentField;
5697 5697
 				}
5698
-				if (count($InfoFieldList) > 4 && ! empty($InfoFieldList[4])) {
5698
+				if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
5699 5699
 					if (strpos($InfoFieldList[4], 'extra.') !== false) {
5700
-						$keyList = 'main.' . $InfoFieldList[2] . ' as rowid';
5700
+						$keyList = 'main.'.$InfoFieldList[2].' as rowid';
5701 5701
 					} else {
5702
-						$keyList = $InfoFieldList[2] . ' as rowid';
5702
+						$keyList = $InfoFieldList[2].' as rowid';
5703 5703
 					}
5704 5704
 				}
5705 5705
 
@@ -5710,50 +5710,50 @@  discard block
 block discarded – undo
5710 5710
 				}
5711 5711
 
5712 5712
 				$sqlwhere = '';
5713
-				$sql = 'SELECT ' . $keyList;
5714
-				$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
5715
-				if (! empty($InfoFieldList[4])) {
5713
+				$sql = 'SELECT '.$keyList;
5714
+				$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
5715
+				if (!empty($InfoFieldList[4])) {
5716 5716
 
5717 5717
 					// can use SELECT request
5718
-					if (strpos($InfoFieldList[4], '$SEL$')!==false) {
5719
-						$InfoFieldList[4]=str_replace('$SEL$','SELECT',$InfoFieldList[4]);
5718
+					if (strpos($InfoFieldList[4], '$SEL$') !== false) {
5719
+						$InfoFieldList[4] = str_replace('$SEL$', 'SELECT', $InfoFieldList[4]);
5720 5720
 					}
5721 5721
 
5722 5722
 					// current object id can be use into filter
5723
-					if (strpos($InfoFieldList[4], '$ID$')!==false && !empty($objectid)) {
5724
-						$InfoFieldList[4]=str_replace('$ID$',$objectid,$InfoFieldList[4]);
5723
+					if (strpos($InfoFieldList[4], '$ID$') !== false && !empty($objectid)) {
5724
+						$InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]);
5725 5725
 					} else {
5726
-						$InfoFieldList[4]=str_replace('$ID$','0',$InfoFieldList[4]);
5726
+						$InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]);
5727 5727
 					}
5728 5728
 
5729 5729
 					// We have to join on extrafield table
5730 5730
 					if (strpos($InfoFieldList[4], 'extra') !== false) {
5731
-						$sql .= ' as main, ' . MAIN_DB_PREFIX . $InfoFieldList[0] . '_extrafields as extra';
5732
-						$sqlwhere .= ' WHERE extra.fk_object=main.' . $InfoFieldList[2] . ' AND ' . $InfoFieldList[4];
5731
+						$sql .= ' as main, '.MAIN_DB_PREFIX.$InfoFieldList[0].'_extrafields as extra';
5732
+						$sqlwhere .= ' WHERE extra.fk_object=main.'.$InfoFieldList[2].' AND '.$InfoFieldList[4];
5733 5733
 					} else {
5734
-						$sqlwhere .= ' WHERE ' . $InfoFieldList[4];
5734
+						$sqlwhere .= ' WHERE '.$InfoFieldList[4];
5735 5735
 					}
5736 5736
 				} else {
5737 5737
 					$sqlwhere .= ' WHERE 1=1';
5738 5738
 				}
5739 5739
 				// Some tables may have field, some other not. For the moment we disable it.
5740
-				if (in_array($InfoFieldList[0], array ('tablewithentity')))
5740
+				if (in_array($InfoFieldList[0], array('tablewithentity')))
5741 5741
 				{
5742
-					$sqlwhere .= ' AND entity = ' . Globals::$conf->entity;
5742
+					$sqlwhere .= ' AND entity = '.Globals::$conf->entity;
5743 5743
                 }
5744 5744
 				// $sql.=preg_replace('/^ AND /','',$sqlwhere);
5745 5745
 				// print $sql;
5746 5746
 
5747 5747
 				$sql .= $sqlwhere;
5748
-				dol_syslog(get_class($this) . '::showInputField type=chkbxlst',LOG_DEBUG);
5748
+				dol_syslog(get_class($this).'::showInputField type=chkbxlst', LOG_DEBUG);
5749 5749
 				$resql = $this->db->query($sql);
5750 5750
 				if ($resql) {
5751 5751
 					$num = $this->db->num_rows($resql);
5752 5752
 					$i = 0;
5753 5753
 
5754
-					$data=array();
5754
+					$data = array();
5755 5755
 
5756
-					while ( $i < $num ) {
5756
+					while ($i < $num) {
5757 5757
 						$labeltoshow = '';
5758 5758
 						$obj = $this->db->fetch_object($resql);
5759 5759
 
@@ -5762,8 +5762,8 @@  discard block
 block discarded – undo
5762 5762
 						$fields_label = explode('|', $InfoFieldList[1]);
5763 5763
 						if (is_array($fields_label)) {
5764 5764
 							$notrans = true;
5765
-							foreach ( $fields_label as $field_toshow ) {
5766
-								$labeltoshow .= $obj->$field_toshow . ' ';
5765
+							foreach ($fields_label as $field_toshow) {
5766
+								$labeltoshow .= $obj->$field_toshow.' ';
5767 5767
 							}
5768 5768
 						} else {
5769 5769
 							$labeltoshow = $obj->{$InfoFieldList[1]};
@@ -5771,18 +5771,18 @@  discard block
 block discarded – undo
5771 5771
 						$labeltoshow = dol_trunc($labeltoshow, 45);
5772 5772
 
5773 5773
 						if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5774
-							foreach ( $fields_label as $field_toshow ) {
5774
+							foreach ($fields_label as $field_toshow) {
5775 5775
 								$translabel = $langs->trans($obj->$field_toshow);
5776 5776
 								if ($translabel != $obj->$field_toshow) {
5777
-									$labeltoshow = dol_trunc($translabel, 18) . ' ';
5777
+									$labeltoshow = dol_trunc($translabel, 18).' ';
5778 5778
 								} else {
5779
-									$labeltoshow = dol_trunc($obj->$field_toshow, 18) . ' ';
5779
+									$labeltoshow = dol_trunc($obj->$field_toshow, 18).' ';
5780 5780
 								}
5781 5781
 							}
5782 5782
 
5783
-							$data[$obj->rowid]=$labeltoshow;
5783
+							$data[$obj->rowid] = $labeltoshow;
5784 5784
 						} else {
5785
-							if (! $notrans) {
5785
+							if (!$notrans) {
5786 5786
 								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
5787 5787
 								if ($translabel != $obj->{$InfoFieldList[1]}) {
5788 5788
 									$labeltoshow = dol_trunc($translabel, 18);
@@ -5794,66 +5794,66 @@  discard block
 block discarded – undo
5794 5794
 								$labeltoshow = '(not defined)';
5795 5795
 
5796 5796
 								if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5797
-									$data[$obj->rowid]=$labeltoshow;
5797
+									$data[$obj->rowid] = $labeltoshow;
5798 5798
 								}
5799 5799
 
5800
-								if (! empty($InfoFieldList[3]) && $parentField) {
5801
-									$parent = $parentName . ':' . $obj->{$parentField};
5800
+								if (!empty($InfoFieldList[3]) && $parentField) {
5801
+									$parent = $parentName.':'.$obj->{$parentField};
5802 5802
 								}
5803 5803
 
5804
-								$data[$obj->rowid]=$labeltoshow;
5804
+								$data[$obj->rowid] = $labeltoshow;
5805 5805
 						}
5806 5806
 
5807
-						$i ++;
5807
+						$i++;
5808 5808
 					}
5809 5809
 					$this->db->free($resql);
5810 5810
 
5811
-					$out=$form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
5811
+					$out = $form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
5812 5812
 				} else {
5813
-					print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
5813
+					print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.<br>';
5814 5814
 				}
5815 5815
 			}
5816 5816
 		}
5817 5817
 		elseif ($type == 'link')
5818 5818
 		{
5819
-			$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
5820
-			$showempty=(($required && $default != '')?0:1);
5821
-			$out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
5819
+			$param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
5820
+			$showempty = (($required && $default != '') ? 0 : 1);
5821
+			$out = $form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
5822 5822
 			if (Globals::$conf->global->MAIN_FEATURES_LEVEL >= 2) {
5823
-            			list($class,$classfile)=explode(':',$param_list[0]);
5824
-            			if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php',1);
5825
-            			else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php',1);
5826
-            			$out.='<a class="butActionNew" href="'.$url_path.'?action=create&backtopage='.$_SERVER['PHP_SELF'].'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5823
+            			list($class, $classfile) = explode(':', $param_list[0]);
5824
+            			if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path = dol_buildpath(dirname(dirname($classfile)).'/card.php', 1);
5825
+            			else $url_path = dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php', 1);
5826
+            			$out .= '<a class="butActionNew" href="'.$url_path.'?action=create&backtopage='.$_SERVER['PHP_SELF'].'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5827 5827
             			// TODO Add Javascript code to add input fields contents to new elements urls
5828 5828
 			}
5829 5829
 		}
5830 5830
 		elseif ($type == 'password')
5831 5831
 		{
5832 5832
 			// If prefix is 'search_', field is used as a filter, we use a common text field.
5833
-			$out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
5833
+			$out = '<input type="'.($keyprefix == 'search_' ? 'text' : 'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam ? $moreparam : '').'>';
5834 5834
 		}
5835 5835
 		elseif ($type == 'array')
5836 5836
 		{
5837 5837
 			$newval = $val;
5838 5838
 			$newval['type'] = 'varchar(256)';
5839 5839
 
5840
-			$out='';
5840
+			$out = '';
5841 5841
 
5842 5842
 			$inputs = array();
5843
-			if(! empty($value)) {
5844
-				foreach($value as $option) {
5845
-					$out.= '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5846
-					$out.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', $option, $moreparam, '', '', $showsize).'<br></span>';
5843
+			if (!empty($value)) {
5844
+				foreach ($value as $option) {
5845
+					$out .= '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5846
+					$out .= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', $option, $moreparam, '', '', $showsize).'<br></span>';
5847 5847
 				}
5848 5848
 			}
5849 5849
 
5850
-			$out.= '<a id="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_add" href="javascript:;"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5850
+			$out .= '<a id="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_add" href="javascript:;"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5851 5851
 
5852 5852
 			$newInput = '<span><a class="'.dol_escape_htmltag($keyprefix.$key.$keysuffix).'_del" href="javascript:;"><span class="fa fa-minus-circle valignmiddle"></span></a> ';
5853
-			$newInput.= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', '', $moreparam, '', '', $showsize).'<br></span>';
5853
+			$newInput .= $this->showInputField($newval, $keyprefix.$key.$keysuffix.'[]', '', $moreparam, '', '', $showsize).'<br></span>';
5854 5854
 
5855 5855
 			if (!empty(Globals::$conf->use_javascript_ajax)) {
5856
-                $out.= '
5856
+                $out .= '
5857 5857
 					<script type="text/javascript">
5858 5858
 					$(document).ready(function() {
5859 5859
 						$("a#'.dol_escape_js($keyprefix.$key.$keysuffix).'_add").click(function() {
@@ -5868,7 +5868,7 @@  discard block
 block discarded – undo
5868 5868
 			}
5869 5869
 		}
5870 5870
 		if (!empty($hidden)) {
5871
-			$out='<input type="hidden" value="'.$value.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'"/>';
5871
+			$out = '<input type="hidden" value="'.$value.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'"/>';
5872 5872
 		}
5873 5873
 		/* Add comments
5874 5874
 		 if ($type == 'date') $out.=' (YYYY-MM-DD)';
@@ -5890,14 +5890,14 @@  discard block
 block discarded – undo
5890 5890
 	 * @param  mixed   $showsize       Value for css to define size. May also be a numeric.
5891 5891
 	 * @return string
5892 5892
 	 */
5893
-	function showOutputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $showsize=0)
5893
+	function showOutputField($val, $key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $showsize = 0)
5894 5894
 	{
5895
-		global $conf,$langs,$form;
5895
+		global $conf, $langs, $form;
5896 5896
 
5897
-		if (! is_object($form))
5897
+		if (!is_object($form))
5898 5898
 		{
5899 5899
 			require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
5900
-			$form=new Form($this->db);
5900
+			$form = new Form($this->db);
5901 5901
 		}
5902 5902
 
5903 5903
 		$objectid = $this->id;
@@ -5908,28 +5908,28 @@  discard block
 block discarded – undo
5908 5908
 		// Convert var to be able to share same code than showOutputField of extrafields
5909 5909
 		if (preg_match('/varchar\((\d+)\)/', $type, $reg))
5910 5910
 		{
5911
-			$type = 'varchar';		// convert varchar(xx) int varchar
5911
+			$type = 'varchar'; // convert varchar(xx) int varchar
5912 5912
 			$size = $reg[1];
5913 5913
 		}
5914
-		elseif (preg_match('/varchar/', $type)) $type = 'varchar';		// convert varchar(xx) int varchar
5915
-		if (is_array($val['arrayofkeyval'])) $type='select';
5916
-		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type='link';
5914
+		elseif (preg_match('/varchar/', $type)) $type = 'varchar'; // convert varchar(xx) int varchar
5915
+		if (is_array($val['arrayofkeyval'])) $type = 'select';
5916
+		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type = 'link';
5917 5917
 
5918
-		$default=$val['default'];
5919
-		$computed=$val['computed'];
5920
-		$unique=$val['unique'];
5921
-		$required=$val['required'];
5922
-		$param=$val['param'];
5918
+		$default = $val['default'];
5919
+		$computed = $val['computed'];
5920
+		$unique = $val['unique'];
5921
+		$required = $val['required'];
5922
+		$param = $val['param'];
5923 5923
 		if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
5924 5924
 		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
5925 5925
 		{
5926
-			$type='link';
5927
-			$param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
5926
+			$type = 'link';
5927
+			$param['options'] = array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
5928 5928
 		}
5929
-		$langfile=$val['langfile'];
5930
-		$list=$val['list'];
5931
-		$help=$val['help'];
5932
-		$hidden=(($val['visible'] == 0) ? 1 : 0);			// If zero, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
5929
+		$langfile = $val['langfile'];
5930
+		$list = $val['list'];
5931
+		$help = $val['help'];
5932
+		$hidden = (($val['visible'] == 0) ? 1 : 0); // If zero, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
5933 5933
 
5934 5934
 		if ($hidden) return '';
5935 5935
 
@@ -5953,18 +5953,18 @@  discard block
 block discarded – undo
5953 5953
 				//$showsize=19;
5954 5954
 				$showsize = 'minwidth200imp';
5955 5955
 			}
5956
-			elseif (in_array($type,array('int','double','price')))
5956
+			elseif (in_array($type, array('int', 'double', 'price')))
5957 5957
 			{
5958 5958
 				//$showsize=10;
5959 5959
 				$showsize = 'maxwidth75';
5960 5960
 			}
5961 5961
 			elseif ($type == 'url')
5962 5962
 			{
5963
-				$showsize='minwidth400';
5963
+				$showsize = 'minwidth400';
5964 5964
 			}
5965 5965
 			elseif ($type == 'boolean')
5966 5966
 			{
5967
-				$showsize='';
5967
+				$showsize = '';
5968 5968
 			}
5969 5969
 			else
5970 5970
 			{
@@ -5985,49 +5985,49 @@  discard block
 block discarded – undo
5985 5985
 		}
5986 5986
 
5987 5987
 		// Format output value differently according to properties of field
5988
-		if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value=$this->getNomUrl(1, '', 0, '', 1);
5989
-		elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value=$this->getLibStatut(3);
5988
+		if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value = $this->getNomUrl(1, '', 0, '', 1);
5989
+		elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value = $this->getLibStatut(3);
5990 5990
 		elseif ($type == 'date')
5991 5991
 		{
5992
-			if(! empty($value)) {
5993
-				$value=dol_print_date($value,'day');
5992
+			if (!empty($value)) {
5993
+				$value = dol_print_date($value, 'day');
5994 5994
 			} else {
5995
-				$value='';
5995
+				$value = '';
5996 5996
 			}
5997 5997
 		}
5998 5998
 		elseif ($type == 'datetime')
5999 5999
 		{
6000
-			if(! empty($value)) {
6001
-				$value=dol_print_date($value,'dayhour');
6000
+			if (!empty($value)) {
6001
+				$value = dol_print_date($value, 'dayhour');
6002 6002
 			} else {
6003
-				$value='';
6003
+				$value = '';
6004 6004
 			}
6005 6005
 		}
6006 6006
 		elseif ($type == 'double')
6007 6007
 		{
6008 6008
 			if (!empty($value)) {
6009
-				$value=price($value);
6009
+				$value = price($value);
6010 6010
 			}
6011 6011
 		}
6012 6012
 		elseif ($type == 'boolean')
6013 6013
 		{
6014
-			$checked='';
6014
+			$checked = '';
6015 6015
 			if (!empty($value)) {
6016
-				$checked=' checked ';
6016
+				$checked = ' checked ';
6017 6017
 			}
6018
-			$value='<input type="checkbox" '.$checked.' '.($moreparam?$moreparam:'').' readonly disabled>';
6018
+			$value = '<input type="checkbox" '.$checked.' '.($moreparam ? $moreparam : '').' readonly disabled>';
6019 6019
 		}
6020 6020
 		elseif ($type == 'mail')
6021 6021
 		{
6022
-			$value=dol_print_email($value,0,0,0,64,1,1);
6022
+			$value = dol_print_email($value, 0, 0, 0, 64, 1, 1);
6023 6023
 		}
6024 6024
 		elseif ($type == 'url')
6025 6025
 		{
6026
-			$value=dol_print_url($value,'_blank',32,1);
6026
+			$value = dol_print_url($value, '_blank', 32, 1);
6027 6027
 		}
6028 6028
 		elseif ($type == 'phone')
6029 6029
 		{
6030
-			$value=dol_print_phone($value, '', 0, 0, '', '&nbsp;', 1);
6030
+			$value = dol_print_phone($value, '', 0, 0, '', '&nbsp;', 1);
6031 6031
 		}
6032 6032
 		elseif ($type == 'price')
6033 6033
 		{
@@ -6035,40 +6035,40 @@  discard block
 block discarded – undo
6035 6035
         }
6036 6036
 		elseif ($type == 'select')
6037 6037
 		{
6038
-			$value=$param['options'][$value];
6038
+			$value = $param['options'][$value];
6039 6039
 		}
6040 6040
 		elseif ($type == 'sellist')
6041 6041
 		{
6042
-			$param_list=array_keys($param['options']);
6042
+			$param_list = array_keys($param['options']);
6043 6043
 			$InfoFieldList = explode(":", $param_list[0]);
6044 6044
 
6045
-			$selectkey="rowid";
6046
-			$keyList='rowid';
6045
+			$selectkey = "rowid";
6046
+			$keyList = 'rowid';
6047 6047
 
6048
-			if (count($InfoFieldList)>=3)
6048
+			if (count($InfoFieldList) >= 3)
6049 6049
 			{
6050 6050
 				$selectkey = $InfoFieldList[2];
6051
-				$keyList=$InfoFieldList[2].' as rowid';
6051
+				$keyList = $InfoFieldList[2].' as rowid';
6052 6052
 			}
6053 6053
 
6054
-			$fields_label = explode('|',$InfoFieldList[1]);
6055
-			if(is_array($fields_label)) {
6056
-				$keyList .=', ';
6054
+			$fields_label = explode('|', $InfoFieldList[1]);
6055
+			if (is_array($fields_label)) {
6056
+				$keyList .= ', ';
6057 6057
 				$keyList .= implode(', ', $fields_label);
6058 6058
 			}
6059 6059
 
6060 6060
 			$sql = 'SELECT '.$keyList;
6061
-			$sql.= ' FROM '.MAIN_DB_PREFIX .$InfoFieldList[0];
6062
-			if (strpos($InfoFieldList[4], 'extra')!==false)
6061
+			$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
6062
+			if (strpos($InfoFieldList[4], 'extra') !== false)
6063 6063
 			{
6064
-				$sql.= ' as main';
6064
+				$sql .= ' as main';
6065 6065
 			}
6066
-			if ($selectkey=='rowid' && empty($value)) {
6067
-				$sql.= " WHERE ".$selectkey."=0";
6068
-			} elseif ($selectkey=='rowid') {
6069
-				$sql.= " WHERE ".$selectkey."=".$this->db->escape($value);
6070
-			}else {
6071
-				$sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6066
+			if ($selectkey == 'rowid' && empty($value)) {
6067
+				$sql .= " WHERE ".$selectkey."=0";
6068
+			} elseif ($selectkey == 'rowid') {
6069
+				$sql .= " WHERE ".$selectkey."=".$this->db->escape($value);
6070
+			} else {
6071
+				$sql .= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6072 6072
 			}
6073 6073
 
6074 6074
 			//$sql.= ' AND entity = '.Globals::$conf->entity;
@@ -6077,38 +6077,38 @@  discard block
 block discarded – undo
6077 6077
 			$resql = $this->db->query($sql);
6078 6078
 			if ($resql)
6079 6079
 			{
6080
-				$value='';	// value was used, so now we reste it to use it to build final output
6080
+				$value = ''; // value was used, so now we reste it to use it to build final output
6081 6081
 
6082 6082
 				$obj = $this->db->fetch_object($resql);
6083 6083
 
6084 6084
 				// Several field into label (eq table:code|libelle:rowid)
6085
-				$fields_label = explode('|',$InfoFieldList[1]);
6085
+				$fields_label = explode('|', $InfoFieldList[1]);
6086 6086
 
6087
-				if(is_array($fields_label) && count($fields_label)>1)
6087
+				if (is_array($fields_label) && count($fields_label) > 1)
6088 6088
 				{
6089 6089
 					foreach ($fields_label as $field_toshow)
6090 6090
 					{
6091
-						$translabel='';
6091
+						$translabel = '';
6092 6092
 						if (!empty($obj->$field_toshow)) {
6093
-							$translabel=$langs->trans($obj->$field_toshow);
6093
+							$translabel = $langs->trans($obj->$field_toshow);
6094 6094
 						}
6095
-						if ($translabel!=$field_toshow) {
6096
-							$value.=dol_trunc($translabel,18).' ';
6097
-						}else {
6098
-							$value.=$obj->$field_toshow.' ';
6095
+						if ($translabel != $field_toshow) {
6096
+							$value .= dol_trunc($translabel, 18).' ';
6097
+						} else {
6098
+							$value .= $obj->$field_toshow.' ';
6099 6099
 						}
6100 6100
 					}
6101 6101
 				}
6102 6102
 				else
6103 6103
 				{
6104
-					$translabel='';
6104
+					$translabel = '';
6105 6105
 					if (!empty($obj->{$InfoFieldList[1]})) {
6106
-						$translabel=$langs->trans($obj->{$InfoFieldList[1]});
6106
+						$translabel = $langs->trans($obj->{$InfoFieldList[1]});
6107 6107
 					}
6108
-					if ($translabel!=$obj->{$InfoFieldList[1]}) {
6109
-						$value=dol_trunc($translabel,18);
6110
-					}else {
6111
-						$value=$obj->{$InfoFieldList[1]};
6108
+					if ($translabel != $obj->{$InfoFieldList[1]}) {
6109
+						$value = dol_trunc($translabel, 18);
6110
+					} else {
6111
+						$value = $obj->{$InfoFieldList[1]};
6112 6112
 					}
6113 6113
 				}
6114 6114
 			}
@@ -6116,18 +6116,18 @@  discard block
 block discarded – undo
6116 6116
 		}
6117 6117
 		elseif ($type == 'radio')
6118 6118
 		{
6119
-			$value=$param['options'][$value];
6119
+			$value = $param['options'][$value];
6120 6120
 		}
6121 6121
 		elseif ($type == 'checkbox')
6122 6122
 		{
6123
-			$value_arr=explode(',',$value);
6124
-			$value='';
6125
-			if (is_array($value_arr) && count($value_arr)>0)
6123
+			$value_arr = explode(',', $value);
6124
+			$value = '';
6125
+			if (is_array($value_arr) && count($value_arr) > 0)
6126 6126
 			{
6127 6127
 				foreach ($value_arr as $keyval=>$valueval) {
6128
-					$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$param['options'][$valueval].'</li>';
6128
+					$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$param['options'][$valueval].'</li>';
6129 6129
 				}
6130
-				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6130
+				$value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6131 6131
 			}
6132 6132
 		}
6133 6133
 		elseif ($type == 'chkbxlst')
@@ -6142,7 +6142,7 @@  discard block
 block discarded – undo
6142 6142
 
6143 6143
 			if (count($InfoFieldList) >= 3) {
6144 6144
 				$selectkey = $InfoFieldList[2];
6145
-				$keyList = $InfoFieldList[2] . ' as rowid';
6145
+				$keyList = $InfoFieldList[2].' as rowid';
6146 6146
 			}
6147 6147
 
6148 6148
 			$fields_label = explode('|', $InfoFieldList[1]);
@@ -6151,75 +6151,75 @@  discard block
 block discarded – undo
6151 6151
 				$keyList .= implode(', ', $fields_label);
6152 6152
 			}
6153 6153
 
6154
-			$sql = 'SELECT ' . $keyList;
6155
-			$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
6154
+			$sql = 'SELECT '.$keyList;
6155
+			$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
6156 6156
 			if (strpos($InfoFieldList[4], 'extra') !== false) {
6157 6157
 				$sql .= ' as main';
6158 6158
 			}
6159 6159
 			// $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6160 6160
 			// $sql.= ' AND entity = '.Globals::$conf->entity;
6161 6161
 
6162
-            dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst',LOG_DEBUG);
6162
+            dol_syslog(get_class($this).':showOutputField:$type=chkbxlst', LOG_DEBUG);
6163 6163
 			$resql = $this->db->query($sql);
6164 6164
 			if ($resql) {
6165 6165
 				$value = ''; // value was used, so now we reste it to use it to build final output
6166
-				$toprint=array();
6167
-				while ( $obj = $this->db->fetch_object($resql) ) {
6166
+				$toprint = array();
6167
+				while ($obj = $this->db->fetch_object($resql)) {
6168 6168
 
6169 6169
 					// Several field into label (eq table:code|libelle:rowid)
6170 6170
 					$fields_label = explode('|', $InfoFieldList[1]);
6171 6171
 					if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
6172 6172
 						if (is_array($fields_label) && count($fields_label) > 1) {
6173
-							foreach ( $fields_label as $field_toshow ) {
6173
+							foreach ($fields_label as $field_toshow) {
6174 6174
 								$translabel = '';
6175
-								if (! empty($obj->$field_toshow)) {
6175
+								if (!empty($obj->$field_toshow)) {
6176 6176
 									$translabel = $langs->trans($obj->$field_toshow);
6177 6177
 								}
6178 6178
 								if ($translabel != $field_toshow) {
6179
-									$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6179
+									$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6180 6180
 								} else {
6181
-									$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
6181
+									$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
6182 6182
 								}
6183 6183
 							}
6184 6184
 						} else {
6185 6185
 							$translabel = '';
6186
-							if (! empty($obj->{$InfoFieldList[1]})) {
6186
+							if (!empty($obj->{$InfoFieldList[1]})) {
6187 6187
 								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
6188 6188
 							}
6189 6189
 							if ($translabel != $obj->{$InfoFieldList[1]}) {
6190
-								$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6190
+								$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
6191 6191
 							} else {
6192
-								$toprint[]='<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>';
6192
+								$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>';
6193 6193
 							}
6194 6194
 						}
6195 6195
 					}
6196 6196
 				}
6197
-				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6197
+				$value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6198 6198
 			} else {
6199
-				dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
6199
+				dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
6200 6200
 			}
6201 6201
 		}
6202 6202
 		elseif ($type == 'link')
6203 6203
 		{
6204
-			$out='';
6204
+			$out = '';
6205 6205
 
6206 6206
 			// only if something to display (perf)
6207 6207
 			if ($value)
6208 6208
 			{
6209
-				$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
6209
+				$param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
6210 6210
 
6211 6211
 				$InfoFieldList = explode(":", $param_list[0]);
6212
-				$classname=$InfoFieldList[0];
6213
-				$classpath=$InfoFieldList[1];
6214
-				$getnomurlparam=(empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]);
6215
-				if (! empty($classpath))
6212
+				$classname = $InfoFieldList[0];
6213
+				$classpath = $InfoFieldList[1];
6214
+				$getnomurlparam = (empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]);
6215
+				if (!empty($classpath))
6216 6216
 				{
6217 6217
 					dol_include_once($InfoFieldList[1]);
6218 6218
 					if ($classname && class_exists($classname))
6219 6219
 					{
6220 6220
 						$object = new $classname($this->db);
6221 6221
 						$object->fetch($value);
6222
-						$value=$object->getNomUrl($getnomurlparam);
6222
+						$value = $object->getNomUrl($getnomurlparam);
6223 6223
 					}
6224 6224
 				}
6225 6225
 				else
@@ -6228,15 +6228,15 @@  discard block
 block discarded – undo
6228 6228
 					return 'Error bad setup of extrafield';
6229 6229
 				}
6230 6230
 			}
6231
-			else $value='';
6231
+			else $value = '';
6232 6232
 		}
6233 6233
 		elseif ($type == 'text' || $type == 'html')
6234 6234
 		{
6235
-			$value=dol_htmlentitiesbr($value);
6235
+			$value = dol_htmlentitiesbr($value);
6236 6236
 		}
6237 6237
 		elseif ($type == 'password')
6238 6238
 		{
6239
-			$value=preg_replace('/./i','*',$value);
6239
+			$value = preg_replace('/./i', '*', $value);
6240 6240
 		}
6241 6241
 		elseif ($type == 'array')
6242 6242
 		{
@@ -6244,7 +6244,7 @@  discard block
 block discarded – undo
6244 6244
 		}
6245 6245
 
6246 6246
 		//print $type.'-'.$size;
6247
-		$out=$value;
6247
+		$out = $value;
6248 6248
 
6249 6249
 		return $out;
6250 6250
 	}
@@ -6261,11 +6261,11 @@  discard block
 block discarded – undo
6261 6261
 	 * @param	string		$onetrtd		All fields in same tr td
6262 6262
 	 * @return 	string
6263 6263
 	 */
6264
-	function showOptionals($extrafields, $mode='view', $params=null, $keysuffix='', $keyprefix='', $onetrtd=0)
6264
+	function showOptionals($extrafields, $mode = 'view', $params = null, $keysuffix = '', $keyprefix = '', $onetrtd = 0)
6265 6265
 	{
6266 6266
 		global $db, $conf, $langs, $action, $form;
6267 6267
 
6268
-		if (! is_object($form)) $form=new Form($db);
6268
+		if (!is_object($form)) $form = new Form($db);
6269 6269
 
6270 6270
 		$out = '';
6271 6271
 
@@ -6276,10 +6276,10 @@  discard block
 block discarded – undo
6276 6276
 			$out .= "\n";
6277 6277
 
6278 6278
 			$e = 0;
6279
-			foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
6279
+			foreach ($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
6280 6280
 			{
6281 6281
 				// Show only the key field in params
6282
-				if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) continue;
6282
+				if (is_array($params) && array_key_exists('onlykey', $params) && $key != $params['onlykey']) continue;
6283 6283
 
6284 6284
 				$enabled = 1;
6285 6285
 				if ($enabled && isset($extrafields->attributes[$this->table_element]['list'][$key]))
@@ -6293,25 +6293,25 @@  discard block
 block discarded – undo
6293 6293
 					$perms = dol_eval($extrafields->attributes[$this->table_element]['perms'][$key], 1);
6294 6294
 				}
6295 6295
 
6296
-				if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) continue;	// <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6296
+				if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) continue; // <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6297 6297
 				if (empty($perms)) continue;
6298 6298
 
6299 6299
 				// Load language if required
6300
-				if (! empty($extrafields->attributes[$this->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
6300
+				if (!empty($extrafields->attributes[$this->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
6301 6301
 
6302
-				$colspan='3';
6303
-				if (is_array($params) && count($params)>0) {
6304
-					if (array_key_exists('colspan',$params)) {
6305
-						$colspan=$params['colspan'];
6302
+				$colspan = '3';
6303
+				if (is_array($params) && count($params) > 0) {
6304
+					if (array_key_exists('colspan', $params)) {
6305
+						$colspan = $params['colspan'];
6306 6306
 					}
6307 6307
 				}
6308 6308
 
6309
-				switch($mode) {
6309
+				switch ($mode) {
6310 6310
 					case "view":
6311
-						$value=$this->array_options["options_".$key.$keysuffix];
6311
+						$value = $this->array_options["options_".$key.$keysuffix];
6312 6312
 						break;
6313 6313
 					case "edit":
6314
-						$getposttemp = GETPOST($keyprefix.'options_'.$key.$keysuffix, 'none');				// GETPOST can get value from GET, POST or setup of default values.
6314
+						$getposttemp = GETPOST($keyprefix.'options_'.$key.$keysuffix, 'none'); // GETPOST can get value from GET, POST or setup of default values.
6315 6315
 						// GETPOST("options_" . $key) can be 'abc' or array(0=>'abc')
6316 6316
 						if (is_array($getposttemp) || $getposttemp != '' || GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix))
6317 6317
 						{
@@ -6322,7 +6322,7 @@  discard block
 block discarded – undo
6322 6322
 								$value = $getposttemp;
6323 6323
 							}
6324 6324
 						} else {
6325
-							$value = $this->array_options["options_" . $key];			// No GET, no POST, no default value, so we take value of object.
6325
+							$value = $this->array_options["options_".$key]; // No GET, no POST, no default value, so we take value of object.
6326 6326
 						}
6327 6327
 						//var_dump($keyprefix.' - '.$key.' - '.$keysuffix.' - '.$keyprefix.'options_'.$key.$keysuffix.' - '.$this->array_options["options_".$key.$keysuffix].' - '.$getposttemp.' - '.$value);
6328 6328
 						break;
@@ -6334,11 +6334,11 @@  discard block
 block discarded – undo
6334 6334
 				}
6335 6335
 				else
6336 6336
 				{
6337
-					$csstyle='';
6338
-					$class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
6339
-					if (is_array($params) && count($params)>0) {
6340
-						if (array_key_exists('style',$params)) {
6341
-							$csstyle=$params['style'];
6337
+					$csstyle = '';
6338
+					$class = (!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
6339
+					if (is_array($params) && count($params) > 0) {
6340
+						if (array_key_exists('style', $params)) {
6341
+							$csstyle = $params['style'];
6342 6342
 						}
6343 6343
 					}
6344 6344
 
@@ -6360,35 +6360,35 @@  discard block
 block discarded – undo
6360 6360
 					if ($action == 'selectlines') { $colspan++; }
6361 6361
 
6362 6362
 					// Convert date into timestamp format (value in memory must be a timestamp)
6363
-					if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('date','datetime')))
6363
+					if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date', 'datetime')))
6364 6364
 					{
6365
-						$datenotinstring = $this->array_options['options_' . $key];
6366
-						if (! is_numeric($this->array_options['options_' . $key]))	// For backward compatibility
6365
+						$datenotinstring = $this->array_options['options_'.$key];
6366
+						if (!is_numeric($this->array_options['options_'.$key]))	// For backward compatibility
6367 6367
 						{
6368 6368
 							$datenotinstring = $this->db->jdate($datenotinstring);
6369 6369
 						}
6370
-						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min",'int',3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year",'int',3)):$datenotinstring;
6370
+						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix) ?dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min", 'int', 3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year", 'int', 3)) : $datenotinstring;
6371 6371
 					}
6372 6372
 					// Convert float submited string into real php numeric (value in memory must be a php numeric)
6373
-					if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('price','double')))
6373
+					if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('price', 'double')))
6374 6374
 					{
6375
-						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?price2num(GETPOST($keyprefix.'options_'.$key.$keysuffix, 'alpha', 3)):$this->array_options['options_'.$key];
6375
+						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix) ?price2num(GETPOST($keyprefix.'options_'.$key.$keysuffix, 'alpha', 3)) : $this->array_options['options_'.$key];
6376 6376
 					}
6377 6377
 
6378 6378
 					$labeltoshow = $langs->trans($label);
6379 6379
 
6380 6380
 					$out .= '<td class="titlefield';
6381
-					if (GETPOST('action','none') == 'create') $out.='create';
6382
-					if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
6381
+					if (GETPOST('action', 'none') == 'create') $out .= 'create';
6382
+					if ($mode != 'view' && !empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
6383 6383
 					$out .= '">';
6384
-					if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6384
+					if (!empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6385 6385
 					else $out .= $labeltoshow;
6386 6386
 					$out .= '</td>';
6387 6387
 
6388 6388
 					$html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : '';
6389
-					$out .='<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'" '.($colspan?' colspan="'.$colspan.'"':'').'>';
6389
+					$out .= '<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'" '.($colspan ? ' colspan="'.$colspan.'"' : '').'>';
6390 6390
 
6391
-					switch($mode) {
6391
+					switch ($mode) {
6392 6392
 						case "view":
6393 6393
 							$out .= $extrafields->showOutputField($key, $value);
6394 6394
 							break;
@@ -6453,7 +6453,7 @@  discard block
 block discarded – undo
6453 6453
 		global $user;
6454 6454
 
6455 6455
 		$element = $this->element;
6456
-		if ($element == 'facturerec') $element='facture';
6456
+		if ($element == 'facturerec') $element = 'facture';
6457 6457
 
6458 6458
 		return $user->rights->{$element};
6459 6459
 	}
@@ -6470,15 +6470,15 @@  discard block
 block discarded – undo
6470 6470
 	 * @param  int         $ignoreerrors  Ignore errors. Return true even if errors. We need this when replacement can fails like for categories (categorie of old thirdparty may already exists on new one)
6471 6471
 	 * @return bool						  True if success, False if error
6472 6472
 	 */
6473
-	public static function commonReplaceThirdparty(DoliDB $db, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
6473
+	public static function commonReplaceThirdparty(DoliDB $db, $origin_id, $dest_id, array $tables, $ignoreerrors = 0)
6474 6474
 	{
6475 6475
 		foreach ($tables as $table)
6476 6476
 		{
6477 6477
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$table.' SET fk_soc = '.$dest_id.' WHERE fk_soc = '.$origin_id;
6478 6478
 
6479
-			if (! $db->query($sql))
6479
+			if (!$db->query($sql))
6480 6480
 			{
6481
-				if ($ignoreerrors) return true;		// TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6481
+				if ($ignoreerrors) return true; // TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6482 6482
 				//$this->errors = $db->lasterror();
6483 6483
 				return false;
6484 6484
 			}
@@ -6511,7 +6511,7 @@  discard block
 block discarded – undo
6511 6511
 		else
6512 6512
 		{
6513 6513
 			// Get cost price for margin calculation
6514
-			if (! empty($fk_product))
6514
+			if (!empty($fk_product))
6515 6515
 			{
6516 6516
 				if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'costprice') {
6517 6517
 					require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
@@ -6582,18 +6582,18 @@  discard block
 block discarded – undo
6582 6582
 	 *  @param		int		$usesharelink	Use the public shared link of image (if not available, the 'nophoto' image will be shown instead)
6583 6583
 	 *  @return     string					Html code to show photo. Number of photos shown is saved in this->nbphoto
6584 6584
 	 */
6585
-	function show_photos($modulepart, $sdir, $size=0, $nbmax=0, $nbbyrow=5, $showfilename=0, $showaction=0, $maxHeight=120, $maxWidth=160, $nolink=0, $notitle=0, $usesharelink=0)
6585
+	function show_photos($modulepart, $sdir, $size = 0, $nbmax = 0, $nbbyrow = 5, $showfilename = 0, $showaction = 0, $maxHeight = 120, $maxWidth = 160, $nolink = 0, $notitle = 0, $usesharelink = 0)
6586 6586
 	{
6587 6587
         // phpcs:enable
6588
-		global $conf,$user,$langs;
6588
+		global $conf, $user, $langs;
6589 6589
 
6590
-		include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
6591
-		include_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';
6590
+		include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
6591
+		include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
6592 6592
 
6593
-		$sortfield='position_name';
6594
-		$sortorder='asc';
6593
+		$sortfield = 'position_name';
6594
+		$sortorder = 'asc';
6595 6595
 
6596
-		$dir = $sdir . '/';
6596
+		$dir = $sdir.'/';
6597 6597
 		$pdir = '/';
6598 6598
 		if ($modulepart == 'ticket')
6599 6599
 		{
@@ -6608,26 +6608,26 @@  discard block
 block discarded – undo
6608 6608
 
6609 6609
 		// For backward compatibility
6610 6610
 		if ($modulepart == 'product' && !empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
6611
-			$dir = $sdir . '/'. get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6612
-			$pdir = '/' . get_exdir($this->id,2,0,0,$this,$modulepart) . $this->id ."/photos/";
6611
+			$dir = $sdir.'/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/";
6612
+			$pdir = '/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/";
6613 6613
 		}
6614 6614
 
6615 6615
 		// Defined relative dir to DOL_DATA_ROOT
6616 6616
 		$relativedir = '';
6617 6617
 		if ($dir)
6618 6618
 		{
6619
-			$relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $dir);
6620
-			$relativedir = preg_replace('/^[\\/]/','',$relativedir);
6621
-			$relativedir = preg_replace('/[\\/]$/','',$relativedir);
6619
+			$relativedir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $dir);
6620
+			$relativedir = preg_replace('/^[\\/]/', '', $relativedir);
6621
+			$relativedir = preg_replace('/[\\/]$/', '', $relativedir);
6622 6622
 		}
6623 6623
 
6624 6624
 		$dirthumb = $dir.'thumbs/';
6625 6625
 		$pdirthumb = $pdir.'thumbs/';
6626 6626
 
6627
-		$return ='<!-- Photo -->'."\n";
6628
-		$nbphoto=0;
6627
+		$return = '<!-- Photo -->'."\n";
6628
+		$nbphoto = 0;
6629 6629
 
6630
-		$filearray=dol_dir_list($dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
6630
+		$filearray = dol_dir_list($dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1);
6631 6631
 
6632 6632
 		/* if (! empty(Globals::$conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))    // For backward compatiblity, we scan also old dirs
6633 6633
           {
@@ -6641,12 +6641,12 @@  discard block
 block discarded – undo
6641 6641
 		{
6642 6642
 			if ($sortfield && $sortorder)
6643 6643
 			{
6644
-				$filearray=dol_sort_array($filearray, $sortfield, $sortorder);
6644
+				$filearray = dol_sort_array($filearray, $sortfield, $sortorder);
6645 6645
 			}
6646 6646
 
6647
-			foreach($filearray as $key => $val)
6647
+			foreach ($filearray as $key => $val)
6648 6648
 			{
6649
-				$photo='';
6649
+				$photo = '';
6650 6650
 				$file = $val['name'];
6651 6651
 
6652 6652
 				//if (! utf8_check($file)) $file=utf8_encode($file);	// To be sure file is stored in UTF8 in memory
@@ -6661,36 +6661,36 @@  discard block
 block discarded – undo
6661 6661
 					if ($size == 1 || $size == 'small') {   // Format vignette
6662 6662
 
6663 6663
 						// Find name of thumb file
6664
-						$photo_vignette=basename(getImageFileNameForSize($dir.$file, '_small'));
6665
-						if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
6664
+						$photo_vignette = basename(getImageFileNameForSize($dir.$file, '_small'));
6665
+						if (!dol_is_file($dirthumb.$photo_vignette)) $photo_vignette = '';
6666 6666
 
6667 6667
 						// Get filesize of original file
6668
-						$imgarray=dol_getImageSize($dir.$photo);
6668
+						$imgarray = dol_getImageSize($dir.$photo);
6669 6669
 
6670 6670
 						if ($nbbyrow > 0)
6671 6671
 						{
6672
-							if ($nbphoto == 1) $return.= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
6672
+							if ($nbphoto == 1) $return .= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
6673 6673
 
6674
-							if ($nbphoto % $nbbyrow == 1) $return.= '<tr align=center valign=middle border=1>';
6675
-							$return.= '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
6674
+							if ($nbphoto % $nbbyrow == 1) $return .= '<tr align=center valign=middle border=1>';
6675
+							$return .= '<td width="'.ceil(100 / $nbbyrow).'%" class="photo">';
6676 6676
 						}
6677 6677
 						else if ($nbbyrow < 0) $return .= '<div class="inline-block">';
6678 6678
 
6679
-						$return.= "\n";
6679
+						$return .= "\n";
6680 6680
 
6681
-						$relativefile=preg_replace('/^\//', '', $pdir.$photo);
6681
+						$relativefile = preg_replace('/^\//', '', $pdir.$photo);
6682 6682
 						if (empty($nolink))
6683 6683
 						{
6684
-							$urladvanced=getAdvancedPreviewUrl($modulepart, $relativefile, 0, 'entity='.$this->entity);
6685
-							if ($urladvanced) $return.='<a href="'.$urladvanced.'">';
6686
-							else $return.= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
6684
+							$urladvanced = getAdvancedPreviewUrl($modulepart, $relativefile, 0, 'entity='.$this->entity);
6685
+							if ($urladvanced) $return .= '<a href="'.$urladvanced.'">';
6686
+							else $return .= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
6687 6687
 						}
6688 6688
 
6689 6689
 						// Show image (width height=$maxHeight)
6690 6690
 						// Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine
6691
-						$alt=$langs->transnoentitiesnoconv('File').': '.$relativefile;
6692
-						$alt.=' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
6693
-						if ($notitle) $alt='';
6691
+						$alt = $langs->transnoentitiesnoconv('File').': '.$relativefile;
6692
+						$alt .= ' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
6693
+						if ($notitle) $alt = '';
6694 6694
 
6695 6695
 						if ($usesharelink)
6696 6696
 						{
@@ -6698,81 +6698,81 @@  discard block
 block discarded – undo
6698 6698
 							{
6699 6699
 								if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6700 6700
 								{
6701
-									$return.= '<!-- Show original file (thumb not yet available with shared links) -->';
6702
-									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6701
+									$return .= '<!-- Show original file (thumb not yet available with shared links) -->';
6702
+									$return .= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6703 6703
 								}
6704 6704
 								else {
6705
-									$return.= '<!-- Show original file -->';
6706
-									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6705
+									$return .= '<!-- Show original file -->';
6706
+									$return .= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6707 6707
 								}
6708 6708
 							}
6709 6709
 							else
6710 6710
 							{
6711
-								$return.= '<!-- Show nophoto file (because file is not shared) -->';
6712
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png" title="'.dol_escape_htmltag($alt).'">';
6711
+								$return .= '<!-- Show nophoto file (because file is not shared) -->';
6712
+								$return .= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png" title="'.dol_escape_htmltag($alt).'">';
6713 6713
 							}
6714 6714
 						}
6715 6715
 						else
6716 6716
 						{
6717 6717
 							if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6718 6718
 							{
6719
-								$return.= '<!-- Show thumb -->';
6720
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
6719
+								$return .= '<!-- Show thumb -->';
6720
+								$return .= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
6721 6721
 							}
6722 6722
 							else {
6723
-								$return.= '<!-- Show original file -->';
6724
-								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
6723
+								$return .= '<!-- Show original file -->';
6724
+								$return .= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
6725 6725
 							}
6726 6726
 						}
6727 6727
 
6728
-						if (empty($nolink)) $return.= '</a>';
6729
-						$return.="\n";
6728
+						if (empty($nolink)) $return .= '</a>';
6729
+						$return .= "\n";
6730 6730
 
6731
-						if ($showfilename) $return.= '<br>'.$viewfilename;
6731
+						if ($showfilename) $return .= '<br>'.$viewfilename;
6732 6732
 						if ($showaction)
6733 6733
 						{
6734
-							$return.= '<br>';
6734
+							$return .= '<br>';
6735 6735
 							// On propose la generation de la vignette si elle n'existe pas et si la taille est superieure aux limites
6736 6736
 							if ($photo_vignette && (image_format_supported($photo) > 0) && ($this->imgWidth > $maxWidth || $this->imgHeight > $maxHeight))
6737 6737
 							{
6738
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=addthumb&amp;file='.urlencode($pdir.$viewfilename).'">'.img_picto($langs->trans('GenerateThumb'),'refresh').'&nbsp;&nbsp;</a>';
6738
+								$return .= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=addthumb&amp;file='.urlencode($pdir.$viewfilename).'">'.img_picto($langs->trans('GenerateThumb'), 'refresh').'&nbsp;&nbsp;</a>';
6739 6739
 							}
6740 6740
 							// Special cas for product
6741 6741
 							if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6742 6742
 							{
6743 6743
 								// Link to resize
6744
-								$return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6744
+								$return .= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6745 6745
 
6746 6746
 								// Link to delete
6747
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6748
-								$return.= img_delete().'</a>';
6747
+								$return .= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6748
+								$return .= img_delete().'</a>';
6749 6749
 							}
6750 6750
 						}
6751
-						$return.= "\n";
6751
+						$return .= "\n";
6752 6752
 
6753 6753
 						if ($nbbyrow > 0)
6754 6754
 						{
6755
-							$return.= '</td>';
6756
-							if (($nbphoto % $nbbyrow) == 0) $return.= '</tr>';
6755
+							$return .= '</td>';
6756
+							if (($nbphoto % $nbbyrow) == 0) $return .= '</tr>';
6757 6757
 						}
6758
-						else if ($nbbyrow < 0) $return.='</div>';
6758
+						else if ($nbbyrow < 0) $return .= '</div>';
6759 6759
 					}
6760 6760
 
6761 6761
 					if (empty($size)) {     // Format origine
6762
-						$return.= '<img class="photo photowithmargin" border="0" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'">';
6762
+						$return .= '<img class="photo photowithmargin" border="0" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'">';
6763 6763
 
6764
-						if ($showfilename) $return.= '<br>'.$viewfilename;
6764
+						if ($showfilename) $return .= '<br>'.$viewfilename;
6765 6765
 						if ($showaction)
6766 6766
 						{
6767 6767
 							// Special case for product
6768 6768
 							if ($modulepart == 'product' && ($user->rights->produit->creer || $user->rights->service->creer))
6769 6769
 							{
6770 6770
 								// Link to resize
6771
-								$return.= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6771
+								$return .= '<a href="'.DOL_URL_ROOT.'/core/photos_resize.php?modulepart='.urlencode('produit|service').'&id='.$this->id.'&amp;file='.urlencode($pdir.$viewfilename).'" title="'.dol_escape_htmltag($langs->trans("Resize")).'">'.img_picto($langs->trans("Resize"), 'resize', '').'</a> &nbsp; ';
6772 6772
 
6773 6773
 								// Link to delete
6774
-								$return.= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6775
-								$return.= img_delete().'</a>';
6774
+								$return .= '<a href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=delete&amp;file='.urlencode($pdir.$viewfilename).'">';
6775
+								$return .= img_delete().'</a>';
6776 6776
 							}
6777 6777
 						}
6778 6778
 					}
@@ -6782,18 +6782,18 @@  discard block
 block discarded – undo
6782 6782
 				}
6783 6783
 			}
6784 6784
 
6785
-			if ($size==1 || $size=='small')
6785
+			if ($size == 1 || $size == 'small')
6786 6786
 			{
6787 6787
 				if ($nbbyrow > 0)
6788 6788
 				{
6789 6789
 					// Ferme tableau
6790 6790
 					while ($nbphoto % $nbbyrow)
6791 6791
 					{
6792
-						$return.= '<td width="'.ceil(100/$nbbyrow).'%">&nbsp;</td>';
6792
+						$return .= '<td width="'.ceil(100 / $nbbyrow).'%">&nbsp;</td>';
6793 6793
 						$nbphoto++;
6794 6794
 					}
6795 6795
 
6796
-					if ($nbphoto) $return.= '</table>';
6796
+					if ($nbphoto) $return .= '</table>';
6797 6797
 				}
6798 6798
 			}
6799 6799
 		}
@@ -6812,9 +6812,9 @@  discard block
 block discarded – undo
6812 6812
 	 */
6813 6813
 	protected function isArray($info)
6814 6814
 	{
6815
-		if(is_array($info))
6815
+		if (is_array($info))
6816 6816
 		{
6817
-			if(isset($info['type']) && $info['type']=='array') return true;
6817
+			if (isset($info['type']) && $info['type'] == 'array') return true;
6818 6818
 			else return false;
6819 6819
 		}
6820 6820
 		else return false;
@@ -6828,9 +6828,9 @@  discard block
 block discarded – undo
6828 6828
 	 */
6829 6829
 	protected function isNull($info)
6830 6830
 	{
6831
-		if(is_array($info))
6831
+		if (is_array($info))
6832 6832
 		{
6833
-			if(isset($info['type']) && $info['type']=='null') return true;
6833
+			if (isset($info['type']) && $info['type'] == 'null') return true;
6834 6834
 			else return false;
6835 6835
 		}
6836 6836
 		else return false;
@@ -6844,7 +6844,7 @@  discard block
 block discarded – undo
6844 6844
 	 */
6845 6845
 	public function isDate($info)
6846 6846
 	{
6847
-		if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true;
6847
+		if (isset($info['type']) && ($info['type'] == 'date' || $info['type'] == 'datetime' || $info['type'] == 'timestamp')) return true;
6848 6848
 		else return false;
6849 6849
 	}
6850 6850
 
@@ -6856,9 +6856,9 @@  discard block
 block discarded – undo
6856 6856
 	 */
6857 6857
 	public function isInt($info)
6858 6858
 	{
6859
-		if(is_array($info))
6859
+		if (is_array($info))
6860 6860
 		{
6861
-			if(isset($info['type']) && ($info['type']=='int' || preg_match('/^integer/i',$info['type']) ) ) return true;
6861
+			if (isset($info['type']) && ($info['type'] == 'int' || preg_match('/^integer/i', $info['type']))) return true;
6862 6862
 			else return false;
6863 6863
 		}
6864 6864
 		else return false;
@@ -6872,7 +6872,7 @@  discard block
 block discarded – undo
6872 6872
 	 */
6873 6873
 	public function isFloat($info)
6874 6874
 	{
6875
-		if(is_array($info))
6875
+		if (is_array($info))
6876 6876
 		{
6877 6877
 			if (isset($info['type']) && (preg_match('/^(double|real)/i', $info['type']))) return true;
6878 6878
 			else return false;
@@ -6888,9 +6888,9 @@  discard block
 block discarded – undo
6888 6888
 	 */
6889 6889
 	public function isText($info)
6890 6890
 	{
6891
-		if(is_array($info))
6891
+		if (is_array($info))
6892 6892
 		{
6893
-			if(isset($info['type']) && $info['type']=='text') return true;
6893
+			if (isset($info['type']) && $info['type'] == 'text') return true;
6894 6894
 			else return false;
6895 6895
 		}
6896 6896
 		else return false;
@@ -6904,9 +6904,9 @@  discard block
 block discarded – undo
6904 6904
 	 */
6905 6905
 	protected function isIndex($info)
6906 6906
 	{
6907
-		if(is_array($info))
6907
+		if (is_array($info))
6908 6908
 		{
6909
-			if(isset($info['index']) && $info['index']==true) return true;
6909
+			if (isset($info['index']) && $info['index'] == true) return true;
6910 6910
 			else return false;
6911 6911
 		}
6912 6912
 		else return false;
@@ -6922,13 +6922,13 @@  discard block
 block discarded – undo
6922 6922
 	{
6923 6923
 		global $conf;
6924 6924
 
6925
-		$queryarray=array();
6925
+		$queryarray = array();
6926 6926
 		foreach ($this->fields as $field=>$info)	// Loop on definition of fields
6927 6927
 		{
6928 6928
 			// Depending on field type ('datetime', ...)
6929
-			if($this->isDate($info))
6929
+			if ($this->isDate($info))
6930 6930
 			{
6931
-				if(empty($this->{$field}))
6931
+				if (empty($this->{$field}))
6932 6932
 				{
6933 6933
 					$queryarray[$field] = null;
6934 6934
 				}
@@ -6937,10 +6937,10 @@  discard block
 block discarded – undo
6937 6937
 					$queryarray[$field] = $this->db->idate($this->{$field});
6938 6938
 				}
6939 6939
 			}
6940
-			else if($this->isArray($info))
6940
+			else if ($this->isArray($info))
6941 6941
 			{
6942
-				if(! empty($this->{$field})) {
6943
-					if(! is_array($this->{$field})) {
6942
+				if (!empty($this->{$field})) {
6943
+					if (!is_array($this->{$field})) {
6944 6944
 						$this->{$field} = array($this->{$field});
6945 6945
 					}
6946 6946
 					$queryarray[$field] = serialize($this->{$field});
@@ -6948,20 +6948,20 @@  discard block
 block discarded – undo
6948 6948
 					$queryarray[$field] = null;
6949 6949
 				}
6950 6950
 			}
6951
-			else if($this->isInt($info))
6951
+			else if ($this->isInt($info))
6952 6952
 			{
6953 6953
 				if ($field == 'entity' && is_null($this->{$field}))
6954 6954
                     $queryarray[$field] = Globals::$conf->entity;
6955 6955
                 else
6956 6956
 				{
6957 6957
 					$queryarray[$field] = (int) price2num($this->{$field});
6958
-					if (empty($queryarray[$field])) $queryarray[$field]=0;		// May be reset to null later if property 'notnull' is -1 for this field.
6958
+					if (empty($queryarray[$field])) $queryarray[$field] = 0; // May be reset to null later if property 'notnull' is -1 for this field.
6959 6959
 				}
6960 6960
 			}
6961
-			else if($this->isFloat($info))
6961
+			else if ($this->isFloat($info))
6962 6962
 			{
6963 6963
 				$queryarray[$field] = (double) price2num($this->{$field});
6964
-				if (empty($queryarray[$field])) $queryarray[$field]=0;
6964
+				if (empty($queryarray[$field])) $queryarray[$field] = 0;
6965 6965
 			}
6966 6966
 			else
6967 6967
 			{
@@ -6969,7 +6969,7 @@  discard block
 block discarded – undo
6969 6969
 			}
6970 6970
 
6971 6971
 			if ($info['type'] == 'timestamp' && empty($queryarray[$field])) unset($queryarray[$field]);
6972
-			if (! empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) $queryarray[$field] = null;
6972
+			if (!empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) $queryarray[$field] = null;
6973 6973
 		}
6974 6974
 
6975 6975
 		return $queryarray;
@@ -6985,35 +6985,35 @@  discard block
 block discarded – undo
6985 6985
 	{
6986 6986
 		foreach ($this->fields as $field => $info)
6987 6987
 		{
6988
-			if($this->isDate($info))
6988
+			if ($this->isDate($info))
6989 6989
 			{
6990
-				if(empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') $this->{$field} = 0;
6990
+				if (empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') $this->{$field} = 0;
6991 6991
 				else $this->{$field} = strtotime($obj->{$field});
6992 6992
 			}
6993
-			elseif($this->isArray($info))
6993
+			elseif ($this->isArray($info))
6994 6994
 			{
6995
-				if(! empty($obj->{$field})) {
6995
+				if (!empty($obj->{$field})) {
6996 6996
 					$this->{$field} = @unserialize($obj->{$field});
6997 6997
 					// Hack for data not in UTF8
6998
-					if($this->{$field } === false) @unserialize(utf8_decode($obj->{$field}));
6998
+					if ($this->{$field } === false) @unserialize(utf8_decode($obj->{$field}));
6999 6999
 				} else {
7000 7000
 					$this->{$field} = array();
7001 7001
 				}
7002 7002
 			}
7003
-			elseif($this->isInt($info))
7003
+			elseif ($this->isInt($info))
7004 7004
 			{
7005 7005
 				if ($field == 'rowid') $this->id = (int) $obj->{$field};
7006 7006
 				else $this->{$field} = (int) $obj->{$field};
7007 7007
 			}
7008
-			elseif($this->isFloat($info))
7008
+			elseif ($this->isFloat($info))
7009 7009
 			{
7010 7010
 				$this->{$field} = (double) $obj->{$field};
7011 7011
 			}
7012
-			elseif($this->isNull($info))
7012
+			elseif ($this->isNull($info))
7013 7013
 			{
7014 7014
 				$val = $obj->{$field};
7015 7015
 				// zero is not null
7016
-				$this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val);
7016
+				$this->{$field} = (is_null($val) || (empty($val) && $val !== 0 && $val !== '0') ? null : $val);
7017 7017
 			}
7018 7018
 			else
7019 7019
 			{
@@ -7022,7 +7022,7 @@  discard block
 block discarded – undo
7022 7022
 		}
7023 7023
 
7024 7024
 		// If there is no 'ref' field, we force property ->ref to ->id for a better compatibility with common functions.
7025
-		if (! isset($this->fields['ref']) && isset($this->id)) $this->ref = $this->id;
7025
+		if (!isset($this->fields['ref']) && isset($this->id)) $this->ref = $this->id;
7026 7026
 	}
7027 7027
 
7028 7028
 	/**
@@ -7064,14 +7064,14 @@  discard block
 block discarded – undo
7064 7064
 
7065 7065
 		$error = 0;
7066 7066
 
7067
-		$now=dol_now();
7067
+		$now = dol_now();
7068 7068
 
7069 7069
 		$fieldvalues = $this->setSaveQuery();
7070
-		if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now);
7071
-		if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id;
7072
-		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
7070
+		if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation'] = $this->db->idate($now);
7071
+		if (array_key_exists('fk_user_creat', $fieldvalues) && !($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat'] = $user->id;
7072
+		unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
7073 7073
 
7074
-		$keys=array();
7074
+		$keys = array();
7075 7075
 		$values = array();
7076 7076
 		foreach ($fieldvalues as $k => $v) {
7077 7077
 			$keys[$k] = $k;
@@ -7080,58 +7080,58 @@  discard block
 block discarded – undo
7080 7080
 		}
7081 7081
 
7082 7082
 		// Clean and check mandatory
7083
-		foreach($keys as $key)
7083
+		foreach ($keys as $key)
7084 7084
 		{
7085 7085
 			// If field is an implicit foreign key field
7086
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';
7087
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';
7086
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key] = '';
7087
+			if (!empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key] = '';
7088 7088
 
7089 7089
 			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7090
-			if (isset($this->fields[$key]['notnull']) && $this->fields[$key]['notnull'] == 1 && ! isset($values[$key]) && is_null($val['default']))
7090
+			if (isset($this->fields[$key]['notnull']) && $this->fields[$key]['notnull'] == 1 && !isset($values[$key]) && is_null($val['default']))
7091 7091
 			{
7092 7092
 				$error++;
7093
-				$this->errors[]=$langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7093
+				$this->errors[] = $langs->trans("ErrorFieldRequired", $this->fields[$key]['label']);
7094 7094
 			}
7095 7095
 
7096 7096
 			// If field is an implicit foreign key field
7097
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) $values[$key]='null';
7098
-			if (! empty($this->fields[$key]['foreignkey']) && empty($values[$key])) $values[$key]='null';
7097
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) $values[$key] = 'null';
7098
+			if (!empty($this->fields[$key]['foreignkey']) && empty($values[$key])) $values[$key] = 'null';
7099 7099
 		}
7100 7100
 
7101 7101
 		if ($error) return -1;
7102 7102
 
7103 7103
 		$this->db->begin();
7104 7104
 
7105
-		if (! $error)
7105
+		if (!$error)
7106 7106
 		{
7107 7107
 			$sql = 'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element;
7108
-			$sql.= ' ('.implode( ", ", $keys ).')';
7109
-			$sql.= ' VALUES ('.implode( ", ", $values ).')';
7108
+			$sql .= ' ('.implode(", ", $keys).')';
7109
+			$sql .= ' VALUES ('.implode(", ", $values).')';
7110 7110
 
7111 7111
 			$res = $this->db->query($sql);
7112
-			if ($res===false) {
7112
+			if ($res === false) {
7113 7113
 				$error++;
7114 7114
 				$this->errors[] = $this->db->lasterror();
7115 7115
 			}
7116 7116
 		}
7117 7117
 
7118
-		if (! $error)
7118
+		if (!$error)
7119 7119
 		{
7120
-			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
7120
+			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
7121 7121
 		}
7122 7122
 
7123 7123
 		// Create extrafields
7124
-		if (! $error)
7124
+		if (!$error)
7125 7125
 		{
7126
-			$result=$this->insertExtraFields();
7126
+			$result = $this->insertExtraFields();
7127 7127
 			if ($result < 0) $error++;
7128 7128
 		}
7129 7129
 
7130 7130
 		// Triggers
7131
-		if (! $error && ! $notrigger)
7131
+		if (!$error && !$notrigger)
7132 7132
 		{
7133 7133
 			// Call triggers
7134
-			$result=$this->call_trigger(strtoupper(get_class($this)).'_CREATE',$user);
7134
+			$result = $this->call_trigger(strtoupper(get_class($this)).'_CREATE', $user);
7135 7135
 			if ($result < 0) { $error++; }
7136 7136
 			// End call triggers
7137 7137
 		}
@@ -7160,13 +7160,13 @@  discard block
 block discarded – undo
7160 7160
 		if (empty($id) && empty($ref) && empty($morewhere)) return -1;
7161 7161
 
7162 7162
 		$sql = 'SELECT '.$this->getFieldList();
7163
-		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
7163
+		$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
7164 7164
 
7165
-		if (!empty($id))  $sql.= ' WHERE rowid = '.$id;
7166
-		elseif (!empty($ref)) $sql.= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7167
-		else $sql.=' WHERE 1 = 1';	// usage with empty id and empty ref is very rare
7168
-		if ($morewhere)   $sql.= $morewhere;
7169
-		$sql.=' LIMIT 1';	// This is a fetch, to be sure to get only one record
7165
+		if (!empty($id))  $sql .= ' WHERE rowid = '.$id;
7166
+		elseif (!empty($ref)) $sql .= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7167
+		else $sql .= ' WHERE 1 = 1'; // usage with empty id and empty ref is very rare
7168
+		if ($morewhere)   $sql .= $morewhere;
7169
+		$sql .= ' LIMIT 1'; // This is a fetch, to be sure to get only one record
7170 7170
 
7171 7171
 		$res = $this->db->query($sql);
7172 7172
 		if ($res)
@@ -7203,14 +7203,14 @@  discard block
 block discarded – undo
7203 7203
 
7204 7204
 		$error = 0;
7205 7205
 
7206
-		$now=dol_now();
7206
+		$now = dol_now();
7207 7207
 
7208 7208
 		$fieldvalues = $this->setSaveQuery();
7209
-		if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) $fieldvalues['date_modification']=$this->db->idate($now);
7210
-		if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif']=$user->id;
7211
-		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into update.
7209
+		if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) $fieldvalues['date_modification'] = $this->db->idate($now);
7210
+		if (array_key_exists('fk_user_modif', $fieldvalues) && !($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif'] = $user->id;
7211
+		unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into update.
7212 7212
 
7213
-		$keys=array();
7213
+		$keys = array();
7214 7214
 		$values = array();
7215 7215
 		foreach ($fieldvalues as $k => $v) {
7216 7216
 			$keys[$k] = $k;
@@ -7220,10 +7220,10 @@  discard block
 block discarded – undo
7220 7220
 		}
7221 7221
 
7222 7222
 		// Clean and check mandatory
7223
-		foreach($keys as $key)
7223
+		foreach ($keys as $key)
7224 7224
 		{
7225
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';		// This is an implicit foreign key field
7226
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';					// This is an explicit foreign key field
7225
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key] = ''; // This is an implicit foreign key field
7226
+			if (!empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key] = ''; // This is an explicit foreign key field
7227 7227
 
7228 7228
 			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7229 7229
 			/*
@@ -7234,13 +7234,13 @@  discard block
 block discarded – undo
7234 7234
 			}*/
7235 7235
 		}
7236 7236
 
7237
-		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET '.implode( ',', $tmp ).' WHERE rowid='.$this->id ;
7237
+		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET '.implode(',', $tmp).' WHERE rowid='.$this->id;
7238 7238
 
7239 7239
 		$this->db->begin();
7240
-		if (! $error)
7240
+		if (!$error)
7241 7241
 		{
7242 7242
 			$res = $this->db->query($sql);
7243
-			if ($res===false)
7243
+			if ($res === false)
7244 7244
 			{
7245 7245
 				$error++;
7246 7246
 				$this->errors[] = $this->db->lasterror();
@@ -7249,7 +7249,7 @@  discard block
 block discarded – undo
7249 7249
 
7250 7250
 		// Update extrafield
7251 7251
 		if (!$error && empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options) > 0) {
7252
-			$result=$this->insertExtraFields();
7252
+			$result = $this->insertExtraFields();
7253 7253
 			if ($result < 0)
7254 7254
 			{
7255 7255
 				$error++;
@@ -7257,10 +7257,10 @@  discard block
 block discarded – undo
7257 7257
 		}
7258 7258
 
7259 7259
 		// Triggers
7260
-		if (! $error && ! $notrigger)
7260
+		if (!$error && !$notrigger)
7261 7261
 		{
7262 7262
 			// Call triggers
7263
-			$result=$this->call_trigger(strtoupper(get_class($this)).'_MODIFY',$user);
7263
+			$result = $this->call_trigger(strtoupper(get_class($this)).'_MODIFY', $user);
7264 7264
 			if ($result < 0) { $error++; } //Do also here what you must do to rollback action if trigger fail
7265 7265
 			// End call triggers
7266 7266
 		}
@@ -7283,68 +7283,68 @@  discard block
 block discarded – undo
7283 7283
 	 * @param	int		$forcechilddeletion		0=no, 1=Force deletion of children
7284 7284
 	 * @return 	int             				<=0 if KO, >0 if OK
7285 7285
 	 */
7286
-	public function deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
7286
+	public function deleteCommon(User $user, $notrigger = false, $forcechilddeletion = 0)
7287 7287
 	{
7288
-		$error=0;
7288
+		$error = 0;
7289 7289
 
7290 7290
 		$this->db->begin();
7291 7291
 
7292 7292
 		if ($forcechilddeletion)
7293 7293
 		{
7294
-			foreach($this->childtables as $table)
7294
+			foreach ($this->childtables as $table)
7295 7295
 			{
7296 7296
 				$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$table.' WHERE '.$this->fk_element.' = '.$this->id;
7297 7297
 				$resql = $this->db->query($sql);
7298
-				if (! $resql)
7298
+				if (!$resql)
7299 7299
 				{
7300
-					$this->error=$this->db->lasterror();
7301
-					$this->errors[]=$this->error;
7300
+					$this->error = $this->db->lasterror();
7301
+					$this->errors[] = $this->error;
7302 7302
 					$this->db->rollback();
7303 7303
 					return -1;
7304 7304
 				}
7305 7305
 			}
7306 7306
 		}
7307
-		elseif (! empty($this->fk_element) && ! empty($this->childtables))	// If object has childs linked with a foreign key field, we check all child tables.
7307
+		elseif (!empty($this->fk_element) && !empty($this->childtables))	// If object has childs linked with a foreign key field, we check all child tables.
7308 7308
 		{
7309 7309
 			$objectisused = $this->isObjectUsed($this->id);
7310
-			if (! empty($objectisused))
7310
+			if (!empty($objectisused))
7311 7311
 			{
7312 7312
 				dol_syslog(get_class($this)."::deleteCommon Can't delete record as it has some child", LOG_WARNING);
7313
-				$this->error='ErrorRecordHasChildren';
7314
-				$this->errors[]=$this->error;
7313
+				$this->error = 'ErrorRecordHasChildren';
7314
+				$this->errors[] = $this->error;
7315 7315
 				$this->db->rollback();
7316 7316
 				return 0;
7317 7317
 			}
7318 7318
 		}
7319 7319
 
7320
-		if (! $error) {
7321
-			if (! $notrigger) {
7320
+		if (!$error) {
7321
+			if (!$notrigger) {
7322 7322
 				// Call triggers
7323
-				$result=$this->call_trigger(strtoupper(get_class($this)).'_DELETE', $user);
7323
+				$result = $this->call_trigger(strtoupper(get_class($this)).'_DELETE', $user);
7324 7324
 				if ($result < 0) { $error++; } // Do also here what you must do to rollback action if trigger fail
7325 7325
 				// End call triggers
7326 7326
 			}
7327 7327
 		}
7328 7328
 
7329
-		if (! $error && ! empty($this->isextrafieldmanaged))
7329
+		if (!$error && !empty($this->isextrafieldmanaged))
7330 7330
 		{
7331
-			$sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element."_extrafields";
7332
-			$sql.= " WHERE fk_object=" . $this->id;
7331
+			$sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element."_extrafields";
7332
+			$sql .= " WHERE fk_object=".$this->id;
7333 7333
 
7334 7334
 			$resql = $this->db->query($sql);
7335
-			if (! $resql)
7335
+			if (!$resql)
7336 7336
 			{
7337 7337
 				$this->errors[] = $this->db->lasterror();
7338 7338
 				$error++;
7339 7339
 			}
7340 7340
 		}
7341 7341
 
7342
-		if (! $error)
7342
+		if (!$error)
7343 7343
 		{
7344 7344
 			$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.' WHERE rowid='.$this->id;
7345 7345
 
7346 7346
 			$res = $this->db->query($sql);
7347
-			if($res===false) {
7347
+			if ($res === false) {
7348 7348
 				$error++;
7349 7349
 				$this->errors[] = $this->db->lasterror();
7350 7350
 			}
@@ -7385,9 +7385,9 @@  discard block
 block discarded – undo
7385 7385
 		require_once DOL_DOCUMENT_ROOT.'/core/class/comment.class.php';
7386 7386
 
7387 7387
 		$comment = new Comment($this->db);
7388
-		$result=$comment->fetchAllFor($this->element, $this->id);
7389
-		if ($result<0) {
7390
-			$this->errors=array_merge($this->errors, $comment->errors);
7388
+		$result = $comment->fetchAllFor($this->element, $this->id);
7389
+		if ($result < 0) {
7390
+			$this->errors = array_merge($this->errors, $comment->errors);
7391 7391
 			return -1;
7392 7392
 		} else {
7393 7393
 			$this->comments = $comment->comments;
Please login to merge, or discard this patch.
Braces   +1373 added lines, -865 removed lines patch added patch discarded remove patch
@@ -401,24 +401,31 @@  discard block
 block discarded – undo
401 401
 		$sql.= " FROM ".MAIN_DB_PREFIX.$element;
402 402
 		$sql.= " WHERE entity IN (".getEntity($element).")" ;
403 403
 
404
-		if ($id > 0) $sql.= " AND rowid = ".$db->escape($id);
405
-		else if ($ref) $sql.= " AND ref = '".$db->escape($ref)."'";
406
-		else if ($ref_ext) $sql.= " AND ref_ext = '".$db->escape($ref_ext)."'";
407
-		else {
404
+		if ($id > 0) {
405
+		    $sql.= " AND rowid = ".$db->escape($id);
406
+		} else if ($ref) {
407
+		    $sql.= " AND ref = '".$db->escape($ref)."'";
408
+		} else if ($ref_ext) {
409
+		    $sql.= " AND ref_ext = '".$db->escape($ref_ext)."'";
410
+		} else {
408 411
 			$error='ErrorWrongParameters';
409 412
 			dol_print_error(get_class()."::isExistingObject ".$error, LOG_ERR);
410 413
 			return -1;
411 414
 		}
412
-		if ($ref || $ref_ext)
413
-            $sql .= " AND entity = " . Globals::$conf->entity;
415
+		if ($ref || $ref_ext) {
416
+		            $sql .= " AND entity = " . Globals::$conf->entity;
417
+		}
414 418
 
415 419
         dol_syslog(get_class()."::isExistingObject", LOG_DEBUG);
416 420
 		$resql = $db->query($sql);
417 421
 		if ($resql)
418 422
 		{
419 423
 			$num=$db->num_rows($resql);
420
-			if ($num > 0) return 1;
421
-			else return 0;
424
+			if ($num > 0) {
425
+			    return 1;
426
+			} else {
427
+			    return 0;
428
+			}
422 429
 		}
423 430
 		return -1;
424 431
 	}
@@ -447,13 +454,18 @@  discard block
 block discarded – undo
447 454
 		//print "lastname=".$this->lastname." name=".$this->name." nom=".$this->nom."<br>\n";
448 455
 		$lastname=$this->lastname;
449 456
 		$firstname=$this->firstname;
450
-		if (empty($lastname))  $lastname=(isset($this->lastname)?$this->lastname:(isset($this->name)?$this->name:(isset($this->nom)?$this->nom:(isset($this->societe)?$this->societe:(isset($this->company)?$this->company:'')))));
457
+		if (empty($lastname)) {
458
+		    $lastname=(isset($this->lastname)?$this->lastname:(isset($this->name)?$this->name:(isset($this->nom)?$this->nom:(isset($this->societe)?$this->societe:(isset($this->company)?$this->company:'')))));
459
+		}
451 460
 
452 461
 		$ret='';
453 462
 		if ($option && $this->civility_id)
454 463
 		{
455
-			if ($langs->transnoentitiesnoconv("Civility".$this->civility_id)!="Civility".$this->civility_id) $ret.=$langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
456
-			else $ret.=$this->civility_id.' ';
464
+			if ($langs->transnoentitiesnoconv("Civility".$this->civility_id)!="Civility".$this->civility_id) {
465
+			    $ret.=$langs->transnoentitiesnoconv("Civility".$this->civility_id).' ';
466
+			} else {
467
+			    $ret.=$this->civility_id.' ';
468
+			}
457 469
 		}
458 470
 
459 471
 		$ret .= AlDolUtils::dolGetFirstLastname($firstname, $lastname, $nameorder);
@@ -544,14 +556,15 @@  discard block
 block discarded – undo
544 556
             && empty(Globals::$conf->global->SOCIETE_DISABLE_STATE) && $this->state) {
545 557
             if (!empty(Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && Globals::$conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 && $this->region) {
546 558
                 $out.=($outdone?' - ':'').$this->region.' - '.$this->state;
547
-            }
548
-            else {
559
+            } else {
549 560
                 $out.=($outdone?' - ':'').$this->state;
550 561
             }
551 562
 			$outdone++;
552 563
 		}
553 564
 
554
-		if (! empty($this->phone) || ! empty($this->phone_pro) || ! empty($this->phone_mobile) || ! empty($this->phone_perso) || ! empty($this->fax) || ! empty($this->office_phone) || ! empty($this->user_mobile) || ! empty($this->office_fax)) $out.=($outdone?'<br>':'');
565
+		if (! empty($this->phone) || ! empty($this->phone_pro) || ! empty($this->phone_mobile) || ! empty($this->phone_perso) || ! empty($this->fax) || ! empty($this->office_phone) || ! empty($this->user_mobile) || ! empty($this->office_fax)) {
566
+		    $out.=($outdone?'<br>':'');
567
+		}
555 568
 		if (! empty($this->phone) && empty($this->phone_pro)) {		// For objects that store pro phone into ->phone
556 569
 			$out.=dol_print_phone($this->phone,$this->country_code,$contactid,$thirdpartyid,'AC_TEL','&nbsp;','phone',$langs->trans("PhonePro")); $outdone++;
557 570
 		}
@@ -591,13 +604,21 @@  discard block
 block discarded – undo
591 604
 		}
592 605
 		$out.='<div style="clear: both;">';
593 606
 		if (!empty(Globals::$conf->socialnetworks->enabled)) {
594
-			if ($this->skype) $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
607
+			if ($this->skype) {
608
+			    $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
609
+			}
595 610
 			$outdone++;
596
-			if ($this->jabberid) $out.=dol_print_socialnetworks($this->jabberid,$this->id,$object->id,'jabber');
611
+			if ($this->jabberid) {
612
+			    $out.=dol_print_socialnetworks($this->jabberid,$this->id,$object->id,'jabber');
613
+			}
597 614
 			$outdone++;
598
-			if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
615
+			if ($this->twitter) {
616
+			    $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
617
+			}
599 618
 			$outdone++;
600
-			if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
619
+			if ($this->facebook) {
620
+			    $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
621
+			}
601 622
 			$outdone++;
602 623
 		}
603 624
 		$out.='</div>';
@@ -657,10 +678,10 @@  discard block
 block discarded – undo
657 678
 					$this->errors = $ecmfile->errors;
658 679
 				}
659 680
 				*/
660
-			}
661
-			else return '';
662
-		}
663
-		elseif (empty($ecmfile->share))
681
+			} else {
682
+			    return '';
683
+			}
684
+		} elseif (empty($ecmfile->share))
664 685
 		{
665 686
 			// Add entry into index
666 687
 			if ($initsharekey)
@@ -668,8 +689,9 @@  discard block
 block discarded – undo
668 689
 				require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
669 690
 				$ecmfile->share = getRandomPassword(true);
670 691
 				$ecmfile->update($user);
671
-			}
672
-			else return '';
692
+			} else {
693
+			    return '';
694
+			}
673 695
 		}
674 696
 
675 697
 		// Define $urlwithroot
@@ -683,14 +705,18 @@  discard block
 block discarded – undo
683 705
 		//if (! empty($modulepart)) $paramlink.=($paramlink?'&':'').'modulepart='.$modulepart;		// For sharing with hash (so public files), modulepart is not required.
684 706
 		//if (! empty($ecmfile->entity)) $paramlink.='&entity='.$ecmfile->entity; 					// For sharing with hash (so public files), entity is not required.
685 707
 		//$paramlink.=($paramlink?'&':'').'file='.urlencode($filepath);								// No need of name of file for public link, we will use the hash
686
-		if (! empty($ecmfile->share)) $paramlink.=($paramlink?'&':'').'hashp='.$ecmfile->share;			// Hash for public share
687
-		if ($forcedownload) $paramlink.=($paramlink?'&':'').'attachment=1';
708
+		if (! empty($ecmfile->share)) {
709
+		    $paramlink.=($paramlink?'&':'').'hashp='.$ecmfile->share;
710
+		}
711
+		// Hash for public share
712
+		if ($forcedownload) {
713
+		    $paramlink.=($paramlink?'&':'').'attachment=1';
714
+		}
688 715
 
689 716
 		if ($relativelink)
690 717
 		{
691 718
 			$linktoreturn='document.php'.($paramlink?'?'.$paramlink:'');
692
-		}
693
-		else
719
+		} else
694 720
 		{
695 721
 			$linktoreturn=$urlwithroot.'/document.php'.($paramlink?'?'.$paramlink:'');
696 722
 		}
@@ -738,8 +764,7 @@  discard block
 block discarded – undo
738 764
 		if (is_numeric($type_contact))
739 765
 		{
740 766
 			$id_type_contact=$type_contact;
741
-		}
742
-		else
767
+		} else
743 768
 		{
744 769
 			// We look for id type_contact
745 770
 			$sql = "SELECT tc.rowid";
@@ -752,7 +777,9 @@  discard block
 block discarded – undo
752 777
 			if ($resql)
753 778
 			{
754 779
 				$obj = $this->db->fetch_object($resql);
755
-				if ($obj) $id_type_contact=$obj->rowid;
780
+				if ($obj) {
781
+				    $id_type_contact=$obj->rowid;
782
+				}
756 783
 			}
757 784
 		}
758 785
 
@@ -804,8 +831,7 @@  discard block
 block discarded – undo
804 831
 
805 832
 				$this->db->commit();
806 833
 				return 1;
807
-			}
808
-			else
834
+			} else
809 835
 			{
810 836
 				if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
811 837
 				{
@@ -813,15 +839,16 @@  discard block
 block discarded – undo
813 839
 					$this->db->rollback();
814 840
 					echo 'err rollback';
815 841
 					return -2;
816
-				}
817
-				else
842
+				} else
818 843
 				{
819 844
 					$this->error=$this->db->error();
820 845
 					$this->db->rollback();
821 846
 					return -1;
822 847
 				}
823 848
 			}
824
-		} else return 0;
849
+		} else {
850
+		    return 0;
851
+		}
825 852
 	}
826 853
 
827 854
     // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
@@ -863,15 +890,18 @@  discard block
 block discarded – undo
863 890
 		// Insert into database
864 891
 		$sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
865 892
 		$sql.= " statut = ".$statut;
866
-		if ($type_contact_id) $sql.= ", fk_c_type_contact = '".$type_contact_id ."'";
867
-		if ($fk_socpeople) $sql.= ", fk_socpeople = '".$fk_socpeople ."'";
893
+		if ($type_contact_id) {
894
+		    $sql.= ", fk_c_type_contact = '".$type_contact_id ."'";
895
+		}
896
+		if ($fk_socpeople) {
897
+		    $sql.= ", fk_socpeople = '".$fk_socpeople ."'";
898
+		}
868 899
 		$sql.= " where rowid = ".$rowid;
869 900
 		$resql=$this->db->query($sql);
870 901
 		if ($resql)
871 902
 		{
872 903
 			return 0;
873
-		}
874
-		else
904
+		} else
875 905
 		{
876 906
 			$this->error=$this->db->lasterror();
877 907
 			return -1;
@@ -908,8 +938,7 @@  discard block
 block discarded – undo
908 938
 
909 939
 			$this->db->commit();
910 940
 			return 1;
911
-		}
912
-		else
941
+		} else
913 942
 		{
914 943
 			$this->error=$this->db->lasterror();
915 944
 			$this->db->rollback();
@@ -939,15 +968,15 @@  discard block
 block discarded – undo
939 968
 
940 969
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
941 970
 		$sql.= " WHERE element_id = ".$this->id;
942
-		if ($listId)
943
-			$sql.= " AND fk_c_type_contact IN (".$listId.")";
971
+		if ($listId) {
972
+					$sql.= " AND fk_c_type_contact IN (".$listId.")";
973
+		}
944 974
 
945 975
 		dol_syslog(get_class($this)."::delete_linked_contact", LOG_DEBUG);
946 976
 		if ($this->db->query($sql))
947 977
 		{
948 978
 			return 1;
949
-		}
950
-		else
979
+		} else
951 980
 		{
952 981
 			$this->error=$this->db->lasterror();
953 982
 			return -1;
@@ -972,22 +1001,38 @@  discard block
 block discarded – undo
972 1001
 		$tab=array();
973 1002
 
974 1003
 		$sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact";    // This field contains id of llx_socpeople or id of llx_user
975
-		if ($source == 'internal') $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
976
-		if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid, t.statut as statuscontact";
1004
+		if ($source == 'internal') {
1005
+		    $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
1006
+		}
1007
+		if ($source == 'external' || $source == 'thirdparty') {
1008
+		    $sql.=", t.fk_soc as socid, t.statut as statuscontact";
1009
+		}
977 1010
 		$sql.= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
978 1011
 		$sql.= ", tc.source, tc.element, tc.code, tc.libelle";
979 1012
 		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
980 1013
 		$sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
981
-		if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
982
-		if ($source == 'external'|| $source == 'thirdparty') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
1014
+		if ($source == 'internal') {
1015
+		    $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
1016
+		}
1017
+		if ($source == 'external'|| $source == 'thirdparty') {
1018
+		    $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
1019
+		}
983 1020
 		$sql.= " WHERE ec.element_id =".$this->id;
984 1021
 		$sql.= " AND ec.fk_c_type_contact=tc.rowid";
985 1022
 		$sql.= " AND tc.element='".$this->db->escape($this->element)."'";
986
-		if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
987
-		if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
988
-		if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
1023
+		if ($code) {
1024
+		    $sql.= " AND tc.code = '".$this->db->escape($code)."'";
1025
+		}
1026
+		if ($source == 'internal') {
1027
+		    $sql.= " AND tc.source = 'internal'";
1028
+		}
1029
+		if ($source == 'external' || $source == 'thirdparty') {
1030
+		    $sql.= " AND tc.source = 'external'";
1031
+		}
989 1032
 		$sql.= " AND tc.active=1";
990
-		if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
1033
+		if ($statut >= 0) {
1034
+		    $sql.= " AND ec.statut = '".$statut."'";
1035
+		}
991 1036
 		$sql.=" ORDER BY t.lastname ASC";
992 1037
 
993 1038
 		dol_syslog(get_class($this)."::liste_contact", LOG_DEBUG);
@@ -1008,8 +1053,7 @@  discard block
 block discarded – undo
1008 1053
 								   'nom'=>$obj->lastname,      // For backward compatibility
1009 1054
 								   'civility'=>$obj->civility, 'lastname'=>$obj->lastname, 'firstname'=>$obj->firstname, 'email'=>$obj->email, 'login'=>$obj->login, 'photo'=>$obj->photo, 'statuscontact'=>$obj->statuscontact,
1010 1055
 								   'rowid'=>$obj->rowid, 'code'=>$obj->code, 'libelle'=>$libelle_type, 'status'=>$obj->statuslink, 'fk_c_type_contact'=>$obj->fk_c_type_contact);
1011
-				}
1012
-				else
1056
+				} else
1013 1057
 				{
1014 1058
 					$tab[$i]=$obj->id;
1015 1059
 				}
@@ -1018,8 +1062,7 @@  discard block
 block discarded – undo
1018 1062
 			}
1019 1063
 
1020 1064
 			return $tab;
1021
-		}
1022
-		else
1065
+		} else
1023 1066
 		{
1024 1067
 			$this->error=$this->db->lasterror();
1025 1068
 			dol_print_error($this->db);
@@ -1054,8 +1097,7 @@  discard block
 block discarded – undo
1054 1097
 			$result = $this->update_contact($rowid, $newstatut);
1055 1098
 			$this->db->free($resql);
1056 1099
 			return $result;
1057
-		}
1058
-		else
1100
+		} else
1059 1101
 		{
1060 1102
 			$this->error=$this->db->error();
1061 1103
 			dol_print_error($this->db);
@@ -1079,16 +1121,27 @@  discard block
 block discarded – undo
1079 1121
         // phpcs:enable
1080 1122
 		global $langs;
1081 1123
 
1082
-		if (empty($order)) $order='position';
1083
-		if ($order == 'position') $order.=',code';
1124
+		if (empty($order)) {
1125
+		    $order='position';
1126
+		}
1127
+		if ($order == 'position') {
1128
+		    $order.=',code';
1129
+		}
1084 1130
 
1085 1131
 		$tab = array();
1086 1132
 		$sql = "SELECT DISTINCT tc.rowid, tc.code, tc.libelle, tc.position";
1087 1133
 		$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
1088 1134
 		$sql.= " WHERE tc.element='".$this->db->escape($this->element)."'";
1089
-		if ($activeonly == 1) $sql.= " AND tc.active=1"; // only the active types
1090
-		if (! empty($source) && $source != 'all') $sql.= " AND tc.source='".$this->db->escape($source)."'";
1091
-		if (! empty($code)) $sql.= " AND tc.code='".$this->db->escape($code)."'";
1135
+		if ($activeonly == 1) {
1136
+		    $sql.= " AND tc.active=1";
1137
+		}
1138
+		// only the active types
1139
+		if (! empty($source) && $source != 'all') {
1140
+		    $sql.= " AND tc.source='".$this->db->escape($source)."'";
1141
+		}
1142
+		if (! empty($code)) {
1143
+		    $sql.= " AND tc.code='".$this->db->escape($code)."'";
1144
+		}
1092 1145
 		$sql.= $this->db->order($order,'ASC');
1093 1146
 
1094 1147
 		//print "sql=".$sql;
@@ -1103,13 +1156,15 @@  discard block
 block discarded – undo
1103 1156
 
1104 1157
 				$transkey="TypeContact_".$this->element."_".$source."_".$obj->code;
1105 1158
 				$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
1106
-				if (empty($option)) $tab[$obj->rowid]=$libelle_type;
1107
-				else $tab[$obj->code]=$libelle_type;
1159
+				if (empty($option)) {
1160
+				    $tab[$obj->rowid]=$libelle_type;
1161
+				} else {
1162
+				    $tab[$obj->code]=$libelle_type;
1163
+				}
1108 1164
 				$i++;
1109 1165
 			}
1110 1166
 			return $tab;
1111
-		}
1112
-		else
1167
+		} else
1113 1168
 		{
1114 1169
 			$this->error=$this->db->lasterror();
1115 1170
 			//dol_print_error($this->db);
@@ -1148,19 +1203,29 @@  discard block
 block discarded – undo
1148 1203
 
1149 1204
 		$sql = "SELECT ec.fk_socpeople";
1150 1205
 		$sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec,";
1151
-		if ($source == 'internal') $sql.= " ".MAIN_DB_PREFIX."user as c,";
1152
-		if ($source == 'external') $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
1206
+		if ($source == 'internal') {
1207
+		    $sql.= " ".MAIN_DB_PREFIX."user as c,";
1208
+		}
1209
+		if ($source == 'external') {
1210
+		    $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
1211
+		}
1153 1212
 		$sql.= " ".MAIN_DB_PREFIX."c_type_contact as tc";
1154 1213
 		$sql.= " WHERE ec.element_id = ".$id;
1155 1214
 		$sql.= " AND ec.fk_socpeople = c.rowid";
1156
-		if ($source == 'internal') $sql.= " AND c.entity IN (".getEntity('user').")";
1157
-		if ($source == 'external') $sql.= " AND c.entity IN (".getEntity('societe').")";
1215
+		if ($source == 'internal') {
1216
+		    $sql.= " AND c.entity IN (".getEntity('user').")";
1217
+		}
1218
+		if ($source == 'external') {
1219
+		    $sql.= " AND c.entity IN (".getEntity('societe').")";
1220
+		}
1158 1221
 		$sql.= " AND ec.fk_c_type_contact = tc.rowid";
1159 1222
 		$sql.= " AND tc.element = '".$element."'";
1160 1223
 		$sql.= " AND tc.source = '".$source."'";
1161 1224
 		$sql.= " AND tc.code = '".$code."'";
1162 1225
 		$sql.= " AND tc.active = 1";
1163
-		if ($status) $sql.= " AND ec.statut = ".$status;
1226
+		if ($status) {
1227
+		    $sql.= " AND ec.statut = ".$status;
1228
+		}
1164 1229
 
1165 1230
 		dol_syslog(get_class($this)."::getIdContact", LOG_DEBUG);
1166 1231
 		$resql=$this->db->query($sql);
@@ -1171,8 +1236,7 @@  discard block
 block discarded – undo
1171 1236
 				$result[$i]=$obj->fk_socpeople;
1172 1237
 				$i++;
1173 1238
 			}
1174
-		}
1175
-		else
1239
+		} else
1176 1240
 		{
1177 1241
 			$this->error=$this->db->error();
1178 1242
 			return null;
@@ -1191,9 +1255,13 @@  discard block
 block discarded – undo
1191 1255
 	function fetch_contact($contactid=null)
1192 1256
 	{
1193 1257
         // phpcs:enable
1194
-		if (empty($contactid)) $contactid=$this->contactid;
1258
+		if (empty($contactid)) {
1259
+		    $contactid=$this->contactid;
1260
+		}
1195 1261
 
1196
-		if (empty($contactid)) return 0;
1262
+		if (empty($contactid)) {
1263
+		    return 0;
1264
+		}
1197 1265
 
1198 1266
 		require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
1199 1267
 		$contact = new Contact($this->db);
@@ -1214,14 +1282,16 @@  discard block
 block discarded – undo
1214 1282
         // phpcs:enable
1215 1283
 		global $conf;
1216 1284
 
1217
-		if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id))
1218
-			return 0;
1285
+		if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id)) {
1286
+					return 0;
1287
+		}
1219 1288
 
1220 1289
 		require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
1221 1290
 
1222 1291
 		$idtofetch = isset($this->socid) ? $this->socid : (isset($this->fk_soc) ? $this->fk_soc : $this->fk_thirdparty);
1223
-		if ($force_thirdparty_id)
1224
-			$idtofetch = $force_thirdparty_id;
1292
+		if ($force_thirdparty_id) {
1293
+					$idtofetch = $force_thirdparty_id;
1294
+		}
1225 1295
 
1226 1296
 		if ($idtofetch) {
1227 1297
 			$thirdparty = new Societe($this->db);
@@ -1234,8 +1304,9 @@  discard block
 block discarded – undo
1234 1304
 			}
1235 1305
 
1236 1306
 			return $result;
1237
-		} else
1238
-			return -1;
1307
+		} else {
1308
+					return -1;
1309
+		}
1239 1310
 	}
1240 1311
 
1241 1312
 
@@ -1281,20 +1352,25 @@  discard block
 block discarded – undo
1281 1352
 		dol_syslog(get_class($this).'::fetch_barcode this->element='.$this->element.' this->barcode_type='.$this->barcode_type);
1282 1353
 
1283 1354
 		$idtype=$this->barcode_type;
1284
-		if (empty($idtype) && $idtype != '0')	// If type of barcode no set, we try to guess. If set to '0' it means we forced to have type remain not defined
1355
+		if (empty($idtype) && $idtype != '0') {
1356
+		    // If type of barcode no set, we try to guess. If set to '0' it means we forced to have type remain not defined
1285 1357
 		{
1286 1358
 			if ($this->element == 'product')
1287
-                $idtype = Globals::$conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
1288
-            else if ($this->element == 'societe')
1289
-                $idtype = Globals::$conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
1290
-            else dol_syslog('Call fetch_barcode with barcode_type not defined and cant be guessed', LOG_WARNING);
1359
+                $idtype = Globals::$conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
1360
+		} else if ($this->element == 'societe') {
1361
+                            $idtype = Globals::$conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
1362
+            } else {
1363
+                dol_syslog('Call fetch_barcode with barcode_type not defined and cant be guessed', LOG_WARNING);
1364
+            }
1291 1365
 		}
1292 1366
 
1293 1367
 		if ($idtype > 0)
1294 1368
 		{
1295
-			if (empty($this->barcode_type) || empty($this->barcode_type_code) || empty($this->barcode_type_label) || empty($this->barcode_type_coder))    // If data not already loaded
1369
+			if (empty($this->barcode_type) || empty($this->barcode_type_code) || empty($this->barcode_type_label) || empty($this->barcode_type_coder)) {
1370
+			    // If data not already loaded
1296 1371
 			{
1297
-				$sql = "SELECT rowid, code, libelle as label, coder";
1372
+				$sql = "SELECT rowid, code, libelle as label, coder";
1373
+			}
1298 1374
 				$sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
1299 1375
 				$sql.= " WHERE rowid = ".$idtype;
1300 1376
 				dol_syslog(get_class($this).'::fetch_barcode', LOG_DEBUG);
@@ -1307,8 +1383,7 @@  discard block
 block discarded – undo
1307 1383
 					$this->barcode_type_label = $obj->label;
1308 1384
 					$this->barcode_type_coder = $obj->coder;
1309 1385
 					return 1;
1310
-				}
1311
-				else
1386
+				} else
1312 1387
 				{
1313 1388
 					dol_print_error($this->db);
1314 1389
 					return -1;
@@ -1329,8 +1404,13 @@  discard block
 block discarded – undo
1329 1404
         // phpcs:enable
1330 1405
 		include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
1331 1406
 
1332
-		if (empty($this->fk_project) && ! empty($this->fk_projet)) $this->fk_project = $this->fk_projet;	// For backward compatibility
1333
-		if (empty($this->fk_project)) return 0;
1407
+		if (empty($this->fk_project) && ! empty($this->fk_projet)) {
1408
+		    $this->fk_project = $this->fk_projet;
1409
+		}
1410
+		// For backward compatibility
1411
+		if (empty($this->fk_project)) {
1412
+		    return 0;
1413
+		}
1334 1414
 
1335 1415
 		$project = new Project($this->db);
1336 1416
 		$result = $project->fetch($this->fk_project);
@@ -1351,7 +1431,9 @@  discard block
 block discarded – undo
1351 1431
         // phpcs:enable
1352 1432
 		include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
1353 1433
 
1354
-		if (empty($this->fk_product)) return 0;
1434
+		if (empty($this->fk_product)) {
1435
+		    return 0;
1436
+		}
1355 1437
 
1356 1438
 		$product = new Product($this->db);
1357 1439
 		$result = $product->fetch($this->fk_product);
@@ -1385,9 +1467,15 @@  discard block
 block discarded – undo
1385 1467
 	function fetch_origin()
1386 1468
 	{
1387 1469
         // phpcs:enable
1388
-		if ($this->origin == 'shipping') $this->origin = 'expedition';
1389
-		if ($this->origin == 'delivery') $this->origin = 'livraison';
1390
-        if ($this->origin == 'order_supplier') $this->origin = 'commandeFournisseur';
1470
+		if ($this->origin == 'shipping') {
1471
+		    $this->origin = 'expedition';
1472
+		}
1473
+		if ($this->origin == 'delivery') {
1474
+		    $this->origin = 'livraison';
1475
+		}
1476
+        if ($this->origin == 'order_supplier') {
1477
+            $this->origin = 'commandeFournisseur';
1478
+        }
1391 1479
 
1392 1480
 		$origin = $this->origin;
1393 1481
 
@@ -1479,29 +1567,48 @@  discard block
 block discarded – undo
1479 1567
 	{
1480 1568
 		global $user,$langs,$conf;
1481 1569
 
1482
-		if (empty($table)) 	  $table=$this->table_element;
1483
-		if (empty($id))    	  $id=$this->id;
1484
-		if (empty($format))   $format='text';
1485
-		if (empty($id_field)) $id_field='rowid';
1570
+		if (empty($table)) {
1571
+		    $table=$this->table_element;
1572
+		}
1573
+		if (empty($id)) {
1574
+		    $id=$this->id;
1575
+		}
1576
+		if (empty($format)) {
1577
+		    $format='text';
1578
+		}
1579
+		if (empty($id_field)) {
1580
+		    $id_field='rowid';
1581
+		}
1486 1582
 
1487 1583
 		$error=0;
1488 1584
 
1489 1585
 		$this->db->begin();
1490 1586
 
1491 1587
 		// Special case
1492
-		if ($table == 'product' && $field == 'note_private') $field='note';
1493
-		if (in_array($table, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) $fk_user_field = 'fk_user_mod';
1588
+		if ($table == 'product' && $field == 'note_private') {
1589
+		    $field='note';
1590
+		}
1591
+		if (in_array($table, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) {
1592
+		    $fk_user_field = 'fk_user_mod';
1593
+		}
1494 1594
 
1495 1595
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$table." SET ";
1496 1596
 
1497
-		if ($format == 'text') $sql.= $field." = '".$this->db->escape($value)."'";
1498
-		else if ($format == 'int') $sql.= $field." = ".$this->db->escape($value);
1499
-		else if ($format == 'date') $sql.= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
1597
+		if ($format == 'text') {
1598
+		    $sql.= $field." = '".$this->db->escape($value)."'";
1599
+		} else if ($format == 'int') {
1600
+		    $sql.= $field." = ".$this->db->escape($value);
1601
+		} else if ($format == 'date') {
1602
+		    $sql.= $field." = ".($value ? "'".$this->db->idate($value)."'" : "null");
1603
+		}
1500 1604
 
1501 1605
 		if ($fk_user_field)
1502 1606
 		{
1503
-			if (! empty($fuser) && is_object($fuser)) $sql.=", ".$fk_user_field." = ".$fuser->id;
1504
-			elseif (empty($fuser) || $fuser != 'none') $sql.=", ".$fk_user_field." = ".$user->id;
1607
+			if (! empty($fuser) && is_object($fuser)) {
1608
+			    $sql.=", ".$fk_user_field." = ".$fuser->id;
1609
+			} elseif (empty($fuser) || $fuser != 'none') {
1610
+			    $sql.=", ".$fk_user_field." = ".$user->id;
1611
+			}
1505 1612
 		}
1506 1613
 
1507 1614
 		$sql.= " WHERE ".$id_field." = ".$id;
@@ -1516,28 +1623,32 @@  discard block
 block discarded – undo
1516 1623
 				if (empty($this->fields) && method_exists($this, 'fetch'))
1517 1624
 				{
1518 1625
 					$result = $this->fetch($id);
1519
-				}
1520
-				else
1626
+				} else
1521 1627
 				{
1522 1628
 					$result = $this->fetchCommon($id);
1523 1629
 				}
1524
-				if ($result >= 0) $result=$this->call_trigger($trigkey, (! empty($fuser) && is_object($fuser)) ? $fuser : $user);   // This may set this->errors
1525
-				if ($result < 0) $error++;
1630
+				if ($result >= 0) {
1631
+				    $result=$this->call_trigger($trigkey, (! empty($fuser) && is_object($fuser)) ? $fuser : $user);
1632
+				}
1633
+				// This may set this->errors
1634
+				if ($result < 0) {
1635
+				    $error++;
1636
+				}
1526 1637
 			}
1527 1638
 
1528 1639
 			if (! $error)
1529 1640
 			{
1530
-				if (property_exists($this, $field)) $this->$field = $value;
1641
+				if (property_exists($this, $field)) {
1642
+				    $this->$field = $value;
1643
+				}
1531 1644
 				$this->db->commit();
1532 1645
 				return 1;
1533
-			}
1534
-			else
1646
+			} else
1535 1647
 			{
1536 1648
 				$this->db->rollback();
1537 1649
 				return -2;
1538 1650
 			}
1539
-		}
1540
-		else
1651
+		} else
1541 1652
 		{
1542 1653
 			$this->error=$this->db->lasterror();
1543 1654
 			$this->db->rollback();
@@ -1564,36 +1675,66 @@  discard block
 block discarded – undo
1564 1675
 			dol_print_error('',get_class($this)."::load_previous_next_ref was called on objet with property table_element not defined");
1565 1676
 			return -1;
1566 1677
 		}
1567
-		if ($fieldid == 'none') return 1;
1678
+		if ($fieldid == 'none') {
1679
+		    return 1;
1680
+		}
1568 1681
 
1569 1682
 		// Security on socid
1570 1683
 		$socid = 0;
1571
-		if ($user->societe_id > 0) $socid = $user->societe_id;
1684
+		if ($user->societe_id > 0) {
1685
+		    $socid = $user->societe_id;
1686
+		}
1572 1687
 
1573 1688
 		// this->ismultientitymanaged contains
1574 1689
 		// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
1575 1690
 		$alias = 's';
1576
-		if ($this->element == 'societe') $alias = 'te';
1691
+		if ($this->element == 'societe') {
1692
+		    $alias = 'te';
1693
+		}
1577 1694
 
1578 1695
 		$sql = "SELECT MAX(te.".$fieldid.")";
1579 1696
 		$sql.= " FROM ".(empty($nodbprefix)?MAIN_DB_PREFIX:'').$this->table_element." as te";
1580 1697
 		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1581 1698
             $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1582 1699
 		}
1583
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1584
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1585
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1586
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid)  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1700
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) {
1701
+		    $sql.= ", ".MAIN_DB_PREFIX."societe as s";
1702
+		}
1703
+		// If we need to link to societe to limit select to entity
1704
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1705
+		    $sql.= ", ".MAIN_DB_PREFIX."societe as s";
1706
+		}
1707
+		// If we need to link to societe to limit select to socid
1708
+		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1709
+		    $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";
1710
+		}
1711
+		// If we need to link to societe to limit select to socid
1712
+		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) {
1713
+		    $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1714
+		}
1587 1715
 		$sql.= " WHERE te.".$fieldid." < '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1588
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1589
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1716
+		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) {
1717
+		    $sql.= " AND sc.fk_user = " .$user->id;
1718
+		}
1719
+		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) {
1720
+		    $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1721
+		}
1590 1722
 		if (! empty($filter))
1591 1723
 		{
1592
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1724
+			if (! preg_match('/^\s*AND/i', $filter)) {
1725
+			    $sql.=" AND ";
1726
+			}
1727
+			// For backward compatibility
1593 1728
 			$sql.=$filter;
1594 1729
 		}
1595
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1596
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1730
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) {
1731
+		    $sql.= ' AND te.fk_soc = s.rowid';
1732
+		}
1733
+		// If we need to link to societe to limit select to entity
1734
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1735
+		    $sql.= ' AND te.fk_soc = s.rowid';
1736
+		}
1737
+		// If we need to link to societe to limit select to socid
1597 1738
 		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1598 1739
 			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1599 1740
                 if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
@@ -1606,9 +1747,15 @@  discard block
 block discarded – undo
1606 1747
 				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1607 1748
 			}
1608 1749
 		}
1609
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1610
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1611
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1750
+		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') {
1751
+		    $sql.= ' AND te.fk_soc = ' . $socid;
1752
+		}
1753
+		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') {
1754
+		    $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1755
+		}
1756
+		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') {
1757
+		    $sql.= ' AND te.rowid = ' . $socid;
1758
+		}
1612 1759
 		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1613 1760
 
1614 1761
 		$result = $this->db->query($sql);
@@ -1626,20 +1773,44 @@  discard block
 block discarded – undo
1626 1773
 		if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1627 1774
             $sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug";
1628 1775
 		}
1629
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to entity
1630
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s";	// If we need to link to societe to limit select to socid
1631
-		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";	// If we need to link to societe to limit select to socid
1632
-		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1776
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) {
1777
+		    $sql.= ", ".MAIN_DB_PREFIX."societe as s";
1778
+		}
1779
+		// If we need to link to societe to limit select to entity
1780
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1781
+		    $sql.= ", ".MAIN_DB_PREFIX."societe as s";
1782
+		}
1783
+		// If we need to link to societe to limit select to socid
1784
+		else if ($this->restrictiononfksoc == 2 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1785
+		    $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON te.fk_soc = s.rowid";
1786
+		}
1787
+		// If we need to link to societe to limit select to socid
1788
+		if ($this->restrictiononfksoc && !$user->rights->societe->client->voir && !$socid) {
1789
+		    $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
1790
+		}
1633 1791
 		$sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'";  // ->ref must always be defined (set to id if field does not exists)
1634
-		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
1635
-		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1792
+		if ($this->restrictiononfksoc == 1 && !$user->rights->societe->client->voir && !$socid) {
1793
+		    $sql.= " AND sc.fk_user = " .$user->id;
1794
+		}
1795
+		if ($this->restrictiononfksoc == 2 && !$user->rights->societe->client->voir && !$socid) {
1796
+		    $sql.= " AND (sc.fk_user = " .$user->id.' OR te.fk_soc IS NULL)';
1797
+		}
1636 1798
 		if (! empty($filter))
1637 1799
 		{
1638
-			if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND ";   // For backward compatibility
1800
+			if (! preg_match('/^\s*AND/i', $filter)) {
1801
+			    $sql.=" AND ";
1802
+			}
1803
+			// For backward compatibility
1639 1804
 			$sql.=$filter;
1640 1805
 		}
1641
-		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to entity
1642
-		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) $sql.= ' AND te.fk_soc = s.rowid';			// If we need to link to societe to limit select to socid
1806
+		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2) {
1807
+		    $sql.= ' AND te.fk_soc = s.rowid';
1808
+		}
1809
+		// If we need to link to societe to limit select to entity
1810
+		else if ($this->restrictiononfksoc == 1 && $this->element != 'societe' && !$user->rights->societe->client->voir && !$socid) {
1811
+		    $sql.= ' AND te.fk_soc = s.rowid';
1812
+		}
1813
+		// If we need to link to societe to limit select to socid
1643 1814
 		if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
1644 1815
 			if ($this->element == 'user' && !empty(Globals::$conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
1645 1816
                 if (!empty($user->admin) && empty($user->entity) && Globals::$conf->entity == 1) {
@@ -1652,9 +1823,15 @@  discard block
 block discarded – undo
1652 1823
 				$sql.= ' AND te.entity IN ('.getEntity($this->element).')';
1653 1824
 			}
1654 1825
 		}
1655
-		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') $sql.= ' AND te.fk_soc = ' . $socid;
1656
-		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1657
-		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') $sql.= ' AND te.rowid = ' . $socid;
1826
+		if ($this->restrictiononfksoc == 1 && $socid && $this->element != 'societe') {
1827
+		    $sql.= ' AND te.fk_soc = ' . $socid;
1828
+		}
1829
+		if ($this->restrictiononfksoc == 2 && $socid && $this->element != 'societe') {
1830
+		    $sql.= ' AND (te.fk_soc = ' . $socid.' OR te.fk_soc IS NULL)';
1831
+		}
1832
+		if ($this->restrictiononfksoc && $socid && $this->element == 'societe') {
1833
+		    $sql.= ' AND te.rowid = ' . $socid;
1834
+		}
1658 1835
 		//print 'socid='.$socid.' restrictiononfksoc='.$this->restrictiononfksoc.' ismultientitymanaged = '.$this->ismultientitymanaged.' filter = '.$filter.' -> '.$sql."<br>";
1659 1836
 		// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
1660 1837
 
@@ -1686,8 +1863,11 @@  discard block
 block discarded – undo
1686 1863
 		$i = 0;
1687 1864
 		while ($i < $num)
1688 1865
 		{
1689
-			if ($source == 'thirdparty') $contactAlreadySelected[$i] = $tab[$i]['socid'];
1690
-			else  $contactAlreadySelected[$i] = $tab[$i]['id'];
1866
+			if ($source == 'thirdparty') {
1867
+			    $contactAlreadySelected[$i] = $tab[$i]['socid'];
1868
+			} else {
1869
+			    $contactAlreadySelected[$i] = $tab[$i]['id'];
1870
+			}
1691 1871
 			$i++;
1692 1872
 		}
1693 1873
 		return $contactAlreadySelected;
@@ -1711,14 +1891,19 @@  discard block
 block discarded – undo
1711 1891
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1712 1892
 		if ($this->table_element == 'actioncomm')
1713 1893
 		{
1714
-			if ($projectid) $sql.= ' SET fk_project = '.$projectid;
1715
-			else $sql.= ' SET fk_project = NULL';
1894
+			if ($projectid) {
1895
+			    $sql.= ' SET fk_project = '.$projectid;
1896
+			} else {
1897
+			    $sql.= ' SET fk_project = NULL';
1898
+			}
1716 1899
 			$sql.= ' WHERE id = '.$this->id;
1717
-		}
1718
-		else
1900
+		} else
1719 1901
 		{
1720
-			if ($projectid) $sql.= ' SET fk_projet = '.$projectid;
1721
-			else $sql.= ' SET fk_projet = NULL';
1902
+			if ($projectid) {
1903
+			    $sql.= ' SET fk_projet = '.$projectid;
1904
+			} else {
1905
+			    $sql.= ' SET fk_projet = NULL';
1906
+			}
1722 1907
 			$sql.= ' WHERE rowid = '.$this->id;
1723 1908
 		}
1724 1909
 
@@ -1727,8 +1912,7 @@  discard block
 block discarded – undo
1727 1912
 		{
1728 1913
 			$this->fk_project = $projectid;
1729 1914
 			return 1;
1730
-		}
1731
-		else
1915
+		} else
1732 1916
 		{
1733 1917
 			dol_print_error($this->db);
1734 1918
 			return -1;
@@ -1748,8 +1932,12 @@  discard block
 block discarded – undo
1748 1932
 		{
1749 1933
 			// TODO uniformize field name
1750 1934
 			$fieldname = 'fk_mode_reglement';
1751
-			if ($this->element == 'societe') $fieldname = 'mode_reglement';
1752
-			if (get_class($this) == 'Fournisseur') $fieldname = 'mode_reglement_supplier';
1935
+			if ($this->element == 'societe') {
1936
+			    $fieldname = 'mode_reglement';
1937
+			}
1938
+			if (get_class($this) == 'Fournisseur') {
1939
+			    $fieldname = 'mode_reglement_supplier';
1940
+			}
1753 1941
 
1754 1942
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1755 1943
 			$sql .= ' SET '.$fieldname.' = '.$id;
@@ -1759,17 +1947,17 @@  discard block
 block discarded – undo
1759 1947
 			{
1760 1948
 				$this->mode_reglement_id = $id;
1761 1949
 				// for supplier
1762
-				if (get_class($this) == 'Fournisseur') $this->mode_reglement_supplier_id = $id;
1950
+				if (get_class($this) == 'Fournisseur') {
1951
+				    $this->mode_reglement_supplier_id = $id;
1952
+				}
1763 1953
 				return 1;
1764
-			}
1765
-			else
1954
+			} else
1766 1955
 			{
1767 1956
 				dol_syslog(get_class($this).'::setPaymentMethods Erreur '.$sql.' - '.$this->db->error());
1768 1957
 				$this->error=$this->db->error();
1769 1958
 				return -1;
1770 1959
 			}
1771
-		}
1772
-		else
1960
+		} else
1773 1961
 		{
1774 1962
 			dol_syslog(get_class($this).'::setPaymentMethods, status of the object is incompatible');
1775 1963
 			$this->error='Status of the object is incompatible '.$this->statut;
@@ -1799,18 +1987,18 @@  discard block
 block discarded – undo
1799 1987
 				$this->multicurrency_code = $code;
1800 1988
 
1801 1989
 				list($fk_multicurrency, $rate) = MultiCurrency::getIdAndTxFromCode($this->db, $code);
1802
-				if ($rate) $this->setMulticurrencyRate($rate,2);
1990
+				if ($rate) {
1991
+				    $this->setMulticurrencyRate($rate,2);
1992
+				}
1803 1993
 
1804 1994
 				return 1;
1805
-			}
1806
-			else
1995
+			} else
1807 1996
 			{
1808 1997
 				dol_syslog(get_class($this).'::setMulticurrencyCode Erreur '.$sql.' - '.$this->db->error());
1809 1998
 				$this->error=$this->db->error();
1810 1999
 				return -1;
1811 2000
 			}
1812
-		}
1813
-		else
2001
+		} else
1814 2002
 		{
1815 2003
 			dol_syslog(get_class($this).'::setMulticurrencyCode, status of the object is incompatible');
1816 2004
 			$this->error='Status of the object is incompatible '.$this->statut;
@@ -1904,15 +2092,13 @@  discard block
 block discarded – undo
1904 2092
 				}
1905 2093
 
1906 2094
 				return 1;
1907
-			}
1908
-			else
2095
+			} else
1909 2096
 			{
1910 2097
 				dol_syslog(get_class($this).'::setMulticurrencyRate Erreur '.$sql.' - '.$this->db->error());
1911 2098
 				$this->error=$this->db->error();
1912 2099
 				return -1;
1913 2100
 			}
1914
-		}
1915
-		else
2101
+		} else
1916 2102
 		{
1917 2103
 			dol_syslog(get_class($this).'::setMulticurrencyRate, status of the object is incompatible');
1918 2104
 			$this->error='Status of the object is incompatible '.$this->statut;
@@ -1933,8 +2119,12 @@  discard block
 block discarded – undo
1933 2119
 		{
1934 2120
 			// TODO uniformize field name
1935 2121
 			$fieldname = 'fk_cond_reglement';
1936
-			if ($this->element == 'societe') $fieldname = 'cond_reglement';
1937
-			if (get_class($this) == 'Fournisseur') $fieldname = 'cond_reglement_supplier';
2122
+			if ($this->element == 'societe') {
2123
+			    $fieldname = 'cond_reglement';
2124
+			}
2125
+			if (get_class($this) == 'Fournisseur') {
2126
+			    $fieldname = 'cond_reglement_supplier';
2127
+			}
1938 2128
 
1939 2129
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
1940 2130
 			$sql .= ' SET '.$fieldname.' = '.$id;
@@ -1944,18 +2134,18 @@  discard block
 block discarded – undo
1944 2134
 			{
1945 2135
 				$this->cond_reglement_id = $id;
1946 2136
 				// for supplier
1947
-				if (get_class($this) == 'Fournisseur') $this->cond_reglement_supplier_id = $id;
2137
+				if (get_class($this) == 'Fournisseur') {
2138
+				    $this->cond_reglement_supplier_id = $id;
2139
+				}
1948 2140
 				$this->cond_reglement = $id;	// for compatibility
1949 2141
 				return 1;
1950
-			}
1951
-			else
2142
+			} else
1952 2143
 			{
1953 2144
 				dol_syslog(get_class($this).'::setPaymentTerms Erreur '.$sql.' - '.$this->db->error());
1954 2145
 				$this->error=$this->db->error();
1955 2146
 				return -1;
1956 2147
 			}
1957
-		}
1958
-		else
2148
+		} else
1959 2149
 		{
1960 2150
 			dol_syslog(get_class($this).'::setPaymentTerms, status of the object is incompatible');
1961 2151
 			$this->error='Status of the object is incompatible '.$this->statut;
@@ -1973,7 +2163,9 @@  discard block
 block discarded – undo
1973 2163
 	function setDeliveryAddress($id)
1974 2164
 	{
1975 2165
 		$fieldname = 'fk_delivery_address';
1976
-		if ($this->element == 'delivery' || $this->element == 'shipping') $fieldname = 'fk_address';
2166
+		if ($this->element == 'delivery' || $this->element == 'shipping') {
2167
+		    $fieldname = 'fk_address';
2168
+		}
1977 2169
 
1978 2170
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ".$fieldname." = ".$id;
1979 2171
 		$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
@@ -1982,8 +2174,7 @@  discard block
 block discarded – undo
1982 2174
 		{
1983 2175
 			$this->fk_delivery_address = $id;
1984 2176
 			return 1;
1985
-		}
1986
-		else
2177
+		} else
1987 2178
 		{
1988 2179
 			$this->error=$this->db->error();
1989 2180
 			dol_syslog(get_class($this).'::setDeliveryAddress Erreur '.$sql.' - '.$this->error);
@@ -2005,7 +2196,9 @@  discard block
 block discarded – undo
2005 2196
 	{
2006 2197
         global $user;
2007 2198
 
2008
-        if (empty($userused)) $userused=$user;
2199
+        if (empty($userused)) {
2200
+            $userused=$user;
2201
+        }
2009 2202
 
2010 2203
         $error = 0;
2011 2204
 
@@ -2016,7 +2209,9 @@  discard block
 block discarded – undo
2016 2209
 
2017 2210
         $this->db->begin();
2018 2211
 
2019
-		if ($shipping_method_id<0) $shipping_method_id='NULL';
2212
+		if ($shipping_method_id<0) {
2213
+		    $shipping_method_id='NULL';
2214
+		}
2020 2215
 		dol_syslog(get_class($this).'::setShippingMethod('.$shipping_method_id.')');
2021 2216
 
2022 2217
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
@@ -2033,7 +2228,9 @@  discard block
 block discarded – undo
2033 2228
                 // Call trigger
2034 2229
                 $this->context=array('shippingmethodupdate'=>1);
2035 2230
                 $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2036
-                if ($result < 0) $error++;
2231
+                if ($result < 0) {
2232
+                    $error++;
2233
+                }
2037 2234
                 // End call trigger
2038 2235
             }
2039 2236
         }
@@ -2061,7 +2258,9 @@  discard block
 block discarded – undo
2061 2258
 			dol_syslog(get_class($this)."::setWarehouse was called on objet with property table_element not defined",LOG_ERR);
2062 2259
 			return -1;
2063 2260
 		}
2064
-		if ($warehouse_id<0) $warehouse_id='NULL';
2261
+		if ($warehouse_id<0) {
2262
+		    $warehouse_id='NULL';
2263
+		}
2065 2264
 		dol_syslog(get_class($this).'::setWarehouse('.$warehouse_id.')');
2066 2265
 
2067 2266
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
@@ -2108,8 +2307,7 @@  discard block
 block discarded – undo
2108 2307
 		{
2109 2308
 			$this->modelpdf=$modelpdf;
2110 2309
 			return 1;
2111
-		}
2112
-		else
2310
+		} else
2113 2311
 		{
2114 2312
 			dol_print_error($this->db);
2115 2313
 			return 0;
@@ -2129,7 +2327,9 @@  discard block
 block discarded – undo
2129 2327
 	{
2130 2328
         global $user;
2131 2329
 
2132
-        if (empty($userused)) $userused=$user;
2330
+        if (empty($userused)) {
2331
+            $userused=$user;
2332
+        }
2133 2333
 
2134 2334
         $error = 0;
2135 2335
 
@@ -2139,7 +2339,9 @@  discard block
 block discarded – undo
2139 2339
 		}
2140 2340
         $this->db->begin();
2141 2341
 
2142
-		if ($fk_account<0) $fk_account='NULL';
2342
+		if ($fk_account<0) {
2343
+		    $fk_account='NULL';
2344
+		}
2143 2345
 		dol_syslog(get_class($this).'::setBankAccount('.$fk_account.')');
2144 2346
 
2145 2347
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
@@ -2152,15 +2354,16 @@  discard block
 block discarded – undo
2152 2354
             dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error());
2153 2355
             $this->error = $this->db->lasterror();
2154 2356
             $error++;
2155
-        }
2156
-        else
2357
+        } else
2157 2358
         {
2158 2359
             if (!$notrigger)
2159 2360
             {
2160 2361
                 // Call trigger
2161 2362
                 $this->context=array('bankaccountupdate'=>1);
2162 2363
                 $result = $this->call_trigger(strtoupper(get_class($this)) . '_MODIFY', $userused);
2163
-                if ($result < 0) $error++;
2364
+                if ($result < 0) {
2365
+                    $error++;
2366
+                }
2164 2367
                 // End call trigger
2165 2368
             }
2166 2369
         }
@@ -2168,8 +2371,7 @@  discard block
 block discarded – undo
2168 2371
         {
2169 2372
             $this->db->rollback();
2170 2373
             return -1;
2171
-        }
2172
-        else
2374
+        } else
2173 2375
         {
2174 2376
             $this->fk_account = ($fk_account=='NULL')?null:$fk_account;
2175 2377
             $this->db->commit();
@@ -2208,8 +2410,12 @@  discard block
 block discarded – undo
2208 2410
 		$nl=0;
2209 2411
 		$sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2210 2412
 		$sql.= ' WHERE '.$this->fk_element.'='.$this->id;
2211
-		if (! $renum) $sql.= ' AND rang = 0';
2212
-		if ($renum) $sql.= ' AND rang <> 0';
2413
+		if (! $renum) {
2414
+		    $sql.= ' AND rang = 0';
2415
+		}
2416
+		if ($renum) {
2417
+		    $sql.= ' AND rang <> 0';
2418
+		}
2213 2419
 
2214 2420
 		dol_syslog(get_class($this)."::line_order", LOG_DEBUG);
2215 2421
 		$resql = $this->db->query($sql);
@@ -2217,8 +2423,9 @@  discard block
 block discarded – undo
2217 2423
 		{
2218 2424
 			$row = $this->db->fetch_row($resql);
2219 2425
 			$nl = $row[0];
2220
-		}
2221
-		else dol_print_error($this->db);
2426
+		} else {
2427
+		    dol_print_error($this->db);
2428
+		}
2222 2429
 		if ($nl > 0)
2223 2430
 		{
2224 2431
 			// The goal of this part is to reorder all lines, with all children lines sharing the same
@@ -2228,7 +2435,9 @@  discard block
 block discarded – undo
2228 2435
 			// We first search all lines that are parent lines (for multilevel details lines)
2229 2436
 			$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2230 2437
 			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2231
-			if ($fk_parent_line) $sql.= ' AND fk_parent_line IS NULL';
2438
+			if ($fk_parent_line) {
2439
+			    $sql.= ' AND fk_parent_line IS NULL';
2440
+			}
2232 2441
 			$sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
2233 2442
 
2234 2443
 			dol_syslog(get_class($this)."::line_order search all parent lines", LOG_DEBUG);
@@ -2260,8 +2469,7 @@  discard block
 block discarded – undo
2260 2469
 						$this->updateRangOfLine($row, ($key+1));
2261 2470
 					}
2262 2471
 				}
2263
-			}
2264
-			else
2472
+			} else
2265 2473
 			{
2266 2474
 				dol_print_error($this->db);
2267 2475
 			}
@@ -2354,7 +2562,9 @@  discard block
 block discarded – undo
2354 2562
 	function updateRangOfLine($rowid,$rang)
2355 2563
 	{
2356 2564
 		$fieldposition = 'rang';
2357
-		if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2565
+		if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) {
2566
+		    $fieldposition = 'position';
2567
+		}
2358 2568
 
2359 2569
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2360 2570
 		$sql.= ' WHERE rowid = '.$rowid;
@@ -2395,7 +2605,9 @@  discard block
 block discarded – undo
2395 2605
 		if ($rang > 1)
2396 2606
 		{
2397 2607
 			$fieldposition = 'rang';
2398
-			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2608
+			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) {
2609
+			    $fieldposition = 'position';
2610
+			}
2399 2611
 
2400 2612
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang ;
2401 2613
 			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
@@ -2408,8 +2620,7 @@  discard block
 block discarded – undo
2408 2620
 				{
2409 2621
 					dol_print_error($this->db);
2410 2622
 				}
2411
-			}
2412
-			else
2623
+			} else
2413 2624
 			{
2414 2625
 				dol_print_error($this->db);
2415 2626
 			}
@@ -2429,7 +2640,9 @@  discard block
 block discarded – undo
2429 2640
 		if ($rang < $max)
2430 2641
 		{
2431 2642
 			$fieldposition = 'rang';
2432
-			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
2643
+			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) {
2644
+			    $fieldposition = 'position';
2645
+			}
2433 2646
 
2434 2647
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
2435 2648
 			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
@@ -2442,8 +2655,7 @@  discard block
 block discarded – undo
2442 2655
 				{
2443 2656
 					dol_print_error($this->db);
2444 2657
 				}
2445
-			}
2446
-			else
2658
+			} else
2447 2659
 			{
2448 2660
 				dol_print_error($this->db);
2449 2661
 			}
@@ -2514,8 +2726,7 @@  discard block
 block discarded – undo
2514 2726
 				if (! empty($row[0]))
2515 2727
 				{
2516 2728
 					return $row[0];
2517
-				}
2518
-				else
2729
+				} else
2519 2730
 				{
2520 2731
 					return $this->getRangOfLine($fk_parent_line);
2521 2732
 				}
@@ -2562,8 +2773,7 @@  discard block
 block discarded – undo
2562 2773
 		{
2563 2774
 			$this->ref_ext = $ref_ext;
2564 2775
 			return 1;
2565
-		}
2566
-		else
2776
+		} else
2567 2777
 		{
2568 2778
 			$this->error=$this->db->error();
2569 2779
 			return -1;
@@ -2597,7 +2807,9 @@  discard block
 block discarded – undo
2597 2807
 		}
2598 2808
 		// Special cas
2599 2809
 		//var_dump($this->table_element);exit;
2600
-		if ($this->table_element == 'product') $suffix='';
2810
+		if ($this->table_element == 'product') {
2811
+		    $suffix='';
2812
+		}
2601 2813
 
2602 2814
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
2603 2815
 		$sql.= " SET note".$suffix." = ".(!empty($note)?("'".$this->db->escape($note)."'"):"NULL");
@@ -2607,16 +2819,17 @@  discard block
 block discarded – undo
2607 2819
 		dol_syslog(get_class($this)."::update_note", LOG_DEBUG);
2608 2820
 		if ($this->db->query($sql))
2609 2821
 		{
2610
-			if ($suffix == '_public') $this->note_public = $note;
2611
-			else if ($suffix == '_private') $this->note_private = $note;
2612
-			else
2822
+			if ($suffix == '_public') {
2823
+			    $this->note_public = $note;
2824
+			} else if ($suffix == '_private') {
2825
+			    $this->note_private = $note;
2826
+			} else
2613 2827
 			{
2614 2828
 				$this->note = $note;      // deprecated
2615 2829
 				$this->note_private = $note;
2616 2830
 			}
2617 2831
 			return 1;
2618
-		}
2619
-		else
2832
+		} else
2620 2833
 		{
2621 2834
 			$this->error=$this->db->lasterror();
2622 2835
 			return -1;
@@ -2656,37 +2869,45 @@  discard block
 block discarded – undo
2656 2869
 
2657 2870
 		// Some external module want no update price after a trigger because they have another method to calculate the total (ex: with an extrafield)
2658 2871
 		$MODULE = "";
2659
-		if ($this->element == 'propal')
2660
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL";
2661
-		elseif ($this->element == 'order')
2662
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER";
2663
-		elseif ($this->element == 'facture')
2664
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE";
2665
-		elseif ($this->element == 'facture_fourn')
2666
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE";
2667
-		elseif ($this->element == 'order_supplier')
2668
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER";
2669
-		elseif ($this->element == 'supplier_proposal')
2670
-			$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
2872
+		if ($this->element == 'propal') {
2873
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL";
2874
+		} elseif ($this->element == 'order') {
2875
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER";
2876
+		} elseif ($this->element == 'facture') {
2877
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE";
2878
+		} elseif ($this->element == 'facture_fourn') {
2879
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE";
2880
+		} elseif ($this->element == 'order_supplier') {
2881
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER";
2882
+		} elseif ($this->element == 'supplier_proposal') {
2883
+					$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
2884
+		}
2671 2885
 
2672 2886
 		if (! empty($MODULE)) {
2673 2887
 			if (!empty(Globals::$conf->global->$MODULE)) {
2674 2888
                 $modsactivated = explode(',', Globals::$conf->global->$MODULE);
2675 2889
                 foreach ($modsactivated as $mod) {
2676
-					if (Globals::$conf->$mod->enabled)
2677
-                        return 1; // update was disabled by specific setup
2890
+					if (Globals::$conf->$mod->enabled) {
2891
+					                        return 1;
2892
+					}
2893
+					// update was disabled by specific setup
2678 2894
 				}
2679 2895
 			}
2680 2896
 		}
2681 2897
 
2682 2898
 		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
2683 2899
 
2684
-		if ($roundingadjust == '-1') $roundingadjust='auto';	// For backward compatibility
2900
+		if ($roundingadjust == '-1') {
2901
+		    $roundingadjust='auto';
2902
+		}
2903
+		// For backward compatibility
2685 2904
 
2686 2905
 		$forcedroundingmode=$roundingadjust;
2687
-		if ($forcedroundingmode == 'auto' && isset(Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND))
2688
-            $forcedroundingmode = Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND;
2689
-        elseif ($forcedroundingmode == 'auto') $forcedroundingmode='0';
2906
+		if ($forcedroundingmode == 'auto' && isset(Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND)) {
2907
+		            $forcedroundingmode = Globals::$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND;
2908
+		} elseif ($forcedroundingmode == 'auto') {
2909
+            $forcedroundingmode='0';
2910
+        }
2690 2911
 
2691 2912
 		$error=0;
2692 2913
 
@@ -2709,15 +2930,22 @@  discard block
 block discarded – undo
2709 2930
 
2710 2931
 		$sql = 'SELECT rowid, qty, '.$fieldup.' as up, remise_percent, total_ht, '.$fieldtva.' as total_tva, total_ttc, '.$fieldlocaltax1.' as total_localtax1, '.$fieldlocaltax2.' as total_localtax2,';
2711 2932
 		$sql.= ' tva_tx as vatrate, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, info_bits, product_type';
2712
-			if ($this->table_element_line == 'facturedet') $sql.= ', situation_percent';
2933
+			if ($this->table_element_line == 'facturedet') {
2934
+			    $sql.= ', situation_percent';
2935
+			}
2713 2936
 			$sql.= ', multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
2714 2937
 		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
2715 2938
 		$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
2716 2939
 		if ($exclspec)
2717 2940
 		{
2718 2941
 			$product_field='product_type';
2719
-			if ($this->table_element_line == 'contratdet') $product_field='';    // contratdet table has no product_type field
2720
-			if ($product_field) $sql.= ' AND '.$product_field.' <> 9';
2942
+			if ($this->table_element_line == 'contratdet') {
2943
+			    $product_field='';
2944
+			}
2945
+			// contratdet table has no product_type field
2946
+			if ($product_field) {
2947
+			    $sql.= ' AND '.$product_field.' <> 9';
2948
+			}
2721 2949
 		}
2722 2950
 		$sql.= ' ORDER by rowid';	// We want to be sure to always use same order of line to not change lines differently when option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND is used
2723 2951
 
@@ -2747,9 +2975,11 @@  discard block
 block discarded – undo
2747 2975
 				$parameters=array('fk_element' => $obj->rowid);
2748 2976
 				$reshook = $hookmanager->executeHooks('changeRoundingMode', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
2749 2977
 
2750
-				if (empty($reshook) && $forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
2978
+				if (empty($reshook) && $forcedroundingmode == '0') {
2979
+				    // Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
2751 2980
 				{
2752
-					$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
2981
+					$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
2982
+				}
2753 2983
 					$tmpcal=calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
2754 2984
 					$diff=price2num($tmpcal[1] - $obj->total_tva, 'MT', 1);
2755 2985
 					if ($diff)
@@ -2757,7 +2987,9 @@  discard block
 block discarded – undo
2757 2987
 						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".$tmpcal[1].", total_ttc = ".$tmpcal[2]." WHERE rowid = ".$obj->rowid;
2758 2988
 						dol_syslog('We found unconsistent data into detailed line (difference of '.$diff.') for line rowid = '.$obj->rowid." (total vat of line calculated=".$tmpcal[1].", database=".$obj->total_tva."). We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2759 2989
 								$resqlfix=$this->db->query($sqlfix);
2760
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
2990
+								if (! $resqlfix) {
2991
+								    dol_print_error($this->db,'Failed to update line');
2992
+								}
2761 2993
 								$obj->total_tva = $tmpcal[1];
2762 2994
 								$obj->total_ttc = $tmpcal[2];
2763 2995
 						//
@@ -2773,16 +3005,24 @@  discard block
 block discarded – undo
2773 3005
 				$this->multicurrency_total_tva       += $obj->multicurrency_total_tva;
2774 3006
 				$this->multicurrency_total_ttc       += $obj->multicurrency_total_ttc;
2775 3007
 
2776
-				if (! isset($total_ht_by_vats[$obj->vatrate]))  $total_ht_by_vats[$obj->vatrate]=0;
2777
-				if (! isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate]=0;
2778
-				if (! isset($total_ttc_by_vats[$obj->vatrate])) $total_ttc_by_vats[$obj->vatrate]=0;
3008
+				if (! isset($total_ht_by_vats[$obj->vatrate])) {
3009
+				    $total_ht_by_vats[$obj->vatrate]=0;
3010
+				}
3011
+				if (! isset($total_tva_by_vats[$obj->vatrate])) {
3012
+				    $total_tva_by_vats[$obj->vatrate]=0;
3013
+				}
3014
+				if (! isset($total_ttc_by_vats[$obj->vatrate])) {
3015
+				    $total_ttc_by_vats[$obj->vatrate]=0;
3016
+				}
2779 3017
 				$total_ht_by_vats[$obj->vatrate]  += $obj->total_ht;
2780 3018
 				$total_tva_by_vats[$obj->vatrate] += $obj->total_tva;
2781 3019
 				$total_ttc_by_vats[$obj->vatrate] += $obj->total_ttc;
2782 3020
 
2783
-				if ($forcedroundingmode == '1')	// Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
3021
+				if ($forcedroundingmode == '1') {
3022
+				    // Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
2784 3023
 				{
2785
-					$tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
3024
+					$tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
3025
+				}
2786 3026
 					$diff=price2num($total_tva_by_vats[$obj->vatrate]-$tmpvat, 'MT', 1);
2787 3027
 					//print 'Line '.$i.' rowid='.$obj->rowid.' vat_rate='.$obj->vatrate.' total_ht='.$obj->total_ht.' total_tva='.$obj->total_tva.' total_ttc='.$obj->total_ttc.' total_ht_by_vats='.$total_ht_by_vats[$obj->vatrate].' total_tva_by_vats='.$total_tva_by_vats[$obj->vatrate].' (new calculation = '.$tmpvat.') total_ttc_by_vats='.$total_ttc_by_vats[$obj->vatrate].($diff?" => DIFF":"")."<br>\n";
2788 3028
 					if ($diff)
@@ -2791,7 +3031,9 @@  discard block
 block discarded – undo
2791 3031
 						$sqlfix="UPDATE ".MAIN_DB_PREFIX.$this->table_element_line." SET ".$fieldtva." = ".($obj->total_tva - $diff).", total_ttc = ".($obj->total_ttc - $diff)." WHERE rowid = ".$obj->rowid;
2792 3032
 						dol_syslog('We found a difference of '.$diff.' for line rowid = '.$obj->rowid.". We fix the total_vat and total_ttc of line by running sqlfix = ".$sqlfix);
2793 3033
 								$resqlfix=$this->db->query($sqlfix);
2794
-								if (! $resqlfix) dol_print_error($this->db,'Failed to update line');
3034
+								if (! $resqlfix) {
3035
+								    dol_print_error($this->db,'Failed to update line');
3036
+								}
2795 3037
 								$this->total_tva -= $diff;
2796 3038
 								$this->total_ttc -= $diff;
2797 3039
 								$total_tva_by_vats[$obj->vatrate] -= $diff;
@@ -2832,11 +3074,21 @@  discard block
 block discarded – undo
2832 3074
 			$fieldlocaltax2='localtax2';
2833 3075
 			$fieldttc='total_ttc';
2834 3076
 			// Specific code for backward compatibility with old field names
2835
-			if ($this->element == 'facture' || $this->element == 'facturerec')             $fieldht='total';
2836
-			if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva='total_tva';
2837
-			if ($this->element == 'propal')                                                $fieldttc='total';
2838
-			if ($this->element == 'expensereport')                                         $fieldtva='total_tva';
2839
-			if ($this->element == 'supplier_proposal')                                     $fieldttc='total';
3077
+			if ($this->element == 'facture' || $this->element == 'facturerec') {
3078
+			    $fieldht='total';
3079
+			}
3080
+			if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') {
3081
+			    $fieldtva='total_tva';
3082
+			}
3083
+			if ($this->element == 'propal') {
3084
+			    $fieldttc='total';
3085
+			}
3086
+			if ($this->element == 'expensereport') {
3087
+			    $fieldtva='total_tva';
3088
+			}
3089
+			if ($this->element == 'supplier_proposal') {
3090
+			    $fieldttc='total';
3091
+			}
2840 3092
 
2841 3093
 			if (empty($nodatabaseupdate))
2842 3094
 			{
@@ -2865,13 +3117,11 @@  discard block
 block discarded – undo
2865 3117
 			if (! $error)
2866 3118
 			{
2867 3119
 				return 1;
2868
-			}
2869
-			else
3120
+			} else
2870 3121
 			{
2871 3122
 				return -1;
2872 3123
 			}
2873
-		}
2874
-		else
3124
+		} else
2875 3125
 		{
2876 3126
 			dol_print_error($this->db,'Bad request in update_price');
2877 3127
 			return -1;
@@ -2894,10 +3144,18 @@  discard block
 block discarded – undo
2894 3144
 		$origin_id = (! empty($origin_id) ? $origin_id : $this->origin_id);
2895 3145
 
2896 3146
 		// Special case
2897
-		if ($origin == 'order') $origin='commande';
2898
-		if ($origin == 'invoice') $origin='facture';
2899
-		if ($origin == 'invoice_template') $origin='facturerec';
2900
-    	if ($origin == 'supplierorder') $origin='order_supplier';
3147
+		if ($origin == 'order') {
3148
+		    $origin='commande';
3149
+		}
3150
+		if ($origin == 'invoice') {
3151
+		    $origin='facture';
3152
+		}
3153
+		if ($origin == 'invoice_template') {
3154
+		    $origin='facturerec';
3155
+		}
3156
+    	if ($origin == 'supplierorder') {
3157
+    	    $origin='order_supplier';
3158
+    	}
2901 3159
 		$this->db->begin();
2902 3160
 
2903 3161
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_element (";
@@ -2917,8 +3175,7 @@  discard block
 block discarded – undo
2917 3175
 	  	{
2918 3176
 	  		$this->db->commit();
2919 3177
 	  		return 1;
2920
-	  	}
2921
-	  	else
3178
+	  	} else
2922 3179
 	  	{
2923 3180
 	  		$this->error=$this->db->lasterror();
2924 3181
 	  		$this->db->rollback();
@@ -2963,12 +3220,16 @@  discard block
 block discarded – undo
2963 3220
 		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid))
2964 3221
 		{
2965 3222
 			$justsource=true;  // the source (id and type) is a search criteria
2966
-			if (! empty($targettype)) $withtargettype=true;
3223
+			if (! empty($targettype)) {
3224
+			    $withtargettype=true;
3225
+			}
2967 3226
 		}
2968 3227
 		if (! empty($targetid) && ! empty($targettype) && empty($sourceid))
2969 3228
 		{
2970 3229
 			$justtarget=true;  // the target (id and type) is a search criteria
2971
-			if (! empty($sourcetype)) $withsourcetype=true;
3230
+			if (! empty($sourcetype)) {
3231
+			    $withsourcetype=true;
3232
+			}
2972 3233
 		}
2973 3234
 
2974 3235
 		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
@@ -2991,15 +3252,17 @@  discard block
 block discarded – undo
2991 3252
 			if ($justsource)
2992 3253
 			{
2993 3254
 				$sql.= "fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."'";
2994
-				if ($withtargettype) $sql.= " AND targettype = '".$targettype."'";
2995
-			}
2996
-			else if ($justtarget)
3255
+				if ($withtargettype) {
3256
+				    $sql.= " AND targettype = '".$targettype."'";
3257
+				}
3258
+			} else if ($justtarget)
2997 3259
 			{
2998 3260
 				$sql.= "fk_target = ".$targetid." AND targettype = '".$targettype."'";
2999
-				if ($withsourcetype) $sql.= " AND sourcetype = '".$sourcetype."'";
3261
+				if ($withsourcetype) {
3262
+				    $sql.= " AND sourcetype = '".$sourcetype."'";
3263
+				}
3000 3264
 			}
3001
-		}
3002
-		else
3265
+		} else
3003 3266
 		{
3004 3267
 			$sql.= "(fk_source = ".$sourceid." AND sourcetype = '".$sourcetype."')";
3005 3268
 			$sql.= " ".$clause." (fk_target = ".$targetid." AND targettype = '".$targettype."')";
@@ -3020,13 +3283,11 @@  discard block
 block discarded – undo
3020 3283
 					if ($justsource)
3021 3284
 					{
3022 3285
 						$this->linkedObjectsIds[$obj->targettype][$obj->rowid]=$obj->fk_target;
3023
-					}
3024
-					else if ($justtarget)
3286
+					} else if ($justtarget)
3025 3287
 					{
3026 3288
 						$this->linkedObjectsIds[$obj->sourcetype][$obj->rowid]=$obj->fk_source;
3027 3289
 					}
3028
-				}
3029
-				else
3290
+				} else
3030 3291
 				{
3031 3292
 					if ($obj->fk_source == $sourceid && $obj->sourcetype == $sourcetype)
3032 3293
 					{
@@ -3043,10 +3304,12 @@  discard block
 block discarded – undo
3043 3304
 			if (! empty($this->linkedObjectsIds))
3044 3305
 			{
3045 3306
 				$tmparray = $this->linkedObjectsIds;
3046
-				foreach($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3307
+				foreach($tmparray as $objecttype => $objectids) {
3308
+				    // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
3047 3309
 				{
3048 3310
 					// Parse element/subelement (ex: project_task, cabinetmed_consultation, ...)
3049
-					$module = $element = $subelement = $objecttype;
3311
+					$module = $element = $subelement = $objecttype;
3312
+				}
3050 3313
 					if ($objecttype != 'supplier_proposal' && $objecttype != 'order_supplier' && $objecttype != 'invoice_supplier'
3051 3314
 						&& preg_match('/^([^_]+)_([^_]+)/i',$objecttype,$regs))
3052 3315
 					{
@@ -3058,29 +3321,21 @@  discard block
 block discarded – undo
3058 3321
 					// To work with non standard classpath or module name
3059 3322
 					if ($objecttype == 'facture')			{
3060 3323
 						$classpath = 'compta/facture/class';
3061
-					}
3062
-					else if ($objecttype == 'facturerec')			{
3324
+					} else if ($objecttype == 'facturerec')			{
3063 3325
 						$classpath = 'compta/facture/class'; $module = 'facture';
3064
-					}
3065
-					else if ($objecttype == 'propal')			{
3326
+					} else if ($objecttype == 'propal')			{
3066 3327
 						$classpath = 'comm/propal/class';
3067
-					}
3068
-					else if ($objecttype == 'supplier_proposal')			{
3328
+					} else if ($objecttype == 'supplier_proposal')			{
3069 3329
 						$classpath = 'supplier_proposal/class';
3070
-					}
3071
-					else if ($objecttype == 'shipping')			{
3330
+					} else if ($objecttype == 'shipping')			{
3072 3331
 						$classpath = 'expedition/class'; $subelement = 'expedition'; $module = 'expedition_bon';
3073
-					}
3074
-					else if ($objecttype == 'delivery')			{
3332
+					} else if ($objecttype == 'delivery')			{
3075 3333
 						$classpath = 'livraison/class'; $subelement = 'livraison'; $module = 'livraison_bon';
3076
-					}
3077
-					else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier')	{
3334
+					} else if ($objecttype == 'invoice_supplier' || $objecttype == 'order_supplier')	{
3078 3335
 						$classpath = 'fourn/class'; $module = 'fournisseur';
3079
-					}
3080
-					else if ($objecttype == 'fichinter')			{
3336
+					} else if ($objecttype == 'fichinter')			{
3081 3337
 						$classpath = 'fichinter/class'; $subelement = 'fichinter'; $module = 'ficheinter';
3082
-					}
3083
-					else if ($objecttype == 'subscription')			{
3338
+					} else if ($objecttype == 'subscription')			{
3084 3339
 						$classpath = 'adherents/class'; $module = 'adherent';
3085 3340
 					}
3086 3341
 
@@ -3089,20 +3344,15 @@  discard block
 block discarded – undo
3089 3344
 
3090 3345
 					if ($objecttype == 'order') {
3091 3346
 						$classfile = 'commande'; $classname = 'Commande';
3092
-					}
3093
-					else if ($objecttype == 'invoice_supplier') {
3347
+					} else if ($objecttype == 'invoice_supplier') {
3094 3348
 						$classfile = 'fournisseur.facture'; $classname = 'FactureFournisseur';
3095
-					}
3096
-					else if ($objecttype == 'order_supplier')   {
3349
+					} else if ($objecttype == 'order_supplier')   {
3097 3350
 						$classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur';
3098
-					}
3099
-					else if ($objecttype == 'supplier_proposal')   {
3351
+					} else if ($objecttype == 'supplier_proposal')   {
3100 3352
 						$classfile = 'supplier_proposal'; $classname = 'SupplierProposal';
3101
-					}
3102
-					else if ($objecttype == 'facturerec')   {
3353
+					} else if ($objecttype == 'facturerec')   {
3103 3354
 						$classfile = 'facture-rec'; $classname = 'FactureRec';
3104
-					}
3105
-					else if ($objecttype == 'subscription')   {
3355
+					} else if ($objecttype == 'subscription')   {
3106 3356
 						$classfile = 'subscription'; $classname = 'Subscription';
3107 3357
 					}
3108 3358
 
@@ -3114,9 +3364,11 @@  discard block
 block discarded – undo
3114 3364
 							//print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
3115 3365
 							if (class_exists($classname))
3116 3366
 							{
3117
-								foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
3367
+								foreach($objectids as $i => $objectid) {
3368
+								    // $i is rowid into llx_element_element
3118 3369
 								{
3119
-									$object = new $classname($this->db);
3370
+									$object = new $classname($this->db);
3371
+								}
3120 3372
 									$ret = $object->fetch($objectid);
3121 3373
 									if ($ret >= 0)
3122 3374
 									{
@@ -3125,16 +3377,14 @@  discard block
 block discarded – undo
3125 3377
 								}
3126 3378
 							}
3127 3379
 						}
3128
-					}
3129
-					else
3380
+					} else
3130 3381
 					{
3131 3382
 						unset($this->linkedObjectsIds[$objecttype]);
3132 3383
 					}
3133 3384
 				}
3134 3385
 			}
3135 3386
 			return 1;
3136
-		}
3137
-		else
3387
+		} else
3138 3388
 		{
3139 3389
 			dol_print_error($this->db);
3140 3390
 			return -1;
@@ -3156,8 +3406,11 @@  discard block
 block discarded – undo
3156 3406
 		$updatesource=false;
3157 3407
 		$updatetarget=false;
3158 3408
 
3159
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $updatesource=true;
3160
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $updatetarget=true;
3409
+		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) {
3410
+		    $updatesource=true;
3411
+		} else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) {
3412
+		    $updatetarget=true;
3413
+		}
3161 3414
 
3162 3415
 		$sql = "UPDATE ".MAIN_DB_PREFIX."element_element SET ";
3163 3416
 		if ($updatesource)
@@ -3166,8 +3419,7 @@  discard block
 block discarded – undo
3166 3419
 			$sql.= ", sourcetype = '".$this->db->escape($sourcetype)."'";
3167 3420
 			$sql.= " WHERE fk_target = ".$this->id;
3168 3421
 			$sql.= " AND targettype = '".$this->db->escape($this->element)."'";
3169
-		}
3170
-		else if ($updatetarget)
3422
+		} else if ($updatetarget)
3171 3423
 		{
3172 3424
 			$sql.= "fk_target = ".$targetid;
3173 3425
 			$sql.= ", targettype = '".$this->db->escape($targettype)."'";
@@ -3179,8 +3431,7 @@  discard block
 block discarded – undo
3179 3431
 		if ($this->db->query($sql))
3180 3432
 		{
3181 3433
 			return 1;
3182
-		}
3183
-		else
3434
+		} else
3184 3435
 		{
3185 3436
 			$this->error=$this->db->lasterror();
3186 3437
 			return -1;
@@ -3203,8 +3454,11 @@  discard block
 block discarded – undo
3203 3454
 		$deletesource=false;
3204 3455
 		$deletetarget=false;
3205 3456
 
3206
-		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) $deletesource=true;
3207
-		else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) $deletetarget=true;
3457
+		if (! empty($sourceid) && ! empty($sourcetype) && empty($targetid) && empty($targettype)) {
3458
+		    $deletesource=true;
3459
+		} else if (empty($sourceid) && empty($sourcetype) && ! empty($targetid) && ! empty($targettype)) {
3460
+		    $deletetarget=true;
3461
+		}
3208 3462
 
3209 3463
 		$sourceid = (! empty($sourceid) ? $sourceid : $this->id);
3210 3464
 		$sourcetype = (! empty($sourcetype) ? $sourcetype : $this->element);
@@ -3216,20 +3470,17 @@  discard block
 block discarded – undo
3216 3470
 		if ($rowid > 0)
3217 3471
 		{
3218 3472
 			$sql.=" rowid = ".$rowid;
3219
-		}
3220
-		else
3473
+		} else
3221 3474
 		{
3222 3475
 			if ($deletesource)
3223 3476
 			{
3224 3477
 				$sql.= " fk_source = ".$sourceid." AND sourcetype = '".$this->db->escape($sourcetype)."'";
3225 3478
 				$sql.= " AND fk_target = ".$this->id." AND targettype = '".$this->db->escape($this->element)."'";
3226
-			}
3227
-			else if ($deletetarget)
3479
+			} else if ($deletetarget)
3228 3480
 			{
3229 3481
 				$sql.= " fk_target = ".$targetid." AND targettype = '".$this->db->escape($targettype)."'";
3230 3482
 				$sql.= " AND fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."'";
3231
-			}
3232
-			else
3483
+			} else
3233 3484
 			{
3234 3485
 				$sql.= " (fk_source = ".$this->id." AND sourcetype = '".$this->db->escape($this->element)."')";
3235 3486
 				$sql.= " OR";
@@ -3241,8 +3492,7 @@  discard block
 block discarded – undo
3241 3492
 		if ($this->db->query($sql))
3242 3493
 		{
3243 3494
 			return 1;
3244
-		}
3245
-		else
3495
+		} else
3246 3496
 		{
3247 3497
 			$this->error=$this->db->lasterror();
3248 3498
 			$this->errors[]=$this->error;
@@ -3271,17 +3521,31 @@  discard block
 block discarded – undo
3271 3521
 		$this->db->begin();
3272 3522
 
3273 3523
 		$fieldstatus="fk_statut";
3274
-		if ($elementTable == 'facture_rec') $fieldstatus="suspended";
3275
-		if ($elementTable == 'mailing') $fieldstatus="statut";
3276
-		if ($elementTable == 'cronjob') $fieldstatus="status";
3277
-		if ($elementTable == 'user') $fieldstatus="statut";
3278
-		if ($elementTable == 'expensereport') $fieldstatus="fk_statut";
3279
-		if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status";
3524
+		if ($elementTable == 'facture_rec') {
3525
+		    $fieldstatus="suspended";
3526
+		}
3527
+		if ($elementTable == 'mailing') {
3528
+		    $fieldstatus="statut";
3529
+		}
3530
+		if ($elementTable == 'cronjob') {
3531
+		    $fieldstatus="status";
3532
+		}
3533
+		if ($elementTable == 'user') {
3534
+		    $fieldstatus="statut";
3535
+		}
3536
+		if ($elementTable == 'expensereport') {
3537
+		    $fieldstatus="fk_statut";
3538
+		}
3539
+		if ($elementTable == 'commande_fournisseur_dispatch') {
3540
+		    $fieldstatus="status";
3541
+		}
3280 3542
 
3281 3543
 		$sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable;
3282 3544
 		$sql.= " SET ".$fieldstatus." = ".$status;
3283 3545
 		// If status = 1 = validated, update also fk_user_valid
3284
-		if ($status == 1 && $elementTable == 'expensereport') $sql.=", fk_user_valid = ".$user->id;
3546
+		if ($status == 1 && $elementTable == 'expensereport') {
3547
+		    $sql.=", fk_user_valid = ".$user->id;
3548
+		}
3285 3549
 		$sql.= " WHERE rowid=".$elementId;
3286 3550
 
3287 3551
 		dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
@@ -3292,12 +3556,27 @@  discard block
 block discarded – undo
3292 3556
 			// Try autoset of trigkey
3293 3557
 			if (empty($trigkey))
3294 3558
 			{
3295
-				if ($this->element == 'supplier_proposal' && $status == 2) $trigkey='SUPPLIER_PROPOSAL_SIGN';   // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3296
-				if ($this->element == 'supplier_proposal' && $status == 3) $trigkey='SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3297
-				if ($this->element == 'supplier_proposal' && $status == 4) $trigkey='SUPPLIER_PROPOSAL_CLOSE';  // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3298
-				if ($this->element == 'fichinter' && $status == 3) $trigkey='FICHINTER_CLASSIFY_DONE';
3299
-				if ($this->element == 'fichinter' && $status == 2) $trigkey='FICHINTER_CLASSIFY_BILLED';
3300
-				if ($this->element == 'fichinter' && $status == 1) $trigkey='FICHINTER_CLASSIFY_UNBILLED';
3559
+				if ($this->element == 'supplier_proposal' && $status == 2) {
3560
+				    $trigkey='SUPPLIER_PROPOSAL_SIGN';
3561
+				}
3562
+				// 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
3563
+				if ($this->element == 'supplier_proposal' && $status == 3) {
3564
+				    $trigkey='SUPPLIER_PROPOSAL_REFUSE';
3565
+				}
3566
+				// 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
3567
+				if ($this->element == 'supplier_proposal' && $status == 4) {
3568
+				    $trigkey='SUPPLIER_PROPOSAL_CLOSE';
3569
+				}
3570
+				// 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
3571
+				if ($this->element == 'fichinter' && $status == 3) {
3572
+				    $trigkey='FICHINTER_CLASSIFY_DONE';
3573
+				}
3574
+				if ($this->element == 'fichinter' && $status == 2) {
3575
+				    $trigkey='FICHINTER_CLASSIFY_BILLED';
3576
+				}
3577
+				if ($this->element == 'fichinter' && $status == 1) {
3578
+				    $trigkey='FICHINTER_CLASSIFY_UNBILLED';
3579
+				}
3301 3580
 			}
3302 3581
 
3303 3582
 			if ($trigkey)
@@ -3316,22 +3595,22 @@  discard block
 block discarded – undo
3316 3595
 			{
3317 3596
 				$this->db->commit();
3318 3597
 
3319
-				if (empty($savElementId))    // If the element we update was $this (so $elementId is null)
3598
+				if (empty($savElementId)) {
3599
+				    // If the element we update was $this (so $elementId is null)
3320 3600
 				{
3321
-					$this->statut = $status;
3601
+					$this->statut = $status;
3602
+				}
3322 3603
 					$this->status = $status;
3323 3604
 				}
3324 3605
 
3325 3606
 				return 1;
3326
-			}
3327
-			else
3607
+			} else
3328 3608
 			{
3329 3609
 				$this->db->rollback();
3330 3610
 				dol_syslog(get_class($this)."::setStatus ".$this->error,LOG_ERR);
3331 3611
 				return -1;
3332 3612
 			}
3333
-		}
3334
-		else
3613
+		} else
3335 3614
 		{
3336 3615
 			$this->error=$this->db->lasterror();
3337 3616
 			$this->db->rollback();
@@ -3351,9 +3630,13 @@  discard block
 block discarded – undo
3351 3630
 	{
3352 3631
 		global $conf;
3353 3632
 
3354
-		if (empty($id) && empty($ref)) return 0;
3355
-		if (!empty(Globals::$conf->global->MAIN_DISABLE_CANVAS))
3356
-            return 0;    // To increase speed. Not enabled by default.
3633
+		if (empty($id) && empty($ref)) {
3634
+		    return 0;
3635
+		}
3636
+		if (!empty(Globals::$conf->global->MAIN_DISABLE_CANVAS)) {
3637
+		            return 0;
3638
+		}
3639
+		// To increase speed. Not enabled by default.
3357 3640
 
3358 3641
             // Clean parameters
3359 3642
 		$ref = trim($ref);
@@ -3361,8 +3644,12 @@  discard block
 block discarded – undo
3361 3644
 		$sql = "SELECT rowid, canvas";
3362 3645
 		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
3363 3646
 		$sql.= " WHERE entity IN (".getEntity($this->element).")";
3364
-		if (! empty($id))  $sql.= " AND rowid = ".$id;
3365
-		if (! empty($ref)) $sql.= " AND ref = '".$this->db->escape($ref)."'";
3647
+		if (! empty($id)) {
3648
+		    $sql.= " AND rowid = ".$id;
3649
+		}
3650
+		if (! empty($ref)) {
3651
+		    $sql.= " AND ref = '".$this->db->escape($ref)."'";
3652
+		}
3366 3653
 
3367 3654
 		$resql = $this->db->query($sql);
3368 3655
 		if ($resql)
@@ -3372,10 +3659,10 @@  discard block
 block discarded – undo
3372 3659
 			{
3373 3660
 				$this->canvas   = $obj->canvas;
3374 3661
 				return 1;
3375
-			}
3376
-			else return 0;
3377
-		}
3378
-		else
3662
+			} else {
3663
+			    return 0;
3664
+			}
3665
+		} else
3379 3666
 		{
3380 3667
 			dol_print_error($this->db);
3381 3668
 			return -1;
@@ -3412,7 +3699,9 @@  discard block
 block discarded – undo
3412 3699
 	{
3413 3700
 		global $langs;
3414 3701
 
3415
-		if (empty($id)) $id=$this->id;
3702
+		if (empty($id)) {
3703
+		    $id=$this->id;
3704
+		}
3416 3705
 
3417 3706
 		// Check parameters
3418 3707
 		if (! isset($this->childtables) || ! is_array($this->childtables) || count($this->childtables) == 0)
@@ -3446,18 +3735,18 @@  discard block
 block discarded – undo
3446 3735
 					$langs->load("errors");
3447 3736
 					//print 'Found into table '.$table.', type '.$langs->transnoentitiesnoconv($elementname).', haschild='.$haschild;
3448 3737
 					$haschild += $obj->nb;
3449
-					if (is_numeric($elementname))	// old usage
3738
+					if (is_numeric($elementname)) {
3739
+					    // old usage
3450 3740
 					{
3451
-						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3452
-					}
3453
-					else	// new usage: $elementname=Translation key
3741
+						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $table);
3742
+					}
3743
+					} else	// new usage: $elementname=Translation key
3454 3744
 					{
3455 3745
 						$this->errors[]=$langs->trans("ErrorRecordHasAtLeastOneChildOfType", $langs->transnoentitiesnoconv($elementname));
3456 3746
 					}
3457 3747
 					break;    // We found at least one, we stop here
3458 3748
 				}
3459
-			}
3460
-			else
3749
+			} else
3461 3750
 			{
3462 3751
 				$this->errors[]=$this->db->lasterror();
3463 3752
 				return -1;
@@ -3467,8 +3756,9 @@  discard block
 block discarded – undo
3467 3756
 		{
3468 3757
 			$this->errors[]="ErrorRecordHasChildren";
3469 3758
 			return $haschild;
3470
-		}
3471
-		else return 0;
3759
+		} else {
3760
+		    return 0;
3761
+		}
3472 3762
 	}
3473 3763
 
3474 3764
 	/**
@@ -3484,12 +3774,24 @@  discard block
 block discarded – undo
3484 3774
 		foreach($this->lines as $key => $val)
3485 3775
 		{
3486 3776
 			$qualified=0;
3487
-			if ($predefined == -1) $qualified=1;
3488
-			if ($predefined == 1 && $val->fk_product > 0) $qualified=1;
3489
-			if ($predefined == 0 && $val->fk_product <= 0) $qualified=1;
3490
-			if ($predefined == 2 && $val->fk_product > 0 && $val->product_type==0) $qualified=1;
3491
-			if ($predefined == 3 && $val->fk_product > 0 && $val->product_type==1) $qualified=1;
3492
-			if ($qualified) $nb++;
3777
+			if ($predefined == -1) {
3778
+			    $qualified=1;
3779
+			}
3780
+			if ($predefined == 1 && $val->fk_product > 0) {
3781
+			    $qualified=1;
3782
+			}
3783
+			if ($predefined == 0 && $val->fk_product <= 0) {
3784
+			    $qualified=1;
3785
+			}
3786
+			if ($predefined == 2 && $val->fk_product > 0 && $val->product_type==0) {
3787
+			    $qualified=1;
3788
+			}
3789
+			if ($predefined == 3 && $val->fk_product > 0 && $val->product_type==1) {
3790
+			    $qualified=1;
3791
+			}
3792
+			if ($qualified) {
3793
+			    $nb++;
3794
+			}
3493 3795
 		}
3494 3796
 		dol_syslog(get_class($this).'::hasProductsOrServices we found '.$nb.' qualified lines of products/servcies');
3495 3797
 		return $nb;
@@ -3553,16 +3855,24 @@  discard block
 block discarded – undo
3553 3855
 		{
3554 3856
 			if (isset($line->qty_asked))
3555 3857
 			{
3556
-				if (empty($totalOrdered)) $totalOrdered=0;  // Avoid warning because $totalOrdered is ''
3858
+				if (empty($totalOrdered)) {
3859
+				    $totalOrdered=0;
3860
+				}
3861
+				// Avoid warning because $totalOrdered is ''
3557 3862
 				$totalOrdered+=$line->qty_asked;    // defined for shipment only
3558 3863
 			}
3559 3864
 			if (isset($line->qty_shipped))
3560 3865
 			{
3561
-				if (empty($totalToShip)) $totalToShip=0;    // Avoid warning because $totalToShip is ''
3866
+				if (empty($totalToShip)) {
3867
+				    $totalToShip=0;
3868
+				}
3869
+				// Avoid warning because $totalToShip is ''
3562 3870
 				$totalToShip+=$line->qty_shipped;   // defined for shipment only
3563
-            }else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
3871
+            } else if ($line->element == 'commandefournisseurdispatch' && isset($line->qty))
3564 3872
             {
3565
-                if (empty($totalToShip)) $totalToShip=0;
3873
+                if (empty($totalToShip)) {
3874
+                    $totalToShip=0;
3875
+                }
3566 3876
                 $totalToShip+=$line->qty;   // defined for reception only
3567 3877
 			}
3568 3878
 
@@ -3570,8 +3880,7 @@  discard block
 block discarded – undo
3570 3880
 			if ($this->element == 'shipping') {
3571 3881
 				// for shipments
3572 3882
 				$qty = $line->qty_shipped ? $line->qty_shipped : 0;
3573
-			}
3574
-			else {
3883
+			} else {
3575 3884
 				$qty = $line->qty ? $line->qty : 0;
3576 3885
 			}
3577 3886
 
@@ -3587,19 +3896,30 @@  discard block
 block discarded – undo
3587 3896
 
3588 3897
 			$weightUnit=0;
3589 3898
 			$volumeUnit=0;
3590
-			if (! empty($weight_units)) $weightUnit = $weight_units;
3591
-			if (! empty($volume_units)) $volumeUnit = $volume_units;
3592
-
3593
-			if (empty($totalWeight)) $totalWeight=0;  // Avoid warning because $totalWeight is ''
3594
-			if (empty($totalVolume)) $totalVolume=0;  // Avoid warning because $totalVolume is ''
3899
+			if (! empty($weight_units)) {
3900
+			    $weightUnit = $weight_units;
3901
+			}
3902
+			if (! empty($volume_units)) {
3903
+			    $volumeUnit = $volume_units;
3904
+			}
3905
+
3906
+			if (empty($totalWeight)) {
3907
+			    $totalWeight=0;
3908
+			}
3909
+			// Avoid warning because $totalWeight is ''
3910
+			if (empty($totalVolume)) {
3911
+			    $totalVolume=0;
3912
+			}
3913
+			// Avoid warning because $totalVolume is ''
3595 3914
 
3596 3915
 			//var_dump($line->volume_units);
3597
-			if ($weight_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3916
+			if ($weight_units < 50) {
3917
+			    // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3598 3918
 			{
3599
-				$trueWeightUnit=pow(10, $weightUnit);
3919
+				$trueWeightUnit=pow(10, $weightUnit);
3920
+			}
3600 3921
 				$totalWeight += $weight * $qty * $trueWeightUnit;
3601
-			}
3602
-			else {
3922
+			} else {
3603 3923
 		if ($weight_units == 99) {
3604 3924
 			// conversion 1 Pound = 0.45359237 KG
3605 3925
 			$trueWeightUnit = 0.45359237;
@@ -3608,18 +3928,20 @@  discard block
 block discarded – undo
3608 3928
 			// conversion 1 Ounce = 0.0283495 KG
3609 3929
 			$trueWeightUnit = 0.0283495;
3610 3930
 			$totalWeight += $weight * $qty * $trueWeightUnit;
3611
-		}
3612
-		else
3613
-					$totalWeight += $weight * $qty;   // This may be wrong if we mix different units
3931
+		} else {
3932
+							$totalWeight += $weight * $qty;
3933
+		}
3934
+		// This may be wrong if we mix different units
3614 3935
 			}
3615
-			if ($volume_units < 50)   // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3936
+			if ($volume_units < 50) {
3937
+			    // >50 means a standard unit (power of 10 of official unit), > 50 means an exotic unit (like inch)
3616 3938
 			{
3617 3939
 				//print $line->volume."x".$line->volume_units."x".($line->volume_units < 50)."x".$volumeUnit;
3618
-				$trueVolumeUnit=pow(10, $volumeUnit);
3940
+				$trueVolumeUnit=pow(10, $volumeUnit);
3941
+			}
3619 3942
 				//print $line->volume;
3620 3943
 				$totalVolume += $volume * $qty * $trueVolumeUnit;
3621
-			}
3622
-			else
3944
+			} else
3623 3945
 			{
3624 3946
 				$totalVolume += $volume * $qty;   // This may be wrong if we mix different units
3625 3947
 			}
@@ -3651,8 +3973,7 @@  discard block
 block discarded – undo
3651 3973
 			$this->error=$this->db->lasterror();
3652 3974
 			$this->db->rollback();
3653 3975
 			return -1;
3654
-		}
3655
-		else
3976
+		} else
3656 3977
 		{
3657 3978
 			$this->db->commit();
3658 3979
 			return 1;
@@ -3704,13 +4025,11 @@  discard block
 block discarded – undo
3704 4025
 			{
3705 4026
 				$res = $this->db->fetch_object($resql);
3706 4027
 				return 'Incoterm : '.$res->code.' - '.$this->location_incoterms;
3707
-			}
3708
-			else
4028
+			} else
3709 4029
 			{
3710 4030
 				return '';
3711 4031
 			}
3712
-		}
3713
-		else
4032
+		} else
3714 4033
 		{
3715 4034
 			$this->errors[] = $this->db->lasterror();
3716 4035
 			return false;
@@ -3747,14 +4066,14 @@  discard block
 block discarded – undo
3747 4066
 					$this->libelle_incoterms = $obj->libelle;
3748 4067
 				}
3749 4068
 				return 1;
3750
-			}
3751
-			else
4069
+			} else
3752 4070
 			{
3753 4071
 				$this->errors[] = $this->db->lasterror();
3754 4072
 				return -1;
3755 4073
 			}
3756
-		}
3757
-		else return -1;
4074
+		} else {
4075
+		    return -1;
4076
+		}
3758 4077
 	}
3759 4078
 
3760 4079
 
@@ -3793,7 +4112,9 @@  discard block
 block discarded – undo
3793 4112
 			} else {
3794 4113
 				$res=include $tpl; // for debug
3795 4114
 			}
3796
-			if ($res) break;
4115
+			if ($res) {
4116
+			    break;
4117
+			}
3797 4118
 		}
3798 4119
 	}
3799 4120
 
@@ -3823,8 +4144,9 @@  discard block
 block discarded – undo
3823 4144
 
3824 4145
 		// Define usemargins
3825 4146
 		$usemargins=0;
3826
-		if (!empty(Globals::$conf->margin->enabled) && !empty($this->element) && in_array($this->element, array('facture', 'propal', 'commande')))
3827
-            $usemargins = 1;
4147
+		if (!empty(Globals::$conf->margin->enabled) && !empty($this->element) && in_array($this->element, array('facture', 'propal', 'commande'))) {
4148
+		            $usemargins = 1;
4149
+		}
3828 4150
 
3829 4151
         $num = count($this->lines);
3830 4152
 
@@ -3843,8 +4165,9 @@  discard block
 block discarded – undo
3843 4165
 			print '<tr class="liste_titre nodrag nodrop">';
3844 4166
 
3845 4167
 			// Adds a line numbering column
3846
-			if (!empty(Globals::$conf->global->MAIN_VIEW_LINE_NUMBER))
3847
-                print '<td class="linecolnum" align="center" width="5">&nbsp;</td>';
4168
+			if (!empty(Globals::$conf->global->MAIN_VIEW_LINE_NUMBER)) {
4169
+			                print '<td class="linecolnum" align="center" width="5">&nbsp;</td>';
4170
+			}
3848 4171
 
3849 4172
             // Description
3850 4173
 			print '<td class="linecoldescription">'.$langs->trans('Description').'</td>';
@@ -3861,10 +4184,13 @@  discard block
 block discarded – undo
3861 4184
 			print '<td class="linecoluht" align="right" width="80">'.$langs->trans('PriceUHT').'</td>';
3862 4185
 
3863 4186
 			// Multicurrency
3864
-			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3865
-                print '<td class="linecoluht_currency" align="right" width="80">' . $langs->trans('PriceUHTCurrency', $this->multicurrency_code) . '</td>';
4187
+			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency) {
4188
+			                print '<td class="linecoluht_currency" align="right" width="80">' . $langs->trans('PriceUHTCurrency', $this->multicurrency_code) . '</td>';
4189
+			}
3866 4190
 
3867
-            if ($inputalsopricewithtax) print '<td align="right" width="80">'.$langs->trans('PriceUTTC').'</td>';
4191
+            if ($inputalsopricewithtax) {
4192
+                print '<td align="right" width="80">'.$langs->trans('PriceUTTC').'</td>';
4193
+            }
3868 4194
 
3869 4195
 			// Qty
3870 4196
 			print '<td class="linecolqty" align="right">'.$langs->trans('Qty').'</td>';
@@ -3883,26 +4209,32 @@  discard block
 block discarded – undo
3883 4209
 			if ($usemargins && !empty(Globals::$conf->margin->enabled) && empty($user->societe_id)) {
3884 4210
 				if (!empty($user->rights->margins->creer))
3885 4211
 				{
3886
-					if (Globals::$conf->global->MARGIN_TYPE == "1")
3887
-                        print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('BuyingPrice').'</td>';
3888
-					else
3889
-						print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('CostPrice').'</td>';
4212
+					if (Globals::$conf->global->MARGIN_TYPE == "1") {
4213
+					                        print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('BuyingPrice').'</td>';
4214
+					} else {
4215
+											print '<td class="linecolmargin1 margininfos" align="right" width="80">'.$langs->trans('CostPrice').'</td>';
4216
+					}
3890 4217
 				}
3891 4218
 
3892
-				if (!empty(Globals::$conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous)
3893
-                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarginRate').'</td>';
3894
-				if (!empty(Globals::$conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous)
3895
-                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarkRate').'</td>';
4219
+				if (!empty(Globals::$conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) {
4220
+				                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarginRate').'</td>';
4221
+				}
4222
+				if (!empty(Globals::$conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) {
4223
+				                    print '<td class="linecolmargin2 margininfos" align="right" width="50">'.$langs->trans('MarkRate').'</td>';
4224
+				}
3896 4225
 			}
3897 4226
 
3898 4227
 			// Total HT
3899 4228
 			print '<td class="linecolht" align="right">'.$langs->trans('TotalHTShort').'</td>';
3900 4229
 
3901 4230
 			// Multicurrency
3902
-			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency)
3903
-                print '<td class="linecoltotalht_currency" align="right">' . $langs->trans('TotalHTShortCurrency', $this->multicurrency_code) . '</td>';
4231
+			if (!empty(Globals::$conf->multicurrency->enabled) && $this->multicurrency_code != Globals::$conf->currency) {
4232
+			                print '<td class="linecoltotalht_currency" align="right">' . $langs->trans('TotalHTShortCurrency', $this->multicurrency_code) . '</td>';
4233
+			}
3904 4234
 
3905
-            if ($outputalsopricetotalwithtax) print '<td align="right" width="80">'.$langs->trans('TotalTTCShort').'</td>';
4235
+            if ($outputalsopricetotalwithtax) {
4236
+                print '<td align="right" width="80">'.$langs->trans('TotalTTCShort').'</td>';
4237
+            }
3906 4238
 
3907 4239
 			print '<td class="linecoledit"></td>';  // No width to allow autodim
3908 4240
 
@@ -3932,14 +4264,15 @@  discard block
 block discarded – undo
3932 4264
 			$line->fetch_optionals();
3933 4265
 
3934 4266
 			//if (is_object($hookmanager) && (($line->product_type == 9 && ! empty($line->special_code)) || ! empty($line->fk_parent_line)))
3935
-			if (is_object($hookmanager))   // Old code is commented on preceding line.
4267
+			if (is_object($hookmanager)) {
4268
+			    // Old code is commented on preceding line.
3936 4269
 			{
3937 4270
 				if (empty($line->fk_parent_line))
3938 4271
 				{
3939
-					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
4272
+					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline);
4273
+			}
3940 4274
 					$reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
3941
-				}
3942
-				else
4275
+				} else
3943 4276
 				{
3944 4277
 					$parameters = array('line'=>$line,'var'=>$var,'num'=>$num,'i'=>$i,'dateSelector'=>$dateSelector,'seller'=>$seller,'buyer'=>$buyer,'selected'=>$selected, 'extrafieldsline'=>$extrafieldsline, 'fk_parent_line'=>$line->fk_parent_line);
3945 4278
 					$reshook = $hookmanager->executeHooks('printObjectSubLine', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
@@ -3986,8 +4319,14 @@  discard block
 block discarded – undo
3986 4319
 		// Show product and description
3987 4320
 		$type=(! empty($line->product_type)?$line->product_type:$line->fk_product_type);
3988 4321
 		// Try to enhance type detection using date_start and date_end for free lines where type was not saved.
3989
-		if (! empty($line->date_start)) $type=1; // deprecated
3990
-		if (! empty($line->date_end)) $type=1; // deprecated
4322
+		if (! empty($line->date_start)) {
4323
+		    $type=1;
4324
+		}
4325
+		// deprecated
4326
+		if (! empty($line->date_end)) {
4327
+		    $type=1;
4328
+		}
4329
+		// deprecated
3991 4330
 
3992 4331
 		// Ligne en mode visu
3993 4332
 		if ($action != 'editline' || $selected != $line->id)
@@ -4015,9 +4354,13 @@  discard block
 block discarded – undo
4015 4354
 
4016 4355
 					$outputlangs = $langs;
4017 4356
 					$newlang='';
4018
-					if (empty($newlang) && GETPOST('lang_id','aZ09')) $newlang=GETPOST('lang_id','aZ09');
4019
-					if (!empty(Globals::$conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang))
4020
-                        $newlang = $this->thirdparty->default_lang;  // For language to language of customer
4357
+					if (empty($newlang) && GETPOST('lang_id','aZ09')) {
4358
+					    $newlang=GETPOST('lang_id','aZ09');
4359
+					}
4360
+					if (!empty(Globals::$conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang)) {
4361
+					                        $newlang = $this->thirdparty->default_lang;
4362
+					}
4363
+					// For language to language of customer
4021 4364
                     if (! empty($newlang))
4022 4365
 					{
4023 4366
 						$outputlangs = new Translate("",$conf);
@@ -4025,8 +4368,7 @@  discard block
 block discarded – undo
4025 4368
 					}
4026 4369
 
4027 4370
 					$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $line->product_label;
4028
-				}
4029
-				else
4371
+				} else
4030 4372
 				{
4031 4373
 					$label = $line->product_label;
4032 4374
 				}
@@ -4048,7 +4390,9 @@  discard block
 block discarded – undo
4048 4390
 				} else {
4049 4391
 					$res=include $tpl; // for debug
4050 4392
 				}
4051
-				if ($res) break;
4393
+				if ($res) {
4394
+				    break;
4395
+				}
4052 4396
 			}
4053 4397
 		}
4054 4398
 
@@ -4071,7 +4415,9 @@  discard block
 block discarded – undo
4071 4415
 				} else {
4072 4416
 					$res=include $tpl; // for debug
4073 4417
 				}
4074
-				if ($res) break;
4418
+				if ($res) {
4419
+				    break;
4420
+				}
4075 4421
 			}
4076 4422
 		}
4077 4423
 	}
@@ -4098,8 +4444,9 @@  discard block
 block discarded – undo
4098 4444
 		print '<td>'.$langs->trans('Description').'</td>';
4099 4445
 		print '<td align="right">'.$langs->trans('VATRate').'</td>';
4100 4446
 		print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
4101
-		if (!empty(Globals::$conf->multicurrency->enabled))
4102
-            print '<td align="right">' . $langs->trans('PriceUHTCurrency') . '</td>';
4447
+		if (!empty(Globals::$conf->multicurrency->enabled)) {
4448
+		            print '<td align="right">' . $langs->trans('PriceUHTCurrency') . '</td>';
4449
+		}
4103 4450
         print '<td align="right">'.$langs->trans('Qty').'</td>';
4104 4451
 		if (Globals::$conf->global->PRODUCT_USE_UNITS) {
4105 4452
 			print '<td align="left">'.$langs->trans('Unit').'</td>';
@@ -4121,8 +4468,7 @@  discard block
 block discarded – undo
4121 4468
 						$action='';
4122 4469
 						$hookmanager->executeHooks('printOriginObjectLine',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
4123 4470
 					}
4124
-				}
4125
-				else
4471
+				} else
4126 4472
 				{
4127 4473
 					$this->printOriginLine($line, $var, $restrictlist);
4128 4474
 				}
@@ -4151,32 +4497,37 @@  discard block
 block discarded – undo
4151 4497
 		if (!empty($line->date_start))
4152 4498
 		{
4153 4499
 			$date_start=$line->date_start;
4154
-		}
4155
-		else
4500
+		} else
4156 4501
 		{
4157 4502
 			$date_start=$line->date_debut_prevue;
4158
-			if ($line->date_debut_reel) $date_start=$line->date_debut_reel;
4503
+			if ($line->date_debut_reel) {
4504
+			    $date_start=$line->date_debut_reel;
4505
+			}
4159 4506
 		}
4160 4507
 		if (!empty($line->date_end))
4161 4508
 		{
4162 4509
 			$date_end=$line->date_end;
4163
-		}
4164
-		else
4510
+		} else
4165 4511
 		{
4166 4512
 			$date_end=$line->date_fin_prevue;
4167
-			if ($line->date_fin_reel) $date_end=$line->date_fin_reel;
4513
+			if ($line->date_fin_reel) {
4514
+			    $date_end=$line->date_fin_reel;
4515
+			}
4168 4516
 		}
4169 4517
 
4170 4518
 		$this->tpl['label'] = '';
4171
-		if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow');
4519
+		if (! empty($line->fk_parent_line)) {
4520
+		    $this->tpl['label'].= img_picto('', 'rightarrow');
4521
+		}
4172 4522
 
4173
-		if (($line->info_bits & 2) == 2)  // TODO Not sure this is used for source object
4523
+		if (($line->info_bits & 2) == 2) {
4524
+		    // TODO Not sure this is used for source object
4174 4525
 		{
4175
-			$discount=new DiscountAbsolute($this->db);
4526
+			$discount=new DiscountAbsolute($this->db);
4527
+		}
4176 4528
 			$discount->fk_soc = $this->socid;
4177 4529
 			$this->tpl['label'].= $discount->getNomUrl(0,'discount');
4178
-		}
4179
-		else if (! empty($line->fk_product))
4530
+		} else if (! empty($line->fk_product))
4180 4531
 		{
4181 4532
 			$productstatic = new Product($this->db);
4182 4533
 			$productstatic->id = $line->fk_product;
@@ -4194,13 +4545,12 @@  discard block
 block discarded – undo
4194 4545
 			{
4195 4546
 				$this->tpl['label'].= get_date_range($date_start,$date_end);
4196 4547
 			}
4197
-		}
4198
-		else
4548
+		} else
4199 4549
 		{
4200 4550
 			$this->tpl['label'].= ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
4201 4551
 			if (!empty($line->desc)) {
4202 4552
 				$this->tpl['label'].=$line->desc;
4203
-			}else {
4553
+			} else {
4204 4554
 				$this->tpl['label'].= ($line->label ? '&nbsp;'.$line->label : '');
4205 4555
 			}
4206 4556
 			
@@ -4213,36 +4563,35 @@  discard block
 block discarded – undo
4213 4563
 
4214 4564
 		if (! empty($line->desc))
4215 4565
 		{
4216
-			if ($line->desc == '(CREDIT_NOTE)')  // TODO Not sure this is used for source object
4566
+			if ($line->desc == '(CREDIT_NOTE)') {
4567
+			    // TODO Not sure this is used for source object
4217 4568
 			{
4218
-				$discount=new DiscountAbsolute($this->db);
4569
+				$discount=new DiscountAbsolute($this->db);
4570
+			}
4219 4571
 				$discount->fetch($line->fk_remise_except);
4220 4572
 				$this->tpl['description'] = $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
4221
-			}
4222
-			elseif ($line->desc == '(DEPOSIT)')  // TODO Not sure this is used for source object
4573
+			} elseif ($line->desc == '(DEPOSIT)') {
4574
+			    // TODO Not sure this is used for source object
4223 4575
 			{
4224
-				$discount=new DiscountAbsolute($this->db);
4576
+				$discount=new DiscountAbsolute($this->db);
4577
+			}
4225 4578
 				$discount->fetch($line->fk_remise_except);
4226 4579
 				$this->tpl['description'] = $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
4227
-			}
4228
-			elseif ($line->desc == '(EXCESS RECEIVED)')
4580
+			} elseif ($line->desc == '(EXCESS RECEIVED)')
4229 4581
 			{
4230 4582
 				$discount=new DiscountAbsolute($this->db);
4231 4583
 				$discount->fetch($line->fk_remise_except);
4232 4584
 				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessReceived",$discount->getNomUrl(0));
4233
-			}
4234
-			elseif ($line->desc == '(EXCESS PAID)')
4585
+			} elseif ($line->desc == '(EXCESS PAID)')
4235 4586
 			{
4236 4587
 				$discount=new DiscountAbsolute($this->db);
4237 4588
 				$discount->fetch($line->fk_remise_except);
4238 4589
 				$this->tpl['description'] = $langs->transnoentities("DiscountFromExcessPaid",$discount->getNomUrl(0));
4239
-			}
4240
-			else
4590
+			} else
4241 4591
 			{
4242 4592
 				$this->tpl['description'] = dol_trunc($line->desc,60);
4243 4593
 			}
4244
-		}
4245
-		else
4594
+		} else
4246 4595
 		{
4247 4596
 			$this->tpl['description'] = '&nbsp;';
4248 4597
 		}
@@ -4250,18 +4599,23 @@  discard block
 block discarded – undo
4250 4599
         // VAT Rate
4251 4600
         $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
4252 4601
         $this->tpl['vat_rate'] .= (($line->info_bits & 1) == 1) ? '*' : '';
4253
-        if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
4602
+        if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) {
4603
+            $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
4604
+        }
4254 4605
 
4255 4606
 		$this->tpl['price'] = price($line->subprice);
4256 4607
 		$this->tpl['multicurrency_price'] = price($line->multicurrency_subprice);
4257 4608
 		$this->tpl['qty'] = (($line->info_bits & 2) != 2) ? $line->qty : '&nbsp;';
4258
-		if (Globals::$conf->global->PRODUCT_USE_UNITS)
4259
-            $this->tpl['unit'] = $langs->transnoentities($line->getLabelOfUnit('long'));
4609
+		if (Globals::$conf->global->PRODUCT_USE_UNITS) {
4610
+		            $this->tpl['unit'] = $langs->transnoentities($line->getLabelOfUnit('long'));
4611
+		}
4260 4612
         $this->tpl['remise_percent'] = (($line->info_bits & 2) != 2) ? vatrate($line->remise_percent, true) : '&nbsp;';
4261 4613
 
4262 4614
 		// Is the line strike or not
4263 4615
 		$this->tpl['strike']=0;
4264
-		if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) $this->tpl['strike']=1;
4616
+		if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) {
4617
+		    $this->tpl['strike']=1;
4618
+		}
4265 4619
 
4266 4620
 		// Output template part (modules that overwrite templates must declare this into descriptor)
4267 4621
 		// Use global variables + $dateSelector + $seller and $buyer
@@ -4274,7 +4628,9 @@  discard block
 block discarded – undo
4274 4628
 			} else {
4275 4629
 				$res=include $tpl; // for debug
4276 4630
 			}
4277
-			if ($res) break;
4631
+			if ($res) {
4632
+			    break;
4633
+			}
4278 4634
 		}
4279 4635
 	}
4280 4636
 
@@ -4316,8 +4672,7 @@  discard block
 block discarded – undo
4316 4672
 		{
4317 4673
 			$this->db->commit();
4318 4674
 			return 1;
4319
-		}
4320
-		else
4675
+		} else
4321 4676
 		{
4322 4677
 			$this->error=$this->db->lasterror();
4323 4678
 			$this->db->rollback();
@@ -4352,8 +4707,7 @@  discard block
 block discarded – undo
4352 4707
 			$this->error=$this->db->lasterror();
4353 4708
 			$this->db->rollback();
4354 4709
 			return -1;
4355
-		}
4356
-		else
4710
+		} else
4357 4711
 		{
4358 4712
 			if (! $notrigger)
4359 4713
 			{
@@ -4420,14 +4774,20 @@  discard block
 block discarded – undo
4420 4774
 		// Search template files
4421 4775
 		$file=''; $classname=''; $filefound=0;
4422 4776
 		$dirmodels=array('/');
4423
-		if (is_array(Globals::$conf->modules_parts['models']))
4424
-            $dirmodels = array_merge($dirmodels, Globals::$conf->modules_parts['models']);
4777
+		if (is_array(Globals::$conf->modules_parts['models'])) {
4778
+		            $dirmodels = array_merge($dirmodels, Globals::$conf->modules_parts['models']);
4779
+		}
4425 4780
         foreach($dirmodels as $reldir)
4426 4781
 		{
4427 4782
 			foreach(array('doc','pdf') as $prefix)
4428 4783
 			{
4429
-				if (in_array(get_class($this), array('Adherent'))) $file = $prefix."_".$modele.".class.php";     // Member module use prefix_module.class.php
4430
-				else $file = $prefix."_".$modele.".modules.php";
4784
+				if (in_array(get_class($this), array('Adherent'))) {
4785
+				    $file = $prefix."_".$modele.".class.php";
4786
+				}
4787
+				// Member module use prefix_module.class.php
4788
+				else {
4789
+				    $file = $prefix."_".$modele.".modules.php";
4790
+				}
4431 4791
 
4432 4792
 				// On verifie l'emplacement du modele
4433 4793
 				$file=dol_buildpath($reldir.$modelspath.$file,0);
@@ -4438,7 +4798,9 @@  discard block
 block discarded – undo
4438 4798
 					break;
4439 4799
 				}
4440 4800
 			}
4441
-			if ($filefound) break;
4801
+			if ($filefound) {
4802
+			    break;
4803
+			}
4442 4804
 		}
4443 4805
 
4444 4806
 		// If generator was found
@@ -4469,7 +4831,9 @@  discard block
 block discarded – undo
4469 4831
 						if (is_dir($tmpdir))
4470 4832
 						{
4471 4833
 							$tmpfiles=dol_dir_list($tmpdir,'files',0,'\.od(s|t)$','','name',SORT_ASC,0);
4472
-							if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
4834
+							if (count($tmpfiles)) {
4835
+							    $listoffiles=array_merge($listoffiles,$tmpfiles);
4836
+							}
4473 4837
 						}
4474 4838
 					}
4475 4839
 
@@ -4507,8 +4871,7 @@  discard block
 block discarded – undo
4507 4871
 			{
4508 4872
 				$arrayofrecords = array();   // The write_file of templates of adherent class need this var
4509 4873
 				$resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, 'member', 1, $moreparams);
4510
-			}
4511
-			else
4874
+			} else
4512 4875
 			{
4513 4876
 				$resultwritefile = $obj->write_file($this, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref, $moreparams);
4514 4877
 			}
@@ -4530,9 +4893,11 @@  discard block
 block discarded – undo
4530 4893
 					$destfile = basename($destfull);
4531 4894
 					$rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT,'/').'/', '', $upload_dir);
4532 4895
 
4533
-					if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir))     // If not a tmp dir
4896
+					if (! preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir)) {
4897
+					    // If not a tmp dir
4534 4898
 					{
4535
-						$filename = basename($destfile);
4899
+						$filename = basename($destfile);
4900
+					}
4536 4901
 						$rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
4537 4902
 						$rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
4538 4903
 
@@ -4545,22 +4910,30 @@  discard block
 block discarded – undo
4545 4910
 						if ($this->element == 'propal')
4546 4911
 						{
4547 4912
 							$useonlinesignature = Globals::$conf->global->MAIN_FEATURES_LEVEL; // Replace this with 1 when feature to make online signature is ok
4548
-                            if ($useonlinesignature) $setsharekey=true;
4549
-							if (!empty(Globals::$conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD))
4550
-                                $setsharekey = true;
4913
+                            if ($useonlinesignature) {
4914
+                                $setsharekey=true;
4915
+                            }
4916
+							if (!empty(Globals::$conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) {
4917
+							                                $setsharekey = true;
4918
+							}
4551 4919
                         }
4552
-						if ($this->element == 'commande' && !empty(Globals::$conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD))
4553
-                            $setsharekey = true;
4554
-                        if ($this->element == 'facture' && !empty(Globals::$conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD))
4555
-                            $setsharekey = true;
4556
-                        if ($this->element == 'bank_account' && !empty(Globals::$conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD))
4557
-                            $setsharekey = true;
4920
+						if ($this->element == 'commande' && !empty(Globals::$conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD)) {
4921
+						                            $setsharekey = true;
4922
+						}
4923
+                        if ($this->element == 'facture' && !empty(Globals::$conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD)) {
4924
+                                                    $setsharekey = true;
4925
+                        }
4926
+                        if ($this->element == 'bank_account' && !empty(Globals::$conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) {
4927
+                                                    $setsharekey = true;
4928
+                        }
4558 4929
 
4559 4930
                         if ($setsharekey)
4560 4931
 						{
4561
-							if (empty($ecmfile->share))	// Because object not found or share not set yet
4932
+							if (empty($ecmfile->share)) {
4933
+							    // Because object not found or share not set yet
4562 4934
 							{
4563
-								require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
4935
+								require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
4936
+							}
4564 4937
 								$ecmfile->share = getRandomPassword(true);
4565 4938
 							}
4566 4939
 						}
@@ -4577,8 +4950,7 @@  discard block
 block discarded – undo
4577 4950
 							{
4578 4951
 								setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
4579 4952
 							}
4580
-						}
4581
-						else
4953
+						} else
4582 4954
 						{
4583 4955
 							$ecmfile->entity = Globals::$conf->entity;
4584 4956
                             $ecmfile->filepath = $rel_dir;
@@ -4605,17 +4977,20 @@  discard block
 block discarded – undo
4605 4977
 
4606 4978
 						// Update the last_main_doc field into main object (if documenent generator has property ->update_main_doc_field set)
4607 4979
 						$update_main_doc_field=0;
4608
-						if (! empty($obj->update_main_doc_field)) $update_main_doc_field=1;
4980
+						if (! empty($obj->update_main_doc_field)) {
4981
+						    $update_main_doc_field=1;
4982
+						}
4609 4983
 						if ($update_main_doc_field && ! empty($this->table_element))
4610 4984
 						{
4611 4985
 							$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".($ecmfile->filepath.'/'.$ecmfile->filename)."'";
4612 4986
 							$sql.= ' WHERE rowid = '.$this->id;
4613 4987
 							$resql = $this->db->query($sql);
4614
-							if (! $resql) dol_print_error($this->db);
4988
+							if (! $resql) {
4989
+							    dol_print_error($this->db);
4990
+							}
4615 4991
 						}
4616 4992
 					}
4617
-				}
4618
-				else
4993
+				} else
4619 4994
 				{
4620 4995
 					dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING);
4621 4996
 				}
@@ -4624,15 +4999,13 @@  discard block
 block discarded – undo
4624 4999
 				dol_meta_create($this);
4625 5000
 
4626 5001
 				return 1;
4627
-			}
4628
-			else
5002
+			} else
4629 5003
 			{
4630 5004
 				$outputlangs->charset_output=$sav_charset_output;
4631 5005
 				dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors);
4632 5006
 				return -1;
4633 5007
 			}
4634
-		}
4635
-		else
5008
+		} else
4636 5009
 		{
4637 5010
 			$this->error=$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
4638 5011
 			dol_print_error('',$this->error);
@@ -4688,13 +5061,21 @@  discard block
 block discarded – undo
4688 5061
 		global $conf, $_POST;
4689 5062
 
4690 5063
 		// If param here has been posted, we use this value first.
4691
-		if (isset($_POST[$fieldname])) return GETPOST($fieldname, 2);
5064
+		if (isset($_POST[$fieldname])) {
5065
+		    return GETPOST($fieldname, 2);
5066
+		}
4692 5067
 
4693
-		if (isset($alternatevalue)) return $alternatevalue;
5068
+		if (isset($alternatevalue)) {
5069
+		    return $alternatevalue;
5070
+		}
4694 5071
 
4695 5072
 		$newelement=$this->element;
4696
-		if ($newelement == 'facture') $newelement='invoice';
4697
-		if ($newelement == 'commande') $newelement='order';
5073
+		if ($newelement == 'facture') {
5074
+		    $newelement='invoice';
5075
+		}
5076
+		if ($newelement == 'commande') {
5077
+		    $newelement='order';
5078
+		}
4698 5079
 		if (empty($newelement))
4699 5080
 		{
4700 5081
 			dol_syslog("Ask a default value using common method getDefaultCreateValueForField on an object with no property ->element defined. Return empty string.", LOG_WARNING);
@@ -4703,8 +5084,9 @@  discard block
 block discarded – undo
4703 5084
 
4704 5085
 		$keyforfieldname=strtoupper($newelement.'_DEFAULT_'.$fieldname);
4705 5086
 		//var_dump($keyforfieldname);
4706
-		if (isset(Globals::$conf->global->$keyforfieldname))
4707
-            return Globals::$conf->global->$keyforfieldname;
5087
+		if (isset(Globals::$conf->global->$keyforfieldname)) {
5088
+		            return Globals::$conf->global->$keyforfieldname;
5089
+		}
4708 5090
 
4709 5091
         // TODO Ad here a scan into table llx_overwrite_default with a filter on $this->element and $fieldname
4710 5092
 	}
@@ -4738,8 +5120,7 @@  discard block
 block discarded – undo
4738 5120
 			if (!empty($this->errors))
4739 5121
 			{
4740 5122
 				$this->errors=array_unique(array_merge($this->errors,$interface->errors));   // We use array_unique because when a trigger call another trigger on same object, this->errors is added twice.
4741
-			}
4742
-			else
5123
+			} else
4743 5124
 			{
4744 5125
 				$this->errors=$interface->errors;
4745 5126
 			}
@@ -4791,15 +5172,17 @@  discard block
 block discarded – undo
4791 5172
 				$extrafields->fetch_name_optionals_label($this->table_element);
4792 5173
 			}
4793 5174
 			$optionsArray = (! empty($extrafields->attributes[$this->table_element]['label'])?$extrafields->attributes[$this->table_element]['label']:null);
4794
-		}
4795
-		else
5175
+		} else
4796 5176
 		{
4797 5177
 			// global $extrafields;
4798 5178
             dol_syslog("Warning: fetch_optionals was called with param optionsArray defined when you should pass null now", LOG_WARNING);
4799 5179
 		}
4800 5180
 
4801 5181
 		$table_element = $this->table_element;
4802
-		if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
5182
+		if ($table_element == 'categorie') {
5183
+		    $table_element = 'categories';
5184
+		}
5185
+		// For compatibility
4803 5186
 
4804 5187
 		// Request to get complementary values
4805 5188
 		if (is_array($optionsArray) && count($optionsArray) > 0)
@@ -4835,8 +5218,7 @@  discard block
 block discarded – undo
4835 5218
 							{
4836 5219
 								//var_dump($extrafields->attributes[$this->table_element]['type'][$key]);
4837 5220
 								$this->array_options["options_".$key]=$this->db->jdate($value);
4838
-							}
4839
-							else
5221
+							} else
4840 5222
 							{
4841 5223
 								$this->array_options["options_".$key]=$value;
4842 5224
 							}
@@ -4848,10 +5230,12 @@  discard block
 block discarded – undo
4848 5230
 
4849 5231
 				$this->db->free($resql);
4850 5232
 
4851
-				if ($numrows) return $numrows;
4852
-				else return 0;
4853
-			}
4854
-			else
5233
+				if ($numrows) {
5234
+				    return $numrows;
5235
+				} else {
5236
+				    return 0;
5237
+				}
5238
+			} else
4855 5239
 			{
4856 5240
 				dol_print_error($this->db);
4857 5241
 				return -1;
@@ -4870,7 +5254,10 @@  discard block
 block discarded – undo
4870 5254
 		$this->db->begin();
4871 5255
 
4872 5256
 		$table_element = $this->table_element;
4873
-		if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
5257
+		if ($table_element == 'categorie') {
5258
+		    $table_element = 'categories';
5259
+		}
5260
+		// For compatibility
4874 5261
 
4875 5262
 		$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
4876 5263
 		dol_syslog(get_class($this)."::deleteExtraFields delete", LOG_DEBUG);
@@ -4880,8 +5267,7 @@  discard block
 block discarded – undo
4880 5267
 			$this->error=$this->db->lasterror();
4881 5268
 			$this->db->rollback();
4882 5269
 			return -1;
4883
-		}
4884
-		else
5270
+		} else
4885 5271
 		{
4886 5272
 			$this->db->commit();
4887 5273
 			return 1;
@@ -4902,12 +5288,16 @@  discard block
 block discarded – undo
4902 5288
 	{
4903 5289
 		global $conf,$langs,$user;
4904 5290
 
4905
-		if (empty($userused)) $userused=$user;
5291
+		if (empty($userused)) {
5292
+		    $userused=$user;
5293
+		}
4906 5294
 
4907 5295
 		$error=0;
4908 5296
 
4909
-		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
4910
-            return 0; // For avoid conflicts if trigger used
5297
+		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
5298
+		            return 0;
5299
+		}
5300
+		// For avoid conflicts if trigger used
4911 5301
 
4912 5302
         if (! empty($this->array_options))
4913 5303
 		{
@@ -4920,10 +5310,13 @@  discard block
 block discarded – undo
4920 5310
 			//Eliminate copied source object extra_fields that do not exist in target object
4921 5311
 			$new_array_options=array();
4922 5312
 			foreach ($this->array_options as $key => $value) {
4923
-				if (in_array(substr($key,8), array_keys($target_extrafields)))	// We remove the 'options_' from $key for test
4924
-					$new_array_options[$key] = $value;
4925
-				elseif (in_array($key, array_keys($target_extrafields)))		// We test on $key that does not contains the 'options_' prefix
4926
-					$new_array_options['options_'.$key] = $value;
5313
+				if (in_array(substr($key,8), array_keys($target_extrafields))) {
5314
+				    // We remove the 'options_' from $key for test
5315
+					$new_array_options[$key] = $value;
5316
+				} elseif (in_array($key, array_keys($target_extrafields))) {
5317
+				    // We test on $key that does not contains the 'options_' prefix
5318
+					$new_array_options['options_'.$key] = $value;
5319
+				}
4927 5320
 			}
4928 5321
 
4929 5322
 			foreach($new_array_options as $key => $value)
@@ -4937,8 +5330,12 @@  discard block
 block discarded – undo
4937 5330
 			   	if ($attributeRequired)
4938 5331
 			   	{
4939 5332
 			   		$mandatorypb=false;
4940
-			   		if ($attributeType == 'link' && $this->array_options[$key] == '-1') $mandatorypb=true;
4941
-			   		if ($this->array_options[$key] === '') $mandatorypb=true;
5333
+			   		if ($attributeType == 'link' && $this->array_options[$key] == '-1') {
5334
+			   		    $mandatorypb=true;
5335
+			   		}
5336
+			   		if ($this->array_options[$key] === '') {
5337
+			   		    $mandatorypb=true;
5338
+			   		}
4942 5339
 			   		if ($mandatorypb)
4943 5340
 			   		{
4944 5341
 			   			dol_syslog($this->error);
@@ -4957,8 +5354,7 @@  discard block
 block discarded – undo
4957 5354
 			   			{
4958 5355
 			   				$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4959 5356
 			   				return -1;
4960
-			  			}
4961
-			   			elseif ($value=='')
5357
+			  			} elseif ($value=='')
4962 5358
 			   			{
4963 5359
 			   				$new_array_options[$key] = null;
4964 5360
 			   			}
@@ -4970,8 +5366,7 @@  discard block
 block discarded – undo
4970 5366
 							dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
4971 5367
 							$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
4972 5368
 							return -1;
4973
-						}
4974
-						elseif ($value=='')
5369
+						} elseif ($value=='')
4975 5370
 						{
4976 5371
 							$new_array_options[$key] = null;
4977 5372
 						}
@@ -4996,27 +5391,27 @@  discard block
 block discarded – undo
4996 5391
 			   					//global $action;		// $action may be 'create', 'update', 'update_extras'...
4997 5392
 			   					//var_dump($action);
4998 5393
 			   					//var_dump($this->oldcopy);exit;
4999
-			   					if (is_object($this->oldcopy))		// If this->oldcopy is not defined, we can't know if we change attribute or not, so we must keep value
5394
+			   					if (is_object($this->oldcopy)) {
5395
+			   					    // If this->oldcopy is not defined, we can't know if we change attribute or not, so we must keep value
5000 5396
 			   					{
5001 5397
 			   						//var_dump($this->oldcopy->array_options[$key]); var_dump($this->array_options[$key]);
5002 5398
 				   					if ($this->array_options[$key] == $this->oldcopy->array_options[$key])	// If old value crypted in database is same than submited new value, it means we don't change it, so we don't update.
5003 5399
 				   					{
5004
-				   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5005
-				   					}
5006
-									else
5400
+				   						$new_array_options[$key] = $this->array_options[$key];
5401
+			   					}
5402
+			   					// Value is kept
5403
+				   					} else
5007 5404
 									{
5008 5405
 										// var_dump($algo);
5009 5406
 										$newvalue = dol_hash($this->array_options[$key], $algo);
5010 5407
 										$new_array_options[$key] = $newvalue;
5011 5408
 									}
5012
-			   					}
5013
-			   					else
5409
+			   					} else
5014 5410
 			   					{
5015 5411
 			   						$new_array_options[$key] = $this->array_options[$key];	// Value is kept
5016 5412
 			   					}
5017 5413
 			   				}
5018
-			   			}
5019
-			   			else	// Common usage
5414
+			   			} else	// Common usage
5020 5415
 			   			{
5021 5416
 			   				$new_array_options[$key] = $this->array_options[$key];
5022 5417
 			   			}
@@ -5042,26 +5437,30 @@  discard block
 block discarded – undo
5042 5437
 						dol_include_once($InfoFieldList[1]);
5043 5438
 						if ($InfoFieldList[0] && class_exists($InfoFieldList[0]))
5044 5439
 						{
5045
-							if ($value == '-1')	// -1 is key for no defined in combo list of objects
5440
+							if ($value == '-1') {
5441
+							    // -1 is key for no defined in combo list of objects
5046 5442
 							{
5047
-								$new_array_options[$key]='';
5048
-							}
5049
-							elseif ($value)
5443
+								$new_array_options[$key]='';
5444
+							}
5445
+							} elseif ($value)
5050 5446
 							{
5051 5447
 								$object = new $InfoFieldList[0]($this->db);
5052
-								if (is_numeric($value)) $res=$object->fetch($value);
5053
-								else $res=$object->fetch('',$value);
5054
-
5055
-								if ($res > 0) $new_array_options[$key]=$object->id;
5056
-								else
5448
+								if (is_numeric($value)) {
5449
+								    $res=$object->fetch($value);
5450
+								} else {
5451
+								    $res=$object->fetch('',$value);
5452
+								}
5453
+
5454
+								if ($res > 0) {
5455
+								    $new_array_options[$key]=$object->id;
5456
+								} else
5057 5457
 								{
5058 5458
 									$this->error="Id/Ref '".$value."' for object '".$object->element."' not found";
5059 5459
 									$this->db->rollback();
5060 5460
 									return -1;
5061 5461
 								}
5062 5462
 							}
5063
-						}
5064
-						else
5463
+						} else
5065 5464
 						{
5066 5465
 							dol_syslog('Error bad setup of extrafield', LOG_WARNING);
5067 5466
 						}
@@ -5072,7 +5471,10 @@  discard block
 block discarded – undo
5072 5471
 			$this->db->begin();
5073 5472
 
5074 5473
 			$table_element = $this->table_element;
5075
-			if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
5474
+			if ($table_element == 'categorie') {
5475
+			    $table_element = 'categories';
5476
+			}
5477
+			// For compatibility
5076 5478
 
5077 5479
 			$sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$table_element."_extrafields WHERE fk_object = ".$this->id;
5078 5480
 			dol_syslog(get_class($this)."::insertExtraFields delete", LOG_DEBUG);
@@ -5083,8 +5485,10 @@  discard block
 block discarded – undo
5083 5485
 			{
5084 5486
 				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5085 5487
 				// Add field of attribut
5086
-				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator
5087
-					$sql.=",".$attributeKey;
5488
+				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') {
5489
+				    // Only for other type than separator
5490
+					$sql.=",".$attributeKey;
5491
+				}
5088 5492
 			}
5089 5493
 			$sql .= ") VALUES (".$this->id;
5090 5494
 
@@ -5092,13 +5496,14 @@  discard block
 block discarded – undo
5092 5496
 			{
5093 5497
 				$attributeKey = substr($key,8);   // Remove 'options_' prefix
5094 5498
 				// Add field of attribute
5095
-				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') // Only for other type than separator)
5499
+				if ($extrafields->attributes[$this->table_element]['type'][$attributeKey] != 'separate') {
5500
+				    // Only for other type than separator)
5096 5501
 				{
5097 5502
 					if ($new_array_options[$key] != '')
5098 5503
 					{
5099
-						$sql.=",'".$this->db->escape($new_array_options[$key])."'";
5100
-					}
5101
-					else
5504
+						$sql.=",'".$this->db->escape($new_array_options[$key])."'";
5505
+				}
5506
+					} else
5102 5507
 					{
5103 5508
 						$sql.=",null";
5104 5509
 					}
@@ -5119,7 +5524,9 @@  discard block
 block discarded – undo
5119 5524
 				// Call trigger
5120 5525
 				$this->context=array('extrafieldaddupdate'=>1);
5121 5526
 				$result=$this->call_trigger($trigger, $userused);
5122
-				if ($result < 0) $error++;
5527
+				if ($result < 0) {
5528
+				    $error++;
5529
+				}
5123 5530
 				// End call trigger
5124 5531
 			}
5125 5532
 
@@ -5127,14 +5534,14 @@  discard block
 block discarded – undo
5127 5534
 			{
5128 5535
 				$this->db->rollback();
5129 5536
 				return -1;
5130
-			}
5131
-			else
5537
+			} else
5132 5538
 			{
5133 5539
 				$this->db->commit();
5134 5540
 				return 1;
5135 5541
 			}
5136
-		}
5137
-		else return 0;
5542
+		} else {
5543
+		    return 0;
5544
+		}
5138 5545
 	}
5139 5546
 
5140 5547
 	/**
@@ -5151,12 +5558,16 @@  discard block
 block discarded – undo
5151 5558
 	{
5152 5559
 		global $conf,$langs,$user;
5153 5560
 
5154
-		if (empty($userused)) $userused=$user;
5561
+		if (empty($userused)) {
5562
+		    $userused=$user;
5563
+		}
5155 5564
 
5156 5565
 		$error=0;
5157 5566
 
5158
-		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED))
5159
-            return 0; // For avoid conflicts if trigger used
5567
+		if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
5568
+		            return 0;
5569
+		}
5570
+		// For avoid conflicts if trigger used
5160 5571
 
5161 5572
         if (! empty($this->array_options) && isset($this->array_options["options_".$key]))
5162 5573
 		{
@@ -5183,8 +5594,7 @@  discard block
 block discarded – undo
5183 5594
 					{
5184 5595
 						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue",$attributeLabel);
5185 5596
 						return -1;
5186
-					}
5187
-					elseif ($value=='')
5597
+					} elseif ($value=='')
5188 5598
 					{
5189 5599
 						$this->array_options["options_".$key] = null;
5190 5600
 					}
@@ -5196,8 +5606,7 @@  discard block
 block discarded – undo
5196 5606
 						dol_syslog($langs->trans("ExtraFieldHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
5197 5607
 						$this->errors[]=$langs->trans("ExtraFieldHasWrongValue", $attributeLabel);
5198 5608
 						return -1;
5199
-					}
5200
-					elseif ($value=='')
5609
+					} elseif ($value=='')
5201 5610
 					{
5202 5611
 						$this->array_options["options_".$key] = null;
5203 5612
 					}
@@ -5249,7 +5658,9 @@  discard block
 block discarded – undo
5249 5658
 				// Call trigger
5250 5659
 				$this->context=array('extrafieldupdate'=>1);
5251 5660
 				$result=$this->call_trigger($trigger, $userused);
5252
-				if ($result < 0) $error++;
5661
+				if ($result < 0) {
5662
+				    $error++;
5663
+				}
5253 5664
 				// End call trigger
5254 5665
 			}
5255 5666
 
@@ -5258,14 +5669,14 @@  discard block
 block discarded – undo
5258 5669
 				dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR);
5259 5670
 				$this->db->rollback();
5260 5671
 				return -1;
5261
-			}
5262
-			else
5672
+			} else
5263 5673
 			{
5264 5674
 				$this->db->commit();
5265 5675
 				return 1;
5266 5676
 			}
5267
-		}
5268
-		else return 0;
5677
+		} else {
5678
+		    return 0;
5679
+		}
5269 5680
 	}
5270 5681
 
5271 5682
 
@@ -5340,8 +5751,11 @@  discard block
 block discarded – undo
5340 5751
 
5341 5752
 		if ($computed)
5342 5753
 		{
5343
-			if (! preg_match('/^search_/', $keyprefix)) return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5344
-			else return '';
5754
+			if (! preg_match('/^search_/', $keyprefix)) {
5755
+			    return '<span class="opacitymedium">'.$langs->trans("AutomaticallyCalculated").'</span>';
5756
+			} else {
5757
+			    return '';
5758
+			}
5345 5759
 		}
5346 5760
 
5347 5761
 
@@ -5355,33 +5769,27 @@  discard block
 block discarded – undo
5355 5769
 			if ($type == 'date')
5356 5770
 			{
5357 5771
 				$morecss = 'minwidth100imp';
5358
-			}
5359
-			elseif ($type == 'datetime')
5772
+			} elseif ($type == 'datetime')
5360 5773
 			{
5361 5774
 				$morecss = 'minwidth200imp';
5362
-			}
5363
-			elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5775
+			} elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5364 5776
 			{
5365 5777
 				$morecss = 'maxwidth75';
5366
-                        }elseif ($type == 'url')
5778
+                        } elseif ($type == 'url')
5367 5779
 			{
5368 5780
 				$morecss='minwidth400';
5369
-			}
5370
-			elseif ($type == 'boolean')
5781
+			} elseif ($type == 'boolean')
5371 5782
 			{
5372 5783
 				$morecss='';
5373
-			}
5374
-			else
5784
+			} else
5375 5785
 			{
5376 5786
 				if (round($size) < 12)
5377 5787
 				{
5378 5788
 					$morecss = 'minwidth100';
5379
-				}
5380
-				else if (round($size) <= 48)
5789
+				} else if (round($size) <= 48)
5381 5790
 				{
5382 5791
 					$morecss = 'minwidth200';
5383
-				}
5384
-				else
5792
+				} else
5385 5793
 				{
5386 5794
 					$morecss = 'minwidth400';
5387 5795
 				}
@@ -5396,52 +5804,50 @@  discard block
 block discarded – undo
5396 5804
 			$showtime = in_array($type,array('datetime')) ? 1 : 0;
5397 5805
 
5398 5806
 			// Do not show current date when field not required (see selectDate() method)
5399
-			if (!$required && $value == '') $value = '-1';
5807
+			if (!$required && $value == '') {
5808
+			    $value = '-1';
5809
+			}
5400 5810
 
5401 5811
 			// TODO Must also support $moreparam
5402 5812
 			$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
5403
-		}
5404
-		elseif (in_array($type,array('int','integer')))
5813
+		} elseif (in_array($type,array('int','integer')))
5405 5814
 		{
5406 5815
 			$tmp=explode(',',$size);
5407 5816
 			$newsize=$tmp[0];
5408 5817
 			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5409
-		}
5410
-		elseif (preg_match('/varchar/', $type))
5818
+		} elseif (preg_match('/varchar/', $type))
5411 5819
 		{
5412 5820
 			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
5413
-		}
5414
-		elseif (in_array($type, array('mail', 'phone', 'url')))
5821
+		} elseif (in_array($type, array('mail', 'phone', 'url')))
5415 5822
 		{
5416 5823
 			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5417
-		}
5418
-		elseif ($type == 'text')
5824
+		} elseif ($type == 'text')
5419 5825
 		{
5420
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5826
+			if (! preg_match('/search_/', $keyprefix)) {
5827
+			    // If keyprefix is search_ or search_options_, we must just use a simple text field
5421 5828
 			{
5422
-				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5829
+				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5830
+			}
5423 5831
 				$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,false,ROWS_5,'90%');
5424 5832
 				$out=$doleditor->Create(1);
5425
-			}
5426
-			else
5833
+			} else
5427 5834
 			{
5428 5835
 				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5429 5836
 			}
5430
-		}
5431
-		elseif ($type == 'html')
5837
+		} elseif ($type == 'html')
5432 5838
 		{
5433
-			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
5839
+			if (! preg_match('/search_/', $keyprefix)) {
5840
+			    // If keyprefix is search_ or search_options_, we must just use a simple text field
5434 5841
 			{
5435
-				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5842
+				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
5843
+			}
5436 5844
 				$doleditor = new DolEditor($keyprefix . $key . $keysuffix, $value, '', 200, 'dolibarr_notes', 'In', false, false, !empty(Globals::$conf->fckeditor->enabled) && Globals::$conf->global->FCKEDITOR_ENABLE_SOCIETE, ROWS_5, '90%');
5437 5845
                 $out=$doleditor->Create(1);
5438
-			}
5439
-			else
5846
+			} else
5440 5847
 			{
5441 5848
 				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
5442 5849
 			}
5443
-		}
5444
-		elseif ($type == 'boolean')
5850
+		} elseif ($type == 'boolean')
5445 5851
 		{
5446 5852
 			$checked='';
5447 5853
 			if (!empty($value)) {
@@ -5450,22 +5856,19 @@  discard block
 block discarded – undo
5450 5856
 				$checked=' value="1" ';
5451 5857
 			}
5452 5858
 			$out='<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
5453
-		}
5454
-		elseif ($type == 'price')
5859
+		} elseif ($type == 'price')
5455 5860
 		{
5456 5861
 			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5457 5862
 				$value=price($value);
5458 5863
 			}
5459 5864
 			$out = '<input type="text" class="flat ' . $morecss . ' maxwidthonsmartphone" name="' . $keyprefix . $key . $keysuffix . '" id="' . $keyprefix . $key . $keysuffix . '" value="' . $value . '" ' . ($moreparam ? $moreparam : '') . '> ' . $langs->getCurrencySymbol(Globals::$conf->currency);
5460
-        }
5461
-		elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5865
+        } elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
5462 5866
 		{
5463 5867
 			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
5464 5868
 				$value=price($value);
5465 5869
 			}
5466 5870
 			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
5467
-		}
5468
-		elseif ($type == 'select')
5871
+		} elseif ($type == 'select')
5469 5872
 		{
5470 5873
 			$out = '';
5471 5874
 			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
@@ -5474,10 +5877,14 @@  discard block
 block discarded – undo
5474 5877
 			}
5475 5878
 
5476 5879
 			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
5477
-                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1))$out.='<option value="0">&nbsp;</option>';
5880
+                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1)) {
5881
+                    $out.='<option value="0">&nbsp;</option>';
5882
+                }
5478 5883
 			foreach ($param['options'] as $key => $val)
5479 5884
 			{
5480
-				if ((string) $key == '') continue;
5885
+				if ((string) $key == '') {
5886
+				    continue;
5887
+				}
5481 5888
 				list($val, $parent) = explode('|', $val);
5482 5889
 				$out.='<option value="'.$key.'"';
5483 5890
 				$out.= (((string) $value == (string) $key)?' selected':'');
@@ -5485,8 +5892,7 @@  discard block
 block discarded – undo
5485 5892
 				$out.='>'.$val.'</option>';
5486 5893
 			}
5487 5894
 			$out.='</select>';
5488
-		}
5489
-		elseif ($type == 'sellist')
5895
+		} elseif ($type == 'sellist')
5490 5896
 		{
5491 5897
 			$out = '';
5492 5898
 			if (!empty(Globals::$conf->use_javascript_ajax) && !empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_SELECT2)) {
@@ -5552,13 +5958,11 @@  discard block
 block discarded – undo
5552 5958
 					{
5553 5959
 						$sql.= ' as main, '.MAIN_DB_PREFIX .$InfoFieldList[0].'_extrafields as extra';
5554 5960
 						$sqlwhere.= ' WHERE extra.fk_object=main.'.$InfoFieldList[2]. ' AND '.$InfoFieldList[4];
5555
-					}
5556
-					else
5961
+					} else
5557 5962
 					{
5558 5963
 						$sqlwhere.= ' WHERE '.$InfoFieldList[4];
5559 5964
 					}
5560
-				}
5561
-				else
5965
+				} else
5562 5966
 				{
5563 5967
 					$sqlwhere.= ' WHERE 1=1';
5564 5968
 				}
@@ -5594,8 +5998,7 @@  discard block
 block discarded – undo
5594 5998
 							{
5595 5999
 								$labeltoshow.= $obj->$field_toshow.' ';
5596 6000
 							}
5597
-						}
5598
-						else
6001
+						} else
5599 6002
 						{
5600 6003
 							$labeltoshow=$obj->{$InfoFieldList[1]};
5601 6004
 						}
@@ -5608,25 +6011,25 @@  discard block
 block discarded – undo
5608 6011
 								$translabel=$langs->trans($obj->$field_toshow);
5609 6012
 								if ($translabel!=$obj->$field_toshow) {
5610 6013
 									$labeltoshow=dol_trunc($translabel,18).' ';
5611
-								}else {
6014
+								} else {
5612 6015
 									$labeltoshow=dol_trunc($obj->$field_toshow,18).' ';
5613 6016
 								}
5614 6017
 							}
5615 6018
 							$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
5616
-						}
5617
-						else
6019
+						} else
5618 6020
 						{
5619 6021
 							if (! $notrans)
5620 6022
 							{
5621 6023
 								$translabel=$langs->trans($obj->{$InfoFieldList[1]});
5622 6024
 								if ($translabel!=$obj->{$InfoFieldList[1]}) {
5623 6025
 									$labeltoshow=dol_trunc($translabel,18);
5624
-								}
5625
-								else {
6026
+								} else {
5626 6027
 									$labeltoshow=dol_trunc($obj->{$InfoFieldList[1]},18);
5627 6028
 								}
5628 6029
 							}
5629
-							if (empty($labeltoshow)) $labeltoshow='(not defined)';
6030
+							if (empty($labeltoshow)) {
6031
+							    $labeltoshow='(not defined)';
6032
+							}
5630 6033
 							if ($value==$obj->rowid)
5631 6034
 							{
5632 6035
 								$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
@@ -5646,19 +6049,16 @@  discard block
 block discarded – undo
5646 6049
 						$i++;
5647 6050
 					}
5648 6051
 					$this->db->free($resql);
5649
-				}
5650
-				else {
6052
+				} else {
5651 6053
 					print 'Error in request '.$sql.' '.$this->db->lasterror().'. Check setup of extra parameters.<br>';
5652 6054
 				}
5653 6055
 			}
5654 6056
 			$out.='</select>';
5655
-		}
5656
-		elseif ($type == 'checkbox')
6057
+		} elseif ($type == 'checkbox')
5657 6058
 		{
5658 6059
 			$value_arr=explode(',',$value);
5659 6060
 			$out=$form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options'])?null:$param['options']), $value_arr, '', 0, '', 0, '100%');
5660
-		}
5661
-		elseif ($type == 'radio')
6061
+		} elseif ($type == 'radio')
5662 6062
 		{
5663 6063
 			$out='';
5664 6064
 			foreach ($param['options'] as $keyopt => $val)
@@ -5669,13 +6069,11 @@  discard block
 block discarded – undo
5669 6069
 				$out.= ($value==$keyopt?'checked':'');
5670 6070
 				$out.='/><label for="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'">'.$val.'</label><br>';
5671 6071
 			}
5672
-		}
5673
-		elseif ($type == 'chkbxlst')
6072
+		} elseif ($type == 'chkbxlst')
5674 6073
 		{
5675 6074
 			if (is_array($value)) {
5676 6075
 				$value_arr = $value;
5677
-			}
5678
-			else {
6076
+			} else {
5679 6077
 				$value_arr = explode(',', $value);
5680 6078
 			}
5681 6079
 
@@ -5790,8 +6188,9 @@  discard block
 block discarded – undo
5790 6188
 									$labeltoshow = dol_trunc($obj->{$InfoFieldList[1]}, 18);
5791 6189
 								}
5792 6190
 							}
5793
-							if (empty($labeltoshow))
5794
-								$labeltoshow = '(not defined)';
6191
+							if (empty($labeltoshow)) {
6192
+															$labeltoshow = '(not defined)';
6193
+							}
5795 6194
 
5796 6195
 								if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
5797 6196
 									$data[$obj->rowid]=$labeltoshow;
@@ -5813,26 +6212,26 @@  discard block
 block discarded – undo
5813 6212
 					print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
5814 6213
 				}
5815 6214
 			}
5816
-		}
5817
-		elseif ($type == 'link')
6215
+		} elseif ($type == 'link')
5818 6216
 		{
5819 6217
 			$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
5820 6218
 			$showempty=(($required && $default != '')?0:1);
5821 6219
 			$out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
5822 6220
 			if (Globals::$conf->global->MAIN_FEATURES_LEVEL >= 2) {
5823 6221
             			list($class,$classfile)=explode(':',$param_list[0]);
5824
-            			if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php',1);
5825
-            			else $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php',1);
6222
+            			if (file_exists(dol_buildpath(dirname(dirname($classfile)).'/card.php'))) {
6223
+            			    $url_path=dol_buildpath(dirname(dirname($classfile)).'/card.php',1);
6224
+            			} else {
6225
+            			    $url_path=dol_buildpath(dirname(dirname($classfile)).'/'.$class.'_card.php',1);
6226
+            			}
5826 6227
             			$out.='<a class="butActionNew" href="'.$url_path.'?action=create&backtopage='.$_SERVER['PHP_SELF'].'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
5827 6228
             			// TODO Add Javascript code to add input fields contents to new elements urls
5828 6229
 			}
5829
-		}
5830
-		elseif ($type == 'password')
6230
+		} elseif ($type == 'password')
5831 6231
 		{
5832 6232
 			// If prefix is 'search_', field is used as a filter, we use a common text field.
5833 6233
 			$out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
5834
-		}
5835
-		elseif ($type == 'array')
6234
+		} elseif ($type == 'array')
5836 6235
 		{
5837 6236
 			$newval = $val;
5838 6237
 			$newval['type'] = 'varchar(256)';
@@ -5910,17 +6309,25 @@  discard block
 block discarded – undo
5910 6309
 		{
5911 6310
 			$type = 'varchar';		// convert varchar(xx) int varchar
5912 6311
 			$size = $reg[1];
5913
-		}
5914
-		elseif (preg_match('/varchar/', $type)) $type = 'varchar';		// convert varchar(xx) int varchar
5915
-		if (is_array($val['arrayofkeyval'])) $type='select';
5916
-		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type='link';
6312
+		} elseif (preg_match('/varchar/', $type)) {
6313
+		    $type = 'varchar';
6314
+		}
6315
+		// convert varchar(xx) int varchar
6316
+		if (is_array($val['arrayofkeyval'])) {
6317
+		    $type='select';
6318
+		}
6319
+		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) {
6320
+		    $type='link';
6321
+		}
5917 6322
 
5918 6323
 		$default=$val['default'];
5919 6324
 		$computed=$val['computed'];
5920 6325
 		$unique=$val['unique'];
5921 6326
 		$required=$val['required'];
5922 6327
 		$param=$val['param'];
5923
-		if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
6328
+		if (is_array($val['arrayofkeyval'])) {
6329
+		    $param['options'] = $val['arrayofkeyval'];
6330
+		}
5924 6331
 		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
5925 6332
 		{
5926 6333
 			$type='link';
@@ -5931,7 +6338,9 @@  discard block
 block discarded – undo
5931 6338
 		$help=$val['help'];
5932 6339
 		$hidden=(($val['visible'] == 0) ? 1 : 0);			// If zero, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
5933 6340
 
5934
-		if ($hidden) return '';
6341
+		if ($hidden) {
6342
+		    return '';
6343
+		}
5935 6344
 
5936 6345
 		// If field is a computed field, value must become result of compute
5937 6346
 		if ($computed)
@@ -5947,36 +6356,29 @@  discard block
 block discarded – undo
5947 6356
 			{
5948 6357
 				//$showsize=10;
5949 6358
 				$showsize = 'minwidth100imp';
5950
-			}
5951
-			elseif ($type == 'datetime')
6359
+			} elseif ($type == 'datetime')
5952 6360
 			{
5953 6361
 				//$showsize=19;
5954 6362
 				$showsize = 'minwidth200imp';
5955
-			}
5956
-			elseif (in_array($type,array('int','double','price')))
6363
+			} elseif (in_array($type,array('int','double','price')))
5957 6364
 			{
5958 6365
 				//$showsize=10;
5959 6366
 				$showsize = 'maxwidth75';
5960
-			}
5961
-			elseif ($type == 'url')
6367
+			} elseif ($type == 'url')
5962 6368
 			{
5963 6369
 				$showsize='minwidth400';
5964
-			}
5965
-			elseif ($type == 'boolean')
6370
+			} elseif ($type == 'boolean')
5966 6371
 			{
5967 6372
 				$showsize='';
5968
-			}
5969
-			else
6373
+			} else
5970 6374
 			{
5971 6375
 				if (round($size) < 12)
5972 6376
 				{
5973 6377
 					$showsize = 'minwidth100';
5974
-				}
5975
-				else if (round($size) <= 48)
6378
+				} else if (round($size) <= 48)
5976 6379
 				{
5977 6380
 					$showsize = 'minwidth200';
5978
-				}
5979
-				else
6381
+				} else
5980 6382
 				{
5981 6383
 					//$showsize=48;
5982 6384
 					$showsize = 'minwidth400';
@@ -5985,59 +6387,52 @@  discard block
 block discarded – undo
5985 6387
 		}
5986 6388
 
5987 6389
 		// Format output value differently according to properties of field
5988
-		if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value=$this->getNomUrl(1, '', 0, '', 1);
5989
-		elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value=$this->getLibStatut(3);
5990
-		elseif ($type == 'date')
6390
+		if ($key == 'ref' && method_exists($this, 'getNomUrl')) {
6391
+		    $value=$this->getNomUrl(1, '', 0, '', 1);
6392
+		} elseif ($key == 'status' && method_exists($this, 'getLibStatut')) {
6393
+		    $value=$this->getLibStatut(3);
6394
+		} elseif ($type == 'date')
5991 6395
 		{
5992 6396
 			if(! empty($value)) {
5993 6397
 				$value=dol_print_date($value,'day');
5994 6398
 			} else {
5995 6399
 				$value='';
5996 6400
 			}
5997
-		}
5998
-		elseif ($type == 'datetime')
6401
+		} elseif ($type == 'datetime')
5999 6402
 		{
6000 6403
 			if(! empty($value)) {
6001 6404
 				$value=dol_print_date($value,'dayhour');
6002 6405
 			} else {
6003 6406
 				$value='';
6004 6407
 			}
6005
-		}
6006
-		elseif ($type == 'double')
6408
+		} elseif ($type == 'double')
6007 6409
 		{
6008 6410
 			if (!empty($value)) {
6009 6411
 				$value=price($value);
6010 6412
 			}
6011
-		}
6012
-		elseif ($type == 'boolean')
6413
+		} elseif ($type == 'boolean')
6013 6414
 		{
6014 6415
 			$checked='';
6015 6416
 			if (!empty($value)) {
6016 6417
 				$checked=' checked ';
6017 6418
 			}
6018 6419
 			$value='<input type="checkbox" '.$checked.' '.($moreparam?$moreparam:'').' readonly disabled>';
6019
-		}
6020
-		elseif ($type == 'mail')
6420
+		} elseif ($type == 'mail')
6021 6421
 		{
6022 6422
 			$value=dol_print_email($value,0,0,0,64,1,1);
6023
-		}
6024
-		elseif ($type == 'url')
6423
+		} elseif ($type == 'url')
6025 6424
 		{
6026 6425
 			$value=dol_print_url($value,'_blank',32,1);
6027
-		}
6028
-		elseif ($type == 'phone')
6426
+		} elseif ($type == 'phone')
6029 6427
 		{
6030 6428
 			$value=dol_print_phone($value, '', 0, 0, '', '&nbsp;', 1);
6031
-		}
6032
-		elseif ($type == 'price')
6429
+		} elseif ($type == 'price')
6033 6430
 		{
6034 6431
 			$value = price($value, 0, $langs, 0, 0, -1, Globals::$conf->currency);
6035
-        }
6036
-		elseif ($type == 'select')
6432
+        } elseif ($type == 'select')
6037 6433
 		{
6038 6434
 			$value=$param['options'][$value];
6039
-		}
6040
-		elseif ($type == 'sellist')
6435
+		} elseif ($type == 'sellist')
6041 6436
 		{
6042 6437
 			$param_list=array_keys($param['options']);
6043 6438
 			$InfoFieldList = explode(":", $param_list[0]);
@@ -6067,7 +6462,7 @@  discard block
 block discarded – undo
6067 6462
 				$sql.= " WHERE ".$selectkey."=0";
6068 6463
 			} elseif ($selectkey=='rowid') {
6069 6464
 				$sql.= " WHERE ".$selectkey."=".$this->db->escape($value);
6070
-			}else {
6465
+			} else {
6071 6466
 				$sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
6072 6467
 			}
6073 6468
 
@@ -6094,12 +6489,11 @@  discard block
 block discarded – undo
6094 6489
 						}
6095 6490
 						if ($translabel!=$field_toshow) {
6096 6491
 							$value.=dol_trunc($translabel,18).' ';
6097
-						}else {
6492
+						} else {
6098 6493
 							$value.=$obj->$field_toshow.' ';
6099 6494
 						}
6100 6495
 					}
6101
-				}
6102
-				else
6496
+				} else
6103 6497
 				{
6104 6498
 					$translabel='';
6105 6499
 					if (!empty($obj->{$InfoFieldList[1]})) {
@@ -6107,18 +6501,17 @@  discard block
 block discarded – undo
6107 6501
 					}
6108 6502
 					if ($translabel!=$obj->{$InfoFieldList[1]}) {
6109 6503
 						$value=dol_trunc($translabel,18);
6110
-					}else {
6504
+					} else {
6111 6505
 						$value=$obj->{$InfoFieldList[1]};
6112 6506
 					}
6113 6507
 				}
6114
-			}
6115
-			else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
6116
-		}
6117
-		elseif ($type == 'radio')
6508
+			} else {
6509
+			    dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
6510
+			}
6511
+		} elseif ($type == 'radio')
6118 6512
 		{
6119 6513
 			$value=$param['options'][$value];
6120
-		}
6121
-		elseif ($type == 'checkbox')
6514
+		} elseif ($type == 'checkbox')
6122 6515
 		{
6123 6516
 			$value_arr=explode(',',$value);
6124 6517
 			$value='';
@@ -6129,8 +6522,7 @@  discard block
 block discarded – undo
6129 6522
 				}
6130 6523
 				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
6131 6524
 			}
6132
-		}
6133
-		elseif ($type == 'chkbxlst')
6525
+		} elseif ($type == 'chkbxlst')
6134 6526
 		{
6135 6527
 			$value_arr = explode(',', $value);
6136 6528
 
@@ -6198,8 +6590,7 @@  discard block
 block discarded – undo
6198 6590
 			} else {
6199 6591
 				dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
6200 6592
 			}
6201
-		}
6202
-		elseif ($type == 'link')
6593
+		} elseif ($type == 'link')
6203 6594
 		{
6204 6595
 			$out='';
6205 6596
 
@@ -6221,24 +6612,21 @@  discard block
 block discarded – undo
6221 6612
 						$object->fetch($value);
6222 6613
 						$value=$object->getNomUrl($getnomurlparam);
6223 6614
 					}
6224
-				}
6225
-				else
6615
+				} else
6226 6616
 				{
6227 6617
 					dol_syslog('Error bad setup of extrafield', LOG_WARNING);
6228 6618
 					return 'Error bad setup of extrafield';
6229 6619
 				}
6230
-			}
6231
-			else $value='';
6232
-		}
6233
-		elseif ($type == 'text' || $type == 'html')
6620
+			} else {
6621
+			    $value='';
6622
+			}
6623
+		} elseif ($type == 'text' || $type == 'html')
6234 6624
 		{
6235 6625
 			$value=dol_htmlentitiesbr($value);
6236
-		}
6237
-		elseif ($type == 'password')
6626
+		} elseif ($type == 'password')
6238 6627
 		{
6239 6628
 			$value=preg_replace('/./i','*',$value);
6240
-		}
6241
-		elseif ($type == 'array')
6629
+		} elseif ($type == 'array')
6242 6630
 		{
6243 6631
 			$value = implode('<br>', $value);
6244 6632
 		}
@@ -6265,7 +6653,9 @@  discard block
 block discarded – undo
6265 6653
 	{
6266 6654
 		global $db, $conf, $langs, $action, $form;
6267 6655
 
6268
-		if (! is_object($form)) $form=new Form($db);
6656
+		if (! is_object($form)) {
6657
+		    $form=new Form($db);
6658
+		}
6269 6659
 
6270 6660
 		$out = '';
6271 6661
 
@@ -6279,7 +6669,9 @@  discard block
 block discarded – undo
6279 6669
 			foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
6280 6670
 			{
6281 6671
 				// Show only the key field in params
6282
-				if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) continue;
6672
+				if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) {
6673
+				    continue;
6674
+				}
6283 6675
 
6284 6676
 				$enabled = 1;
6285 6677
 				if ($enabled && isset($extrafields->attributes[$this->table_element]['list'][$key]))
@@ -6293,11 +6685,18 @@  discard block
 block discarded – undo
6293 6685
 					$perms = dol_eval($extrafields->attributes[$this->table_element]['perms'][$key], 1);
6294 6686
 				}
6295 6687
 
6296
-				if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) continue;	// <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6297
-				if (empty($perms)) continue;
6688
+				if (($mode == 'create' || $mode == 'edit') && abs($enabled) != 1 && abs($enabled) != 3) {
6689
+				    continue;
6690
+				}
6691
+				// <> -1 and <> 1 and <> 3 = not visible on forms, only on list
6692
+				if (empty($perms)) {
6693
+				    continue;
6694
+				}
6298 6695
 
6299 6696
 				// Load language if required
6300
-				if (! empty($extrafields->attributes[$this->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
6697
+				if (! empty($extrafields->attributes[$this->table_element]['langfile'][$key])) {
6698
+				    $langs->load($extrafields->attributes[$this->table_element]['langfile'][$key]);
6699
+				}
6301 6700
 
6302 6701
 				$colspan='3';
6303 6702
 				if (is_array($params) && count($params)>0) {
@@ -6331,8 +6730,7 @@  discard block
 block discarded – undo
6331 6730
 				if ($extrafields->attributes[$this->table_element]['type'][$key] == 'separate')
6332 6731
 				{
6333 6732
 					$out .= $extrafields->showSeparator($key, $this);
6334
-				}
6335
-				else
6733
+				} else
6336 6734
 				{
6337 6735
 					$csstyle='';
6338 6736
 					$class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
@@ -6363,9 +6761,11 @@  discard block
 block discarded – undo
6363 6761
 					if (in_array($extrafields->attributes[$this->table_element]['type'][$key],array('date','datetime')))
6364 6762
 					{
6365 6763
 						$datenotinstring = $this->array_options['options_' . $key];
6366
-						if (! is_numeric($this->array_options['options_' . $key]))	// For backward compatibility
6764
+						if (! is_numeric($this->array_options['options_' . $key])) {
6765
+						    // For backward compatibility
6367 6766
 						{
6368
-							$datenotinstring = $this->db->jdate($datenotinstring);
6767
+							$datenotinstring = $this->db->jdate($datenotinstring);
6768
+						}
6369 6769
 						}
6370 6770
 						$value = GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)?dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min",'int',3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day",'int',3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year",'int',3)):$datenotinstring;
6371 6771
 					}
@@ -6378,11 +6778,18 @@  discard block
 block discarded – undo
6378 6778
 					$labeltoshow = $langs->trans($label);
6379 6779
 
6380 6780
 					$out .= '<td class="titlefield';
6381
-					if (GETPOST('action','none') == 'create') $out.='create';
6382
-					if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
6781
+					if (GETPOST('action','none') == 'create') {
6782
+					    $out.='create';
6783
+					}
6784
+					if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) {
6785
+					    $out .= ' fieldrequired';
6786
+					}
6383 6787
 					$out .= '">';
6384
-					if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6385
-					else $out .= $labeltoshow;
6788
+					if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) {
6789
+					    $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
6790
+					} else {
6791
+					    $out .= $labeltoshow;
6792
+					}
6386 6793
 					$out .= '</td>';
6387 6794
 
6388 6795
 					$html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : '';
@@ -6399,9 +6806,11 @@  discard block
 block discarded – undo
6399 6806
 
6400 6807
 					$out .= '</td>';
6401 6808
 
6402
-					if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1))
6403
-                        $out .= '</tr>';
6404
-                    else $out .= '</tr>';
6809
+					if (!empty(Globals::$conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1)) {
6810
+					                        $out .= '</tr>';
6811
+					} else {
6812
+                        $out .= '</tr>';
6813
+                    }
6405 6814
 					$e++;
6406 6815
 				}
6407 6816
 			}
@@ -6453,7 +6862,9 @@  discard block
 block discarded – undo
6453 6862
 		global $user;
6454 6863
 
6455 6864
 		$element = $this->element;
6456
-		if ($element == 'facturerec') $element='facture';
6865
+		if ($element == 'facturerec') {
6866
+		    $element='facture';
6867
+		}
6457 6868
 
6458 6869
 		return $user->rights->{$element};
6459 6870
 	}
@@ -6478,7 +6889,10 @@  discard block
 block discarded – undo
6478 6889
 
6479 6890
 			if (! $db->query($sql))
6480 6891
 			{
6481
-				if ($ignoreerrors) return true;		// TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6892
+				if ($ignoreerrors) {
6893
+				    return true;
6894
+				}
6895
+				// TODO Not enough. If there is A-B on kept thirdarty and B-C on old one, we must get A-B-C after merge. Not A-B.
6482 6896
 				//$this->errors = $db->lasterror();
6483 6897
 				return false;
6484 6898
 			}
@@ -6507,8 +6921,7 @@  discard block
 block discarded – undo
6507 6921
 
6508 6922
 		if (($unitPrice > 0) && (isset(Globals::$conf->global->ForceBuyingPriceIfNull) && Globals::$conf->global->ForceBuyingPriceIfNull == 1)) { // In most cases, test here is false{
6509 6923
 			$buyPrice = $unitPrice * (1 - $discountPercent / 100);
6510
-		}
6511
-		else
6924
+		} else
6512 6925
 		{
6513 6926
 			// Get cost price for margin calculation
6514 6927
 			if (! empty($fk_product))
@@ -6525,13 +6938,11 @@  discard block
 block discarded – undo
6525 6938
 					if ($product->cost_price > 0)
6526 6939
 					{
6527 6940
 						$buyPrice = $product->cost_price;
6528
-					}
6529
-					else if ($product->pmp > 0)
6941
+					} else if ($product->pmp > 0)
6530 6942
 					{
6531 6943
 						$buyPrice = $product->pmp;
6532 6944
 					}
6533
-				}
6534
-				else if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'pmp') {
6945
+				} else if (isset(Globals::$conf->global->MARGIN_TYPE) && Globals::$conf->global->MARGIN_TYPE == 'pmp') {
6535 6946
 					require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
6536 6947
 					$product = new Product($this->db);
6537 6948
 					$result = $product->fetch($fk_product);
@@ -6552,8 +6963,7 @@  discard block
 block discarded – undo
6552 6963
 					if (($result = $productFournisseur->find_min_price_product_fournisseur($fk_product)) > 0)
6553 6964
 					{
6554 6965
 						$buyPrice = $productFournisseur->fourn_unitprice;
6555
-					}
6556
-					else if ($result < 0)
6966
+					} else if ($result < 0)
6557 6967
 					{
6558 6968
 						$this->errors[] = $productFournisseur->error;
6559 6969
 						return -2;
@@ -6599,8 +7009,7 @@  discard block
 block discarded – undo
6599 7009
 		{
6600 7010
 			$dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6601 7011
 			$pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->track_id.'/';
6602
-		}
6603
-		else
7012
+		} else
6604 7013
 		{
6605 7014
 			$dir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
6606 7015
 			$pdir .= get_exdir(0, 0, 0, 0, $this, $modulepart).$this->ref.'/';
@@ -6662,19 +7071,26 @@  discard block
 block discarded – undo
6662 7071
 
6663 7072
 						// Find name of thumb file
6664 7073
 						$photo_vignette=basename(getImageFileNameForSize($dir.$file, '_small'));
6665
-						if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
7074
+						if (! dol_is_file($dirthumb.$photo_vignette)) {
7075
+						    $photo_vignette='';
7076
+						}
6666 7077
 
6667 7078
 						// Get filesize of original file
6668 7079
 						$imgarray=dol_getImageSize($dir.$photo);
6669 7080
 
6670 7081
 						if ($nbbyrow > 0)
6671 7082
 						{
6672
-							if ($nbphoto == 1) $return.= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
7083
+							if ($nbphoto == 1) {
7084
+							    $return.= '<table width="100%" valign="top" align="center" border="0" cellpadding="2" cellspacing="2">';
7085
+							}
6673 7086
 
6674
-							if ($nbphoto % $nbbyrow == 1) $return.= '<tr align=center valign=middle border=1>';
7087
+							if ($nbphoto % $nbbyrow == 1) {
7088
+							    $return.= '<tr align=center valign=middle border=1>';
7089
+							}
6675 7090
 							$return.= '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
6676
-						}
6677
-						else if ($nbbyrow < 0) $return .= '<div class="inline-block">';
7091
+						} else if ($nbbyrow < 0) {
7092
+						    $return .= '<div class="inline-block">';
7093
+						}
6678 7094
 
6679 7095
 						$return.= "\n";
6680 7096
 
@@ -6682,15 +7098,20 @@  discard block
 block discarded – undo
6682 7098
 						if (empty($nolink))
6683 7099
 						{
6684 7100
 							$urladvanced=getAdvancedPreviewUrl($modulepart, $relativefile, 0, 'entity='.$this->entity);
6685
-							if ($urladvanced) $return.='<a href="'.$urladvanced.'">';
6686
-							else $return.= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
7101
+							if ($urladvanced) {
7102
+							    $return.='<a href="'.$urladvanced.'">';
7103
+							} else {
7104
+							    $return.= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" class="aphoto" target="_blank">';
7105
+							}
6687 7106
 						}
6688 7107
 
6689 7108
 						// Show image (width height=$maxHeight)
6690 7109
 						// Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine
6691 7110
 						$alt=$langs->transnoentitiesnoconv('File').': '.$relativefile;
6692 7111
 						$alt.=' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
6693
-						if ($notitle) $alt='';
7112
+						if ($notitle) {
7113
+						    $alt='';
7114
+						}
6694 7115
 
6695 7116
 						if ($usesharelink)
6696 7117
 						{
@@ -6700,35 +7121,35 @@  discard block
 block discarded – undo
6700 7121
 								{
6701 7122
 									$return.= '<!-- Show original file (thumb not yet available with shared links) -->';
6702 7123
 									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6703
-								}
6704
-								else {
7124
+								} else {
6705 7125
 									$return.= '<!-- Show original file -->';
6706 7126
 									$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?hashp='.urlencode($val['share']).'" title="'.dol_escape_htmltag($alt).'">';
6707 7127
 								}
6708
-							}
6709
-							else
7128
+							} else
6710 7129
 							{
6711 7130
 								$return.= '<!-- Show nophoto file (because file is not shared) -->';
6712 7131
 								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png" title="'.dol_escape_htmltag($alt).'">';
6713 7132
 							}
6714
-						}
6715
-						else
7133
+						} else
6716 7134
 						{
6717 7135
 							if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
6718 7136
 							{
6719 7137
 								$return.= '<!-- Show thumb -->';
6720 7138
 								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
6721
-							}
6722
-							else {
7139
+							} else {
6723 7140
 								$return.= '<!-- Show original file -->';
6724 7141
 								$return.= '<img class="photo photowithmargin" border="0" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
6725 7142
 							}
6726 7143
 						}
6727 7144
 
6728
-						if (empty($nolink)) $return.= '</a>';
7145
+						if (empty($nolink)) {
7146
+						    $return.= '</a>';
7147
+						}
6729 7148
 						$return.="\n";
6730 7149
 
6731
-						if ($showfilename) $return.= '<br>'.$viewfilename;
7150
+						if ($showfilename) {
7151
+						    $return.= '<br>'.$viewfilename;
7152
+						}
6732 7153
 						if ($showaction)
6733 7154
 						{
6734 7155
 							$return.= '<br>';
@@ -6753,15 +7174,20 @@  discard block
 block discarded – undo
6753 7174
 						if ($nbbyrow > 0)
6754 7175
 						{
6755 7176
 							$return.= '</td>';
6756
-							if (($nbphoto % $nbbyrow) == 0) $return.= '</tr>';
6757
-						}
6758
-						else if ($nbbyrow < 0) $return.='</div>';
7177
+							if (($nbphoto % $nbbyrow) == 0) {
7178
+							    $return.= '</tr>';
7179
+							}
7180
+						} else if ($nbbyrow < 0) {
7181
+						    $return.='</div>';
7182
+						}
6759 7183
 					}
6760 7184
 
6761 7185
 					if (empty($size)) {     // Format origine
6762 7186
 						$return.= '<img class="photo photowithmargin" border="0" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'">';
6763 7187
 
6764
-						if ($showfilename) $return.= '<br>'.$viewfilename;
7188
+						if ($showfilename) {
7189
+						    $return.= '<br>'.$viewfilename;
7190
+						}
6765 7191
 						if ($showaction)
6766 7192
 						{
6767 7193
 							// Special case for product
@@ -6778,7 +7204,9 @@  discard block
 block discarded – undo
6778 7204
 					}
6779 7205
 
6780 7206
 					// On continue ou on arrete de boucler ?
6781
-					if ($nbmax && $nbphoto >= $nbmax) break;
7207
+					if ($nbmax && $nbphoto >= $nbmax) {
7208
+					    break;
7209
+					}
6782 7210
 				}
6783 7211
 			}
6784 7212
 
@@ -6793,7 +7221,9 @@  discard block
 block discarded – undo
6793 7221
 						$nbphoto++;
6794 7222
 					}
6795 7223
 
6796
-					if ($nbphoto) $return.= '</table>';
7224
+					if ($nbphoto) {
7225
+					    $return.= '</table>';
7226
+					}
6797 7227
 				}
6798 7228
 			}
6799 7229
 		}
@@ -6814,10 +7244,14 @@  discard block
 block discarded – undo
6814 7244
 	{
6815 7245
 		if(is_array($info))
6816 7246
 		{
6817
-			if(isset($info['type']) && $info['type']=='array') return true;
6818
-			else return false;
6819
-		}
6820
-		else return false;
7247
+			if(isset($info['type']) && $info['type']=='array') {
7248
+			    return true;
7249
+			} else {
7250
+			    return false;
7251
+			}
7252
+		} else {
7253
+		    return false;
7254
+		}
6821 7255
 	}
6822 7256
 
6823 7257
 	/**
@@ -6830,10 +7264,14 @@  discard block
 block discarded – undo
6830 7264
 	{
6831 7265
 		if(is_array($info))
6832 7266
 		{
6833
-			if(isset($info['type']) && $info['type']=='null') return true;
6834
-			else return false;
6835
-		}
6836
-		else return false;
7267
+			if(isset($info['type']) && $info['type']=='null') {
7268
+			    return true;
7269
+			} else {
7270
+			    return false;
7271
+			}
7272
+		} else {
7273
+		    return false;
7274
+		}
6837 7275
 	}
6838 7276
 
6839 7277
 	/**
@@ -6844,8 +7282,11 @@  discard block
 block discarded – undo
6844 7282
 	 */
6845 7283
 	public function isDate($info)
6846 7284
 	{
6847
-		if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true;
6848
-		else return false;
7285
+		if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) {
7286
+		    return true;
7287
+		} else {
7288
+		    return false;
7289
+		}
6849 7290
 	}
6850 7291
 
6851 7292
 	/**
@@ -6858,10 +7299,14 @@  discard block
 block discarded – undo
6858 7299
 	{
6859 7300
 		if(is_array($info))
6860 7301
 		{
6861
-			if(isset($info['type']) && ($info['type']=='int' || preg_match('/^integer/i',$info['type']) ) ) return true;
6862
-			else return false;
6863
-		}
6864
-		else return false;
7302
+			if(isset($info['type']) && ($info['type']=='int' || preg_match('/^integer/i',$info['type']) ) ) {
7303
+			    return true;
7304
+			} else {
7305
+			    return false;
7306
+			}
7307
+		} else {
7308
+		    return false;
7309
+		}
6865 7310
 	}
6866 7311
 
6867 7312
 	/**
@@ -6874,10 +7319,14 @@  discard block
 block discarded – undo
6874 7319
 	{
6875 7320
 		if(is_array($info))
6876 7321
 		{
6877
-			if (isset($info['type']) && (preg_match('/^(double|real)/i', $info['type']))) return true;
6878
-			else return false;
6879
-		}
6880
-		else return false;
7322
+			if (isset($info['type']) && (preg_match('/^(double|real)/i', $info['type']))) {
7323
+			    return true;
7324
+			} else {
7325
+			    return false;
7326
+			}
7327
+		} else {
7328
+		    return false;
7329
+		}
6881 7330
 	}
6882 7331
 
6883 7332
 	/**
@@ -6890,10 +7339,14 @@  discard block
 block discarded – undo
6890 7339
 	{
6891 7340
 		if(is_array($info))
6892 7341
 		{
6893
-			if(isset($info['type']) && $info['type']=='text') return true;
6894
-			else return false;
6895
-		}
6896
-		else return false;
7342
+			if(isset($info['type']) && $info['type']=='text') {
7343
+			    return true;
7344
+			} else {
7345
+			    return false;
7346
+			}
7347
+		} else {
7348
+		    return false;
7349
+		}
6897 7350
 	}
6898 7351
 
6899 7352
 	/**
@@ -6906,10 +7359,14 @@  discard block
 block discarded – undo
6906 7359
 	{
6907 7360
 		if(is_array($info))
6908 7361
 		{
6909
-			if(isset($info['index']) && $info['index']==true) return true;
6910
-			else return false;
6911
-		}
6912
-		else return false;
7362
+			if(isset($info['index']) && $info['index']==true) {
7363
+			    return true;
7364
+			} else {
7365
+			    return false;
7366
+			}
7367
+		} else {
7368
+		    return false;
7369
+		}
6913 7370
 	}
6914 7371
 
6915 7372
 	/**
@@ -6923,21 +7380,21 @@  discard block
 block discarded – undo
6923 7380
 		global $conf;
6924 7381
 
6925 7382
 		$queryarray=array();
6926
-		foreach ($this->fields as $field=>$info)	// Loop on definition of fields
7383
+		foreach ($this->fields as $field=>$info) {
7384
+		    // Loop on definition of fields
6927 7385
 		{
6928 7386
 			// Depending on field type ('datetime', ...)
6929 7387
 			if($this->isDate($info))
6930 7388
 			{
6931 7389
 				if(empty($this->{$field}))
6932 7390
 				{
6933
-					$queryarray[$field] = null;
6934
-				}
6935
-				else
7391
+					$queryarray[$field] = null;
7392
+		}
7393
+				} else
6936 7394
 				{
6937 7395
 					$queryarray[$field] = $this->db->idate($this->{$field});
6938 7396
 				}
6939
-			}
6940
-			else if($this->isArray($info))
7397
+			} else if($this->isArray($info))
6941 7398
 			{
6942 7399
 				if(! empty($this->{$field})) {
6943 7400
 					if(! is_array($this->{$field})) {
@@ -6947,29 +7404,35 @@  discard block
 block discarded – undo
6947 7404
 				} else {
6948 7405
 					$queryarray[$field] = null;
6949 7406
 				}
6950
-			}
6951
-			else if($this->isInt($info))
7407
+			} else if($this->isInt($info))
6952 7408
 			{
6953
-				if ($field == 'entity' && is_null($this->{$field}))
6954
-                    $queryarray[$field] = Globals::$conf->entity;
6955
-                else
7409
+				if ($field == 'entity' && is_null($this->{$field})) {
7410
+				                    $queryarray[$field] = Globals::$conf->entity;
7411
+				} else
6956 7412
 				{
6957 7413
 					$queryarray[$field] = (int) price2num($this->{$field});
6958
-					if (empty($queryarray[$field])) $queryarray[$field]=0;		// May be reset to null later if property 'notnull' is -1 for this field.
7414
+					if (empty($queryarray[$field])) {
7415
+					    $queryarray[$field]=0;
7416
+					}
7417
+					// May be reset to null later if property 'notnull' is -1 for this field.
6959 7418
 				}
6960
-			}
6961
-			else if($this->isFloat($info))
7419
+			} else if($this->isFloat($info))
6962 7420
 			{
6963 7421
 				$queryarray[$field] = (double) price2num($this->{$field});
6964
-				if (empty($queryarray[$field])) $queryarray[$field]=0;
6965
-			}
6966
-			else
7422
+				if (empty($queryarray[$field])) {
7423
+				    $queryarray[$field]=0;
7424
+				}
7425
+			} else
6967 7426
 			{
6968 7427
 				$queryarray[$field] = $this->{$field};
6969 7428
 			}
6970 7429
 
6971
-			if ($info['type'] == 'timestamp' && empty($queryarray[$field])) unset($queryarray[$field]);
6972
-			if (! empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) $queryarray[$field] = null;
7430
+			if ($info['type'] == 'timestamp' && empty($queryarray[$field])) {
7431
+			    unset($queryarray[$field]);
7432
+			}
7433
+			if (! empty($info['notnull']) && $info['notnull'] == -1 && empty($queryarray[$field])) {
7434
+			    $queryarray[$field] = null;
7435
+			}
6973 7436
 		}
6974 7437
 
6975 7438
 		return $queryarray;
@@ -6987,42 +7450,47 @@  discard block
 block discarded – undo
6987 7450
 		{
6988 7451
 			if($this->isDate($info))
6989 7452
 			{
6990
-				if(empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') $this->{$field} = 0;
6991
-				else $this->{$field} = strtotime($obj->{$field});
6992
-			}
6993
-			elseif($this->isArray($info))
7453
+				if(empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') {
7454
+				    $this->{$field} = 0;
7455
+				} else {
7456
+				    $this->{$field} = strtotime($obj->{$field});
7457
+				}
7458
+			} elseif($this->isArray($info))
6994 7459
 			{
6995 7460
 				if(! empty($obj->{$field})) {
6996 7461
 					$this->{$field} = @unserialize($obj->{$field});
6997 7462
 					// Hack for data not in UTF8
6998
-					if($this->{$field } === false) @unserialize(utf8_decode($obj->{$field}));
7463
+					if($this->{$field } === false) {
7464
+					    @unserialize(utf8_decode($obj->{$field}));
7465
+					}
6999 7466
 				} else {
7000 7467
 					$this->{$field} = array();
7001 7468
 				}
7002
-			}
7003
-			elseif($this->isInt($info))
7469
+			} elseif($this->isInt($info))
7004 7470
 			{
7005
-				if ($field == 'rowid') $this->id = (int) $obj->{$field};
7006
-				else $this->{$field} = (int) $obj->{$field};
7007
-			}
7008
-			elseif($this->isFloat($info))
7471
+				if ($field == 'rowid') {
7472
+				    $this->id = (int) $obj->{$field};
7473
+				} else {
7474
+				    $this->{$field} = (int) $obj->{$field};
7475
+				}
7476
+			} elseif($this->isFloat($info))
7009 7477
 			{
7010 7478
 				$this->{$field} = (double) $obj->{$field};
7011
-			}
7012
-			elseif($this->isNull($info))
7479
+			} elseif($this->isNull($info))
7013 7480
 			{
7014 7481
 				$val = $obj->{$field};
7015 7482
 				// zero is not null
7016 7483
 				$this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val);
7017
-			}
7018
-			else
7484
+			} else
7019 7485
 			{
7020 7486
 				$this->{$field} = $obj->{$field};
7021 7487
 			}
7022 7488
 		}
7023 7489
 
7024 7490
 		// If there is no 'ref' field, we force property ->ref to ->id for a better compatibility with common functions.
7025
-		if (! isset($this->fields['ref']) && isset($this->id)) $this->ref = $this->id;
7491
+		if (! isset($this->fields['ref']) && isset($this->id)) {
7492
+		    $this->ref = $this->id;
7493
+		}
7026 7494
 	}
7027 7495
 
7028 7496
 	/**
@@ -7045,9 +7513,13 @@  discard block
 block discarded – undo
7045 7513
 	 */
7046 7514
     protected function quote($value, $fieldsentry)
7047 7515
     {
7048
-		if (is_null($value)) return 'NULL';
7049
-		else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) return $this->db->escape("$value");
7050
-		else return "'".$this->db->escape($value)."'";
7516
+		if (is_null($value)) {
7517
+		    return 'NULL';
7518
+		} else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) {
7519
+		    return $this->db->escape("$value");
7520
+		} else {
7521
+		    return "'".$this->db->escape($value)."'";
7522
+		}
7051 7523
 	}
7052 7524
 
7053 7525
 
@@ -7067,8 +7539,12 @@  discard block
 block discarded – undo
7067 7539
 		$now=dol_now();
7068 7540
 
7069 7541
 		$fieldvalues = $this->setSaveQuery();
7070
-		if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now);
7071
-		if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id;
7542
+		if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) {
7543
+		    $fieldvalues['date_creation']=$this->db->idate($now);
7544
+		}
7545
+		if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) {
7546
+		    $fieldvalues['fk_user_creat']=$user->id;
7547
+		}
7072 7548
 		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
7073 7549
 
7074 7550
 		$keys=array();
@@ -7083,8 +7559,12 @@  discard block
 block discarded – undo
7083 7559
 		foreach($keys as $key)
7084 7560
 		{
7085 7561
 			// If field is an implicit foreign key field
7086
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';
7087
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';
7562
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') {
7563
+			    $values[$key]='';
7564
+			}
7565
+			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') {
7566
+			    $values[$key]='';
7567
+			}
7088 7568
 
7089 7569
 			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7090 7570
 			if (isset($this->fields[$key]['notnull']) && $this->fields[$key]['notnull'] == 1 && ! isset($values[$key]) && is_null($val['default']))
@@ -7094,11 +7574,17 @@  discard block
 block discarded – undo
7094 7574
 			}
7095 7575
 
7096 7576
 			// If field is an implicit foreign key field
7097
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) $values[$key]='null';
7098
-			if (! empty($this->fields[$key]['foreignkey']) && empty($values[$key])) $values[$key]='null';
7577
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && empty($values[$key])) {
7578
+			    $values[$key]='null';
7579
+			}
7580
+			if (! empty($this->fields[$key]['foreignkey']) && empty($values[$key])) {
7581
+			    $values[$key]='null';
7582
+			}
7099 7583
 		}
7100 7584
 
7101
-		if ($error) return -1;
7585
+		if ($error) {
7586
+		    return -1;
7587
+		}
7102 7588
 
7103 7589
 		$this->db->begin();
7104 7590
 
@@ -7124,7 +7610,9 @@  discard block
 block discarded – undo
7124 7610
 		if (! $error)
7125 7611
 		{
7126 7612
 			$result=$this->insertExtraFields();
7127
-			if ($result < 0) $error++;
7613
+			if ($result < 0) {
7614
+			    $error++;
7615
+			}
7128 7616
 		}
7129 7617
 
7130 7618
 		// Triggers
@@ -7157,15 +7645,24 @@  discard block
 block discarded – undo
7157 7645
 	 */
7158 7646
 	public function fetchCommon($id, $ref = null, $morewhere = '')
7159 7647
 	{
7160
-		if (empty($id) && empty($ref) && empty($morewhere)) return -1;
7648
+		if (empty($id) && empty($ref) && empty($morewhere)) {
7649
+		    return -1;
7650
+		}
7161 7651
 
7162 7652
 		$sql = 'SELECT '.$this->getFieldList();
7163 7653
 		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element;
7164 7654
 
7165
-		if (!empty($id))  $sql.= ' WHERE rowid = '.$id;
7166
-		elseif (!empty($ref)) $sql.= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7167
-		else $sql.=' WHERE 1 = 1';	// usage with empty id and empty ref is very rare
7168
-		if ($morewhere)   $sql.= $morewhere;
7655
+		if (!empty($id)) {
7656
+		    $sql.= ' WHERE rowid = '.$id;
7657
+		} elseif (!empty($ref)) {
7658
+		    $sql.= " WHERE ref = ".$this->quote($ref, $this->fields['ref']);
7659
+		} else {
7660
+		    $sql.=' WHERE 1 = 1';
7661
+		}
7662
+		// usage with empty id and empty ref is very rare
7663
+		if ($morewhere) {
7664
+		    $sql.= $morewhere;
7665
+		}
7169 7666
 		$sql.=' LIMIT 1';	// This is a fetch, to be sure to get only one record
7170 7667
 
7171 7668
 		$res = $this->db->query($sql);
@@ -7176,13 +7673,11 @@  discard block
 block discarded – undo
7176 7673
 			{
7177 7674
 				$this->setVarsFromFetchObj($obj);
7178 7675
 				return $this->id;
7179
-			}
7180
-			else
7676
+			} else
7181 7677
 			{
7182 7678
 				return 0;
7183 7679
 			}
7184
-		}
7185
-		else
7680
+		} else
7186 7681
 		{
7187 7682
 			$this->error = $this->db->lasterror();
7188 7683
 			$this->errors[] = $this->error;
@@ -7206,8 +7701,12 @@  discard block
 block discarded – undo
7206 7701
 		$now=dol_now();
7207 7702
 
7208 7703
 		$fieldvalues = $this->setSaveQuery();
7209
-		if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) $fieldvalues['date_modification']=$this->db->idate($now);
7210
-		if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) $fieldvalues['fk_user_modif']=$user->id;
7704
+		if (array_key_exists('date_modification', $fieldvalues) && empty($fieldvalues['date_modification'])) {
7705
+		    $fieldvalues['date_modification']=$this->db->idate($now);
7706
+		}
7707
+		if (array_key_exists('fk_user_modif', $fieldvalues) && ! ($fieldvalues['fk_user_modif'] > 0)) {
7708
+		    $fieldvalues['fk_user_modif']=$user->id;
7709
+		}
7211 7710
 		unset($fieldvalues['rowid']);	// The field 'rowid' is reserved field name for autoincrement field so we don't need it into update.
7212 7711
 
7213 7712
 		$keys=array();
@@ -7222,8 +7721,14 @@  discard block
 block discarded – undo
7222 7721
 		// Clean and check mandatory
7223 7722
 		foreach($keys as $key)
7224 7723
 		{
7225
-			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') $values[$key]='';		// This is an implicit foreign key field
7226
-			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') $values[$key]='';					// This is an explicit foreign key field
7724
+			if (preg_match('/^integer:/i', $this->fields[$key]['type']) && $values[$key] == '-1') {
7725
+			    $values[$key]='';
7726
+			}
7727
+			// This is an implicit foreign key field
7728
+			if (! empty($this->fields[$key]['foreignkey']) && $values[$key] == '-1') {
7729
+			    $values[$key]='';
7730
+			}
7731
+			// This is an explicit foreign key field
7227 7732
 
7228 7733
 			//var_dump($key.'-'.$values[$key].'-'.($this->fields[$key]['notnull'] == 1));
7229 7734
 			/*
@@ -7303,10 +7808,11 @@  discard block
 block discarded – undo
7303 7808
 					return -1;
7304 7809
 				}
7305 7810
 			}
7306
-		}
7307
-		elseif (! empty($this->fk_element) && ! empty($this->childtables))	// If object has childs linked with a foreign key field, we check all child tables.
7811
+		} elseif (! empty($this->fk_element) && ! empty($this->childtables)) {
7812
+		    // If object has childs linked with a foreign key field, we check all child tables.
7308 7813
 		{
7309
-			$objectisused = $this->isObjectUsed($this->id);
7814
+			$objectisused = $this->isObjectUsed($this->id);
7815
+		}
7310 7816
 			if (! empty($objectisused))
7311 7817
 			{
7312 7818
 				dol_syslog(get_class($this)."::deleteCommon Can't delete record as it has some child", LOG_WARNING);
@@ -7413,7 +7919,9 @@  discard block
 block discarded – undo
7413 7919
      */
7414 7920
     public function trimParameters($parameters)
7415 7921
     {
7416
-        if (!is_array($parameters)) return;
7922
+        if (!is_array($parameters)) {
7923
+            return;
7924
+        }
7417 7925
         foreach ($parameters as $parameter) {
7418 7926
             if (isset($this->$parameter)) {
7419 7927
                 $this->$parameter = trim($this->$parameter);
Please login to merge, or discard this patch.
Base/Menubase.php 1 patch
Spacing   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -83,7 +83,7 @@  discard block
 block discarded – undo
83 83
     public $titre;
84 84
     //public Globals::$langs;
85 85
     public $level;
86
-    public $leftmenu;  //<! Not used
86
+    public $leftmenu; //<! Not used
87 87
     public $perms;
88 88
     public $enabled;
89 89
     //public $user;
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
         $this->type = trim($this->type);
118 118
         $this->mainmenu = trim($this->mainmenu);
119 119
         $this->leftmenu = trim($this->leftmenu);
120
-        $this->fk_menu = (int) $this->fk_menu;          // If -1, fk_mainmenu and fk_leftmenu must be defined
120
+        $this->fk_menu = (int) $this->fk_menu; // If -1, fk_mainmenu and fk_leftmenu must be defined
121 121
         $this->fk_mainmenu = trim($this->fk_mainmenu);
122 122
         $this->fk_leftmenu = trim($this->fk_leftmenu);
123 123
         $this->position = (int) $this->position;
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
         // may use an already used value because its internal cursor does not increase when we do
145 145
         // an insert with a forced id.
146 146
         if (in_array(Globals::$db->type, array('pgsql'))) {
147
-            $sql = "SELECT MAX(rowid) as maxrowid FROM " . MAIN_DB_PREFIX . "menu";
147
+            $sql = "SELECT MAX(rowid) as maxrowid FROM ".MAIN_DB_PREFIX."menu";
148 148
             $resqlrowid = Globals::$db->query($sql);
149 149
             if ($resqlrowid) {
150 150
                 $obj = Globals::$db->fetch_object($resqlrowid);
@@ -155,7 +155,7 @@  discard block
 block discarded – undo
155 155
                     $maxrowid = 1;
156 156
                 }
157 157
 
158
-                $sql = "SELECT setval('" . MAIN_DB_PREFIX . "menu_rowid_seq', " . ($maxrowid) . ")";
158
+                $sql = "SELECT setval('".MAIN_DB_PREFIX."menu_rowid_seq', ".($maxrowid).")";
159 159
                 //print $sql; exit;
160 160
                 $resqlrowidset = Globals::$db->query($sql);
161 161
                 if (!$resqlrowidset) {
@@ -168,12 +168,12 @@  discard block
 block discarded – undo
168 168
 
169 169
         // Check that entry does not exists yet on key menu_handler-fk_menu-position-url-entity, to avoid errors with postgresql
170 170
         $sql = "SELECT count(*)";
171
-        $sql .= " FROM " . MAIN_DB_PREFIX . "menu";
172
-        $sql .= " WHERE menu_handler = '" . Globals::$db->escape($this->menu_handler) . "'";
173
-        $sql .= " AND fk_menu = " . ((int) $this->fk_menu);
174
-        $sql .= " AND position = " . ((int) $this->position);
175
-        $sql .= " AND url = '" . Globals::$db->escape($this->url) . "'";
176
-        $sql .= " AND entity = " . Globals::$conf->entity;
171
+        $sql .= " FROM ".MAIN_DB_PREFIX."menu";
172
+        $sql .= " WHERE menu_handler = '".Globals::$db->escape($this->menu_handler)."'";
173
+        $sql .= " AND fk_menu = ".((int) $this->fk_menu);
174
+        $sql .= " AND position = ".((int) $this->position);
175
+        $sql .= " AND url = '".Globals::$db->escape($this->url)."'";
176
+        $sql .= " AND entity = ".Globals::$conf->entity;
177 177
 
178 178
         $result = Globals::$db->query($sql);
179 179
         if ($result) {
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
 
182 182
             if ($row[0] == 0) {   // If not found
183 183
                 // Insert request
184
-                $sql = "INSERT INTO " . MAIN_DB_PREFIX . "menu(";
184
+                $sql = "INSERT INTO ".MAIN_DB_PREFIX."menu(";
185 185
                 $sql .= "menu_handler,";
186 186
                 $sql .= "entity,";
187 187
                 $sql .= "module,";
@@ -200,38 +200,38 @@  discard block
 block discarded – undo
200 200
                 $sql .= "enabled,";
201 201
                 $sql .= "usertype";
202 202
                 $sql .= ") VALUES (";
203
-                $sql .= " '" . Globals::$db->escape($this->menu_handler) . "',";
204
-                $sql .= " '" . Globals::$db->escape(Globals::$conf->entity) . "',";
205
-                $sql .= " '" . Globals::$db->escape($this->module) . "',";
206
-                $sql .= " '" . Globals::$db->escape($this->type) . "',";
207
-                $sql .= " " . ($this->mainmenu ? "'" . Globals::$db->escape($this->mainmenu) . "'" : "''") . ",";    // Can't be null
208
-                $sql .= " " . ($this->leftmenu ? "'" . Globals::$db->escape($this->leftmenu) . "'" : "null") . ",";
209
-                $sql .= " " . ((int) $this->fk_menu) . ",";
210
-                $sql .= " " . ($this->fk_mainmenu ? "'" . Globals::$db->escape($this->fk_mainmenu) . "'" : "null") . ",";
211
-                $sql .= " " . ($this->fk_leftmenu ? "'" . Globals::$db->escape($this->fk_leftmenu) . "'" : "null") . ",";
212
-                $sql .= " " . ((int) $this->position) . ",";
213
-                $sql .= " '" . Globals::$db->escape($this->url) . "',";
214
-                $sql .= " '" . Globals::$db->escape($this->target) . "',";
215
-                $sql .= " '" . Globals::$db->escape($this->titre) . "',";
216
-                $sql .= " '" . Globals::$db->escape($this->langs) . "',";
217
-                $sql .= " '" . Globals::$db->escape($this->perms) . "',";
218
-                $sql .= " '" . Globals::$db->escape($this->enabled) . "',";
219
-                $sql .= " '" . Globals::$db->escape($this->user) . "'";
203
+                $sql .= " '".Globals::$db->escape($this->menu_handler)."',";
204
+                $sql .= " '".Globals::$db->escape(Globals::$conf->entity)."',";
205
+                $sql .= " '".Globals::$db->escape($this->module)."',";
206
+                $sql .= " '".Globals::$db->escape($this->type)."',";
207
+                $sql .= " ".($this->mainmenu ? "'".Globals::$db->escape($this->mainmenu)."'" : "''").","; // Can't be null
208
+                $sql .= " ".($this->leftmenu ? "'".Globals::$db->escape($this->leftmenu)."'" : "null").",";
209
+                $sql .= " ".((int) $this->fk_menu).",";
210
+                $sql .= " ".($this->fk_mainmenu ? "'".Globals::$db->escape($this->fk_mainmenu)."'" : "null").",";
211
+                $sql .= " ".($this->fk_leftmenu ? "'".Globals::$db->escape($this->fk_leftmenu)."'" : "null").",";
212
+                $sql .= " ".((int) $this->position).",";
213
+                $sql .= " '".Globals::$db->escape($this->url)."',";
214
+                $sql .= " '".Globals::$db->escape($this->target)."',";
215
+                $sql .= " '".Globals::$db->escape($this->titre)."',";
216
+                $sql .= " '".Globals::$db->escape($this->langs)."',";
217
+                $sql .= " '".Globals::$db->escape($this->perms)."',";
218
+                $sql .= " '".Globals::$db->escape($this->enabled)."',";
219
+                $sql .= " '".Globals::$db->escape($this->user)."'";
220 220
                 $sql .= ")";
221 221
 
222
-                AlDolUtils::dol_syslog(get_class($this) . "::create", LOG_DEBUG);
222
+                AlDolUtils::dol_syslog(get_class($this)."::create", LOG_DEBUG);
223 223
                 $resql = Globals::$db->query($sql);
224 224
                 if ($resql) {
225
-                    $this->id = Globals::$db->last_insert_id(MAIN_DB_PREFIX . "menu");
226
-                    AlDolUtils::dol_syslog(get_class($this) . "::create record added has rowid=" . $this->id, LOG_DEBUG);
225
+                    $this->id = Globals::$db->last_insert_id(MAIN_DB_PREFIX."menu");
226
+                    AlDolUtils::dol_syslog(get_class($this)."::create record added has rowid=".$this->id, LOG_DEBUG);
227 227
 
228 228
                     return $this->id;
229 229
                 } else {
230
-                    $this->error = "Error " . Globals::$db->lasterror();
230
+                    $this->error = "Error ".Globals::$db->lasterror();
231 231
                     return -1;
232 232
                 }
233 233
             } else {
234
-                AlDolUtils::dol_syslog(get_class($this) . "::create menu entry already exists", LOG_WARNING);
234
+                AlDolUtils::dol_syslog(get_class($this)."::create menu entry already exists", LOG_WARNING);
235 235
                 $this->error = 'Error Menu entry already exists';
236 236
                 return 0;
237 237
             }
@@ -272,29 +272,29 @@  discard block
 block discarded – undo
272 272
         // Check parameters
273 273
         // Put here code to add control on parameters values
274 274
         // Update request
275
-        $sql = "UPDATE " . MAIN_DB_PREFIX . "menu SET";
276
-        $sql .= " menu_handler='" . Globals::$db->escape($this->menu_handler) . "',";
277
-        $sql .= " module='" . Globals::$db->escape($this->module) . "',";
278
-        $sql .= " type='" . Globals::$db->escape($this->type) . "',";
279
-        $sql .= " mainmenu='" . Globals::$db->escape($this->mainmenu) . "',";
280
-        $sql .= " leftmenu='" . Globals::$db->escape($this->leftmenu) . "',";
281
-        $sql .= " fk_menu=" . $this->fk_menu . ",";
282
-        $sql .= " fk_mainmenu=" . ($this->fk_mainmenu ? "'" . Globals::$db->escape($this->fk_mainmenu) . "'" : "null") . ",";
283
-        $sql .= " fk_leftmenu=" . ($this->fk_leftmenu ? "'" . Globals::$db->escape($this->fk_leftmenu) . "'" : "null") . ",";
284
-        $sql .= " position=" . ($this->position > 0 ? $this->position : 0) . ",";
285
-        $sql .= " url='" . Globals::$db->escape($this->url) . "',";
286
-        $sql .= " target='" . Globals::$db->escape($this->target) . "',";
287
-        $sql .= " titre='" . Globals::$db->escape($this->titre) . "',";
288
-        $sql .= " langs='" . Globals::$db->escape($this->langs) . "',";
289
-        $sql .= " perms='" . Globals::$db->escape($this->perms) . "',";
290
-        $sql .= " enabled='" . Globals::$db->escape($this->enabled) . "',";
291
-        $sql .= " usertype='" . Globals::$db->escape($this->user) . "'";
292
-        $sql .= " WHERE rowid=" . $this->id;
293
-
294
-        AlDolUtils::dol_syslog(get_class($this) . "::update", LOG_DEBUG);
275
+        $sql = "UPDATE ".MAIN_DB_PREFIX."menu SET";
276
+        $sql .= " menu_handler='".Globals::$db->escape($this->menu_handler)."',";
277
+        $sql .= " module='".Globals::$db->escape($this->module)."',";
278
+        $sql .= " type='".Globals::$db->escape($this->type)."',";
279
+        $sql .= " mainmenu='".Globals::$db->escape($this->mainmenu)."',";
280
+        $sql .= " leftmenu='".Globals::$db->escape($this->leftmenu)."',";
281
+        $sql .= " fk_menu=".$this->fk_menu.",";
282
+        $sql .= " fk_mainmenu=".($this->fk_mainmenu ? "'".Globals::$db->escape($this->fk_mainmenu)."'" : "null").",";
283
+        $sql .= " fk_leftmenu=".($this->fk_leftmenu ? "'".Globals::$db->escape($this->fk_leftmenu)."'" : "null").",";
284
+        $sql .= " position=".($this->position > 0 ? $this->position : 0).",";
285
+        $sql .= " url='".Globals::$db->escape($this->url)."',";
286
+        $sql .= " target='".Globals::$db->escape($this->target)."',";
287
+        $sql .= " titre='".Globals::$db->escape($this->titre)."',";
288
+        $sql .= " langs='".Globals::$db->escape($this->langs)."',";
289
+        $sql .= " perms='".Globals::$db->escape($this->perms)."',";
290
+        $sql .= " enabled='".Globals::$db->escape($this->enabled)."',";
291
+        $sql .= " usertype='".Globals::$db->escape($this->user)."'";
292
+        $sql .= " WHERE rowid=".$this->id;
293
+
294
+        AlDolUtils::dol_syslog(get_class($this)."::update", LOG_DEBUG);
295 295
         $resql = Globals::$db->query($sql);
296 296
         if (!$resql) {
297
-            $this->error = "Error " . Globals::$db->lasterror();
297
+            $this->error = "Error ".Globals::$db->lasterror();
298 298
             return -1;
299 299
         }
300 300
 
@@ -332,10 +332,10 @@  discard block
 block discarded – undo
332 332
         $sql .= " t.enabled,";
333 333
         $sql .= " t.usertype as user,";
334 334
         $sql .= " t.tms";
335
-        $sql .= " FROM " . MAIN_DB_PREFIX . "menu as t";
336
-        $sql .= " WHERE t.rowid = " . $id;
335
+        $sql .= " FROM ".MAIN_DB_PREFIX."menu as t";
336
+        $sql .= " WHERE t.rowid = ".$id;
337 337
 
338
-        AlDolUtils::dol_syslog(get_class($this) . "::fetch", LOG_DEBUG);
338
+        AlDolUtils::dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
339 339
         $resql = Globals::$db->query($sql);
340 340
         if ($resql) {
341 341
             if (Globals::$db->num_rows($resql)) {
@@ -366,7 +366,7 @@  discard block
 block discarded – undo
366 366
 
367 367
             return 1;
368 368
         } else {
369
-            $this->error = "Error " . Globals::$db->lasterror();
369
+            $this->error = "Error ".Globals::$db->lasterror();
370 370
             return -1;
371 371
         }
372 372
     }
@@ -381,13 +381,13 @@  discard block
 block discarded – undo
381 381
     {
382 382
         // global $conf, Globals::$langs;
383 383
 
384
-        $sql = "DELETE FROM " . MAIN_DB_PREFIX . "menu";
385
-        $sql .= " WHERE rowid=" . $this->id;
384
+        $sql = "DELETE FROM ".MAIN_DB_PREFIX."menu";
385
+        $sql .= " WHERE rowid=".$this->id;
386 386
 
387
-        AlDolUtils::dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
387
+        AlDolUtils::dol_syslog(get_class($this)."::delete", LOG_DEBUG);
388 388
         $resql = Globals::$db->query($sql);
389 389
         if (!$resql) {
390
-            $this->error = "Error " . Globals::$db->lasterror();
390
+            $this->error = "Error ".Globals::$db->lasterror();
391 391
             return -1;
392 392
         }
393 393
 
@@ -438,8 +438,8 @@  discard block
 block discarded – undo
438 438
         // global Globals::$langs, $user, $conf; // To export to AlDolUtils::dol_eval function
439 439
         // global $mainmenu, $leftmenu;  // To export to AlDolUtils::dol_eval function
440 440
 
441
-        $mainmenu = $mymainmenu;  // To export to AlDolUtils::dol_eval function
442
-        $leftmenu = $myleftmenu;  // To export to AlDolUtils::dol_eval function
441
+        $mainmenu = $mymainmenu; // To export to AlDolUtils::dol_eval function
442
+        $leftmenu = $myleftmenu; // To export to AlDolUtils::dol_eval function
443 443
 
444 444
         $newTabMenu = array();
445 445
         foreach ($tabMenu as $val) {
@@ -468,8 +468,8 @@  discard block
 block discarded – undo
468 468
         //global Globals::$langs, $user, $conf;  // To export to AlDolUtils::dol_eval function
469 469
         // global $mainmenu, $leftmenu;  // To export to AlDolUtils::dol_eval function
470 470
 
471
-        $mainmenu = $mymainmenu;  // To export to AlDolUtils::dol_eval function
472
-        $leftmenu = $myleftmenu;  // To export to AlDolUtils::dol_eval function
471
+        $mainmenu = $mymainmenu; // To export to AlDolUtils::dol_eval function
472
+        $leftmenu = $myleftmenu; // To export to AlDolUtils::dol_eval function
473 473
         // Detect what is top mainmenu id
474 474
         $menutopid = '';
475 475
         foreach ($tabMenu as $key => $val) {
@@ -524,7 +524,7 @@  discard block
 block discarded – undo
524 524
                     if ($found) {
525 525
                         $this->newmenu->insert($lastid, $val['url'], $val['titre'], $searchlastsub, $val['perms'], $val['target'], $val['mainmenu'], $val['leftmenu'], $val['position']);
526 526
                     } else {
527
-                        AlDolUtils::dol_syslog("Error. Modules " . $val['module'] . " has defined a menu entry with a parent='fk_mainmenu=" . $val['fk_leftmenu'] . ",fk_leftmenu=" . $val['fk_leftmenu'] . "' and position=" . $val['position'] . '. The parent was not found. May be you forget it into your definition of menu, or may be the parent has a "position" that is after the child (fix field "position" of parent or child in this case).', LOG_WARNING);
527
+                        AlDolUtils::dol_syslog("Error. Modules ".$val['module']." has defined a menu entry with a parent='fk_mainmenu=".$val['fk_leftmenu'].",fk_leftmenu=".$val['fk_leftmenu']."' and position=".$val['position'].'. The parent was not found. May be you forget it into your definition of menu, or may be the parent has a "position" that is after the child (fix field "position" of parent or child in this case).', LOG_WARNING);
528 528
                         //print "Parent menu not found !!<br>";
529 529
                     }
530 530
                 }
@@ -550,13 +550,13 @@  discard block
 block discarded – undo
550 550
         //global $mainmenu, $leftmenu; // To export to AlDolUtils::dol_eval function
551 551
 
552 552
         $menutopid = 0;
553
-        $mainmenu = $mymainmenu;  // To export to AlDolUtils::dol_eval function
554
-        $leftmenu = $myleftmenu;  // To export to AlDolUtils::dol_eval function
553
+        $mainmenu = $mymainmenu; // To export to AlDolUtils::dol_eval function
554
+        $leftmenu = $myleftmenu; // To export to AlDolUtils::dol_eval function
555 555
 
556 556
         $sql = "SELECT m.rowid, m.type, m.module, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.url, m.titre, m.langs, m.perms, m.enabled, m.target, m.mainmenu, m.leftmenu, m.position";
557
-        $sql .= " FROM " . MAIN_DB_PREFIX . "menu as m";
558
-        $sql .= " WHERE m.entity IN (0," . Globals::$conf->entity . ")";
559
-        $sql .= " AND m.menu_handler IN ('" . $menu_handler . "','all')";
557
+        $sql .= " FROM ".MAIN_DB_PREFIX."menu as m";
558
+        $sql .= " WHERE m.entity IN (0,".Globals::$conf->entity.")";
559
+        $sql .= " AND m.menu_handler IN ('".$menu_handler."','all')";
560 560
         if ($type_user == 0) {
561 561
             $sql .= " AND m.usertype IN (0,2)";
562 562
         }
@@ -567,7 +567,7 @@  discard block
 block discarded – undo
567 567
         //print $sql;
568 568
         //$tmp1=microtime(true);
569 569
         //print '>>> 1 0<br>';
570
-        AlDolUtils::dol_syslog(get_class($this) . "::menuLoad mymainmenu=" . $mymainmenu . " myleftmenu=" . $myleftmenu . " type_user=" . $type_user . " menu_handler=" . $menu_handler . " tabMenu size=" . count($tabMenu) . "", LOG_DEBUG);
570
+        AlDolUtils::dol_syslog(get_class($this)."::menuLoad mymainmenu=".$mymainmenu." myleftmenu=".$myleftmenu." type_user=".$type_user." menu_handler=".$menu_handler." tabMenu size=".count($tabMenu)."", LOG_DEBUG);
571 571
         $resql = Config::$dbEngine->select($sql);
572 572
         if (is_array($resql)) {
573 573
             $a = 0;
@@ -600,7 +600,7 @@  discard block
 block discarded – undo
600 600
 
601 601
                 // Define $title
602 602
                 if ($enabled) {
603
-                    $title = Globals::$langs->trans($menu['titre']);  // If $menu['titre'] start with $, a AlDolUtils::dol_eval is done.
603
+                    $title = Globals::$langs->trans($menu['titre']); // If $menu['titre'] start with $, a AlDolUtils::dol_eval is done.
604 604
                     //var_dump($title.'-'.$menu['titre']);
605 605
                     if ($title == $menu['titre']) {   // Translation not found
606 606
                         if (!empty($menu['langs'])) {    // If there is a dedicated translation file
@@ -613,7 +613,7 @@  discard block
 block discarded – undo
613 613
 
614 614
                         if (preg_match("/\//", $menu['titre'])) { // To manage translation when title is string1/string2
615 615
                             $tab_titre = explode("/", $menu['titre']);
616
-                            $title = Globals::$langs->trans($tab_titre[0]) . "/" . Globals::$langs->trans($tab_titre[1]);
616
+                            $title = Globals::$langs->trans($tab_titre[0])."/".Globals::$langs->trans($tab_titre[1]);
617 617
                         } else if (preg_match('/\|\|/', $menu['titre'])) { // To manage different translation (Title||AltTitle@ConditionForAltTitle)
618 618
                             $tab_title = explode("||", $menu['titre']);
619 619
                             $alt_title = explode("@", $tab_title[1]);
@@ -632,9 +632,9 @@  discard block
 block discarded – undo
632 632
                     $tabMenu[$b]['url'] = $menu['url'];
633 633
                     if (!preg_match("/^(http:\/\/|https:\/\/)/i", $tabMenu[$b]['url'])) {
634 634
                         if (preg_match('/\?/', $tabMenu[$b]['url'])) {
635
-                            $tabMenu[$b]['url'] .= '&amp;idmenu=' . $menu['rowid'];
635
+                            $tabMenu[$b]['url'] .= '&amp;idmenu='.$menu['rowid'];
636 636
                         } else {
637
-                            $tabMenu[$b]['url'] .= '?idmenu=' . $menu['rowid'];
637
+                            $tabMenu[$b]['url'] .= '?idmenu='.$menu['rowid'];
638 638
                         }
639 639
                     }
640 640
                     $tabMenu[$b]['titre'] = $title;
Please login to merge, or discard this patch.
Base/AlixarController.php 1 patch
Spacing   +89 added lines, -89 removed lines patch added patch discarded remove patch
@@ -52,13 +52,13 @@  discard block
 block discarded – undo
52 52
         // Note: the function dol_getprefix may have been redefined to return a different key to manage another area to protect.
53 53
         $prefix = AlDolUtils::dol_getprefix('');
54 54
 
55
-        $this->sessionname = 'DOLSESSID_' . $prefix;
56
-        $sessiontimeout = 'DOLSESSTIMEOUT_' . $prefix;
55
+        $this->sessionname = 'DOLSESSID_'.$prefix;
56
+        $sessiontimeout = 'DOLSESSTIMEOUT_'.$prefix;
57 57
         if (!empty($_COOKIE[$sessiontimeout])) {
58 58
             ini_set('session.gc_maxlifetime', $_COOKIE[$sessiontimeout]);
59 59
         }
60 60
         session_name($this->sessionname);
61
-        session_set_cookie_params(0, '/', null, false, true);   // Add tag httponly on session cookie (same as setting session.cookie_httponly into php.ini). Must be called before the session_start.
61
+        session_set_cookie_params(0, '/', null, false, true); // Add tag httponly on session cookie (same as setting session.cookie_httponly into php.ini). Must be called before the session_start.
62 62
         // This create lock, released when session_write_close() or end of page.
63 63
         // We need this lock as long as we read/write $_SESSION ['vars']. We can remove lock when finished.
64 64
         if (!defined('NOSESSION')) {
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
             Globals::$conf->browser->name = $tmp['browsername'];
82 82
             Globals::$conf->browser->os = $tmp['browseros'];
83 83
             Globals::$conf->browser->version = $tmp['browserversion'];
84
-            Globals::$conf->browser->layout = $tmp['layout'];     // 'classic', 'phone', 'tablet'
84
+            Globals::$conf->browser->layout = $tmp['layout']; // 'classic', 'phone', 'tablet'
85 85
             //var_dump(Globals::$conf->browser);
86 86
 
87 87
             if (Globals::$conf->browser->layout == 'phone') {
@@ -102,18 +102,18 @@  discard block
 block discarded – undo
102 102
                         $newurl = preg_replace('/^http:/i', 'https:', $_SERVER["SCRIPT_URI"]);
103 103
                     }
104 104
                 } else { // Check HTTPS environment variable (Apache/mod_ssl only)
105
-                    $newurl = preg_replace('/^http:/i', 'https:', DOL_MAIN_URL_ROOT) . $_SERVER["REQUEST_URI"];
105
+                    $newurl = preg_replace('/^http:/i', 'https:', DOL_MAIN_URL_ROOT).$_SERVER["REQUEST_URI"];
106 106
                 }
107 107
             } else {
108 108
                 // Check HTTPS environment variable (Apache/mod_ssl only)
109
-                $newurl = Globals::$conf->file->main_force_https . $_SERVER["REQUEST_URI"];
109
+                $newurl = Globals::$conf->file->main_force_https.$_SERVER["REQUEST_URI"];
110 110
             }
111 111
             // Start redirect
112 112
             if ($newurl) {
113
-                AlDolUtils::dol_syslog("main.inc: dolibarr_main_force_https is on, we make a redirect to " . $newurl);
113
+                AlDolUtils::dol_syslog("main.inc: dolibarr_main_force_https is on, we make a redirect to ".$newurl);
114 114
                 echo $newurl;
115 115
                 throw Exception('x');
116
-                header("Location: " . $newurl);
116
+                header("Location: ".$newurl);
117 117
                 exit;
118 118
             } else {
119 119
                 AlDolUtils::dol_syslog("main.inc: dolibarr_main_force_https is on but we failed to forge new https url so no redirect is done", LOG_WARNING);
@@ -138,29 +138,29 @@  discard block
 block discarded – undo
138 138
 
139 139
         // Loading of additional presentation includes
140 140
         if (!defined('NOREQUIREHTML')) {
141
-            require_once DOL_BASE_PATH . '/core/class/html.form.class.php';     // Need 660ko memory (800ko in 2.2)
141
+            require_once DOL_BASE_PATH.'/core/class/html.form.class.php'; // Need 660ko memory (800ko in 2.2)
142 142
         }
143 143
         if (!defined('NOREQUIREAJAX') && Globals::$conf->use_javascript_ajax) {
144
-            require_once DOL_BASE_PATH . '/core/lib/ajax.lib.php'; // Need 22ko memory
144
+            require_once DOL_BASE_PATH.'/core/lib/ajax.lib.php'; // Need 22ko memory
145 145
         }
146 146
         // If install or upgrade process not done or not completely finished, we call the install page.
147 147
         if (!empty(Globals::$conf->global->MAIN_NOT_INSTALLED) || !empty(Globals::$conf->global->MAIN_NOT_UPGRADED)) {
148 148
             AlDolUtils::dol_syslog("main.inc: A previous install or upgrade was not complete. Redirect to install page.", LOG_WARNING);
149 149
             throw Exception('x');
150
-            header("Location: " . DOL_BASE_URI . "/install/index.php");
150
+            header("Location: ".DOL_BASE_URI."/install/index.php");
151 151
             exit;
152 152
         }
153 153
         // If an upgrade process is required, we call the install page.
154 154
         if ((!empty(Globals::$conf->global->MAIN_VERSION_LAST_UPGRADE) && (Globals::$conf->global->MAIN_VERSION_LAST_UPGRADE != DOL_VERSION)) || (empty(Globals::$conf->global->MAIN_VERSION_LAST_UPGRADE) && !empty(Globals::$conf->global->MAIN_VERSION_LAST_INSTALL) && (Globals::$conf->global->MAIN_VERSION_LAST_INSTALL != DOL_VERSION))) {
155 155
             $versiontocompare = empty(Globals::$conf->global->MAIN_VERSION_LAST_UPGRADE) ? Globals::$conf->global->MAIN_VERSION_LAST_INSTALL : Globals::$conf->global->MAIN_VERSION_LAST_UPGRADE;
156
-            require_once DOL_BASE_PATH . '/core/lib/admin.lib.php';
156
+            require_once DOL_BASE_PATH.'/core/lib/admin.lib.php';
157 157
             $dolibarrversionlastupgrade = preg_split('/[.-]/', $versiontocompare);
158 158
             $dolibarrversionprogram = preg_split('/[.-]/', DOL_VERSION);
159 159
             $rescomp = versioncompare($dolibarrversionprogram, $dolibarrversionlastupgrade);
160 160
             if ($rescomp > 0) {   // Programs have a version higher than database. We did not add "&& $rescomp < 3" because we want upgrade process for build upgrades
161
-                AlDolUtils::dol_syslog("main.inc: database version " . $versiontocompare . " is lower than programs version " . DOL_VERSION . ". Redirect to install page.", LOG_WARNING);
161
+                AlDolUtils::dol_syslog("main.inc: database version ".$versiontocompare." is lower than programs version ".DOL_VERSION.". Redirect to install page.", LOG_WARNING);
162 162
                 throw Exception('x');
163
-                header("Location: " . DOL_BASE_URI . "/install/index.php");
163
+                header("Location: ".DOL_BASE_URI."/install/index.php");
164 164
                 exit;
165 165
             }
166 166
         }
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
             }
185 185
             if ($_SERVER['REQUEST_METHOD'] === 'POST') {  // This test must be after loading $_SESSION['token'].
186 186
                 if (AlDolUtils::GETPOST('token', 'alpha') != $_SESSION['token']) {
187
-                    AlDolUtils::dol_syslog("Invalid token in " . $_SERVER['HTTP_REFERER'] . ", action=" . AlDolUtils::GETPOST('action', 'aZ09') . ", _POST['token']=" . AlDolUtils::GETPOST('token', 'alpha') . ", _SESSION['token']=" . $_SESSION['token'], LOG_WARNING);
187
+                    AlDolUtils::dol_syslog("Invalid token in ".$_SERVER['HTTP_REFERER'].", action=".AlDolUtils::GETPOST('action', 'aZ09').", _POST['token']=".AlDolUtils::GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING);
188 188
                     //print 'Unset POST by CSRF protection in main.inc.php.';	// Do not output anything because this create problems when using the BACK button on browsers.
189 189
                     unset($_POST);
190 190
                 }
@@ -217,7 +217,7 @@  discard block
 block discarded – undo
217 217
         if (AlDolUtils::GETPOST('theme', 'alpha')) {
218 218
             Globals::$conf->theme = AlDolUtils::GETPOST('theme', 'alpha', 1);
219 219
             // Globals::$conf->css = "/theme/" . Globals::$conf->theme . "/style.css.php";
220
-            Globals::$conf->css = '?controller=theme/' . Globals::$conf->theme . '&method=style.css';
220
+            Globals::$conf->css = '?controller=theme/'.Globals::$conf->theme.'&method=style.css';
221 221
         }
222 222
 
223 223
 
@@ -267,7 +267,7 @@  discard block
 block discarded – undo
267 267
         if (!empty(Globals::$conf->dol_use_jmobile) && in_array(Globals::$conf->theme, array('bureau2crea', 'cameleo', 'amarok'))) {
268 268
             Globals::$conf->theme = 'eldy';
269 269
             // Globals::$conf->css = "/theme/" . Globals::$conf->theme . "/style.css.php";
270
-            Globals::$conf->css = '?controller=theme/' . Globals::$conf->theme . '&method=style.css';
270
+            Globals::$conf->css = '?controller=theme/'.Globals::$conf->theme.'&method=style.css';
271 271
         }
272 272
 
273 273
         if (!defined('NOREQUIRETRAN')) {
@@ -304,7 +304,7 @@  discard block
 block discarded – undo
304 304
         }
305 305
 
306 306
 
307
-        AlDolUtils::dol_syslog("--- Access to " . $_SERVER["PHP_SELF"] . ' - action=' . AlDolUtils::GETPOST('action', 'az09') . ', massaction=' . AlDolUtils::GETPOST('massaction', 'az09'));
307
+        AlDolUtils::dol_syslog("--- Access to ".$_SERVER["PHP_SELF"].' - action='.AlDolUtils::GETPOST('action', 'az09').', massaction='.AlDolUtils::GETPOST('massaction', 'az09'));
308 308
         //Another call for easy debugg
309 309
         //dol_syslog("Access to ".$_SERVER["PHP_SELF"].' GET='.join(',',array_keys($_GET)).'->'.join(',',$_GET).' POST:'.join(',',array_keys($_POST)).'->'.join(',',$_POST));
310 310
         // Load main languages files
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
         // Define some constants used for style of arrays
317 317
         $bc = array(0 => 'class="impair"', 1 => 'class="pair"');
318 318
         $bcdd = array(0 => 'class="drag drop oddeven"', 1 => 'class="drag drop oddeven"');
319
-        $bcnd = array(0 => 'class="nodrag nodrop nohover"', 1 => 'class="nodrag nodrop nohoverpair"');  // Used for tr to add new lines
319
+        $bcnd = array(0 => 'class="nodrag nodrop nohover"', 1 => 'class="nodrag nodrop nohoverpair"'); // Used for tr to add new lines
320 320
         $bctag = array(0 => 'class="impair tagtr"', 1 => 'class="pair tagtr"');
321 321
 
322 322
         // Define messages variables
@@ -364,7 +364,7 @@  discard block
 block discarded – undo
364 364
 // Load the menu manager (only if not already done)
365 365
             $file_menu = Globals::$conf->standard_menu;
366 366
             if (AlDolUtils::GETPOST('menu', 'alpha')) {
367
-                $file_menu = AlDolUtils::GETPOST('menu', 'alpha');     // example: menu=eldy_menu.php
367
+                $file_menu = AlDolUtils::GETPOST('menu', 'alpha'); // example: menu=eldy_menu.php
368 368
             }
369 369
             if (!class_exists('MenuManager')) {
370 370
                 $menufound = 0;
@@ -376,7 +376,7 @@  discard block
 block discarded – undo
376 376
                     }
377 377
                 }
378 378
                 if (!class_exists('MenuManager')) { // If failed to include, we try with standard eldy_menu.php
379
-                    AlDolUtils::dol_syslog("You define a menu manager '" . $file_menu . "' that can not be loaded.", LOG_WARNING);
379
+                    AlDolUtils::dol_syslog("You define a menu manager '".$file_menu."' that can not be loaded.", LOG_WARNING);
380 380
                     $file_menu = 'eldy_menu.php';
381 381
                     // include_once DOL_DOCUMENT_ROOT . "/core/menus/standard/" . $file_menu;
382 382
                 }
@@ -420,7 +420,7 @@  discard block
 block discarded – undo
420 420
 
421 421
         // This is to make Dolibarr working with Plesk
422 422
         if (!empty($_SERVER['DOCUMENT_ROOT']) && substr($_SERVER['DOCUMENT_ROOT'], -6) !== 'htdocs') {
423
-            set_include_path($_SERVER['DOCUMENT_ROOT'] . '/htdocs');
423
+            set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs');
424 424
         }
425 425
 
426 426
         // If there is a POST parameter to tell to save automatically some POST parameters into cookies, we do it.
@@ -431,7 +431,7 @@  discard block
 block discarded – undo
431 431
             $tmplist = explode(',', $tmpautoset[1]);
432 432
             $cookiearrayvalue = array();
433 433
             foreach ($tmplist as $tmpkey) {
434
-                $postkey = $tmpautoset[0] . '_' . $tmpkey;
434
+                $postkey = $tmpautoset[0].'_'.$tmpkey;
435 435
 //var_dump('tmpkey='.$tmpkey.' postkey='.$postkey.' value='.$_POST[$postkey]);
436 436
                 if (!empty($_POST[$postkey])) {
437 437
                     $cookiearrayvalue[$tmpkey] = $_POST[$postkey];
@@ -492,8 +492,8 @@  discard block
 block discarded – undo
492 492
             $inj += preg_match('/insert\s+into/i', $val);
493 493
             $inj += preg_match('/select\s+from/i', $val);
494 494
             $inj += preg_match('/into\s+(outfile|dumpfile)/i', $val);
495
-            $inj += preg_match('/user\s*\(/i', $val);      // avoid to use function user() that return current database login
496
-            $inj += preg_match('/information_schema/i', $val);    // avoid to use request that read information_schema database
495
+            $inj += preg_match('/user\s*\(/i', $val); // avoid to use function user() that return current database login
496
+            $inj += preg_match('/information_schema/i', $val); // avoid to use request that read information_schema database
497 497
         }
498 498
         if ($type == 3) {
499 499
             $inj += preg_match('/select|update|delete|replace|group\s+by|concat|count|from/i', $val);
@@ -517,15 +517,15 @@  discard block
 block discarded – undo
517 517
             $inj += preg_match('/<style/i', $val);
518 518
         }
519 519
         $inj += preg_match('/base[\s]+href/si', $val);
520
-        $inj += preg_match('/<.*onmouse/si', $val);       // onmousexxx can be set on img or any html tag like <img title='...' onmouseover=alert(1)>
521
-        $inj += preg_match('/onerror\s*=/i', $val);       // onerror can be set on img or any html tag like <img title='...' onerror = alert(1)>
522
-        $inj += preg_match('/onfocus\s*=/i', $val);       // onfocus can be set on input text html tag like <input type='text' value='...' onfocus = alert(1)>
523
-        $inj += preg_match('/onload\s*=/i', $val);        // onload can be set on svg tag <svg/onload=alert(1)> or other tag like body <body onload=alert(1)>
524
-        $inj += preg_match('/onloadstart\s*=/i', $val);   // onload can be set on audio tag <audio onloadstart=alert(1)>
525
-        $inj += preg_match('/onclick\s*=/i', $val);       // onclick can be set on img text html tag like <img onclick = alert(1)>
526
-        $inj += preg_match('/onscroll\s*=/i', $val);      // onscroll can be on textarea
520
+        $inj += preg_match('/<.*onmouse/si', $val); // onmousexxx can be set on img or any html tag like <img title='...' onmouseover=alert(1)>
521
+        $inj += preg_match('/onerror\s*=/i', $val); // onerror can be set on img or any html tag like <img title='...' onerror = alert(1)>
522
+        $inj += preg_match('/onfocus\s*=/i', $val); // onfocus can be set on input text html tag like <input type='text' value='...' onfocus = alert(1)>
523
+        $inj += preg_match('/onload\s*=/i', $val); // onload can be set on svg tag <svg/onload=alert(1)> or other tag like body <body onload=alert(1)>
524
+        $inj += preg_match('/onloadstart\s*=/i', $val); // onload can be set on audio tag <audio onloadstart=alert(1)>
525
+        $inj += preg_match('/onclick\s*=/i', $val); // onclick can be set on img text html tag like <img onclick = alert(1)>
526
+        $inj += preg_match('/onscroll\s*=/i', $val); // onscroll can be on textarea
527 527
 //$inj += preg_match('/on[A-Z][a-z]+\*=/', $val);   // To lock event handlers onAbort(), ...
528
-        $inj += preg_match('/&#58;|&#0000058|&#x3A/i', $val);  // refused string ':' encoded (no reason to have it encoded) to lock 'javascript:...'
528
+        $inj += preg_match('/&#58;|&#0000058|&#x3A/i', $val); // refused string ':' encoded (no reason to have it encoded) to lock 'javascript:...'
529 529
 //if ($type == 1)
530 530
 //{
531 531
         $inj += preg_match('/javascript:/i', $val);
@@ -533,10 +533,10 @@  discard block
 block discarded – undo
533 533
 //}
534 534
 // For XSS Injection done by adding javascript closing html tags like with onmousemove, etc... (closing a src or href tag with not cleaned param)
535 535
         if ($type == 1) {
536
-            $inj += preg_match('/"/i', $val);  // We refused " in GET parameters value
536
+            $inj += preg_match('/"/i', $val); // We refused " in GET parameters value
537 537
         }
538 538
         if ($type == 2) {
539
-            $inj += preg_match('/[;"]/', $val);  // PHP_SELF is a file system path. It can contains spaces.
539
+            $inj += preg_match('/[;"]/', $val); // PHP_SELF is a file system path. It can contains spaces.
540 540
         }
541 541
         return $inj;
542 542
     }
@@ -555,7 +555,7 @@  discard block
 block discarded – undo
555 555
                 if ($this->analyseVarsForSqlAndScriptsInjection($key, $type) && $this->analyseVarsForSqlAndScriptsInjection($value, $type)) {
556 556
 //$var[$key] = $value;	// This is useless
557 557
                 } else {
558
-                    print 'Access refused by SQL/Script injection protection in main.inc.php (type=' . htmlentities($type) . ' key=' . htmlentities($key) . ' value=' . htmlentities($value) . ' page=' . htmlentities($_SERVER["REQUEST_URI"]) . ')';
558
+                    print 'Access refused by SQL/Script injection protection in main.inc.php (type='.htmlentities($type).' key='.htmlentities($key).' value='.htmlentities($value).' page='.htmlentities($_SERVER["REQUEST_URI"]).')';
559 559
                     exit;
560 560
                 }
561 561
             }
@@ -626,20 +626,20 @@  discard block
 block discarded – undo
626 626
 
627 627
             // dol_syslog("POST key=".join(array_keys($_POST),',').' value='.join($_POST,','));
628 628
             // If in demo mode, we check we go to home page through the public/demo/index.php page
629
-            if (!empty($dolibarr_main_demo) && $_SERVER['PHP_SELF'] == DOL_BASE_URI . '/index.php') {
629
+            if (!empty($dolibarr_main_demo) && $_SERVER['PHP_SELF'] == DOL_BASE_URI.'/index.php') {
630 630
                 // We ask index page
631 631
                 if (empty($_SERVER['HTTP_REFERER']) || !preg_match('/public/', $_SERVER['HTTP_REFERER'])) {
632
-                    AlDolUtils::dol_syslog("Call index page from another url than demo page (call is done from page " . $_SERVER['HTTP_REFERER'] . ")");
632
+                    AlDolUtils::dol_syslog("Call index page from another url than demo page (call is done from page ".$_SERVER['HTTP_REFERER'].")");
633 633
                     $url = '';
634
-                    $url .= ($url ? '&' : '') . ($dol_hide_topmenu ? 'dol_hide_topmenu=' . $dol_hide_topmenu : '');
635
-                    $url .= ($url ? '&' : '') . ($dol_hide_leftmenu ? 'dol_hide_leftmenu=' . $dol_hide_leftmenu : '');
636
-                    $url .= ($url ? '&' : '') . ($dol_optimize_smallscreen ? 'dol_optimize_smallscreen=' . $dol_optimize_smallscreen : '');
637
-                    $url .= ($url ? '&' : '') . ($dol_no_mouse_hover ? 'dol_no_mouse_hover=' . $dol_no_mouse_hover : '');
638
-                    $url .= ($url ? '&' : '') . ($dol_use_jmobile ? 'dol_use_jmobile=' . $dol_use_jmobile : '');
639
-                    $url = DOL_BASE_URI . '/public/demo/index.php' . ($url ? '?' . $url : '');
634
+                    $url .= ($url ? '&' : '').($dol_hide_topmenu ? 'dol_hide_topmenu='.$dol_hide_topmenu : '');
635
+                    $url .= ($url ? '&' : '').($dol_hide_leftmenu ? 'dol_hide_leftmenu='.$dol_hide_leftmenu : '');
636
+                    $url .= ($url ? '&' : '').($dol_optimize_smallscreen ? 'dol_optimize_smallscreen='.$dol_optimize_smallscreen : '');
637
+                    $url .= ($url ? '&' : '').($dol_no_mouse_hover ? 'dol_no_mouse_hover='.$dol_no_mouse_hover : '');
638
+                    $url .= ($url ? '&' : '').($dol_use_jmobile ? 'dol_use_jmobile='.$dol_use_jmobile : '');
639
+                    $url = DOL_BASE_URI.'/public/demo/index.php'.($url ? '?'.$url : '');
640 640
                     echo $url;
641 641
                     throw Exception('x');
642
-                    header("Location: " . $url);
642
+                    header("Location: ".$url);
643 643
                     exit;
644 644
                 }
645 645
             }
@@ -660,7 +660,7 @@  discard block
 block discarded – undo
660 660
                     $test = false;
661 661
 
662 662
                     // Call trigger for the "security events" log
663
-                    Globals::$user->trigger_mesg = 'ErrorBadValueForCode - login=' . AlDolUtils::GETPOST("username", "alpha", 2);
663
+                    Globals::$user->trigger_mesg = 'ErrorBadValueForCode - login='.AlDolUtils::GETPOST("username", "alpha", 2);
664 664
 
665 665
                     // Call of triggers
666 666
                     //include_once DOL_BASE_PATH . '/core/class/interfaces.class.php';
@@ -675,7 +675,7 @@  discard block
 block discarded – undo
675 675
                     $action = '';
676 676
                     Globals::$hookManager->initHooks(array('login'));
677 677
                     $parameters = array('dol_authmode' => $this->dol_authmode, 'dol_loginmesg' => $_SESSION["dol_loginmesg"]);
678
-                    $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action);    // Note that $action and $object may have been modified by some hooks
678
+                    $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action); // Note that $action and $object may have been modified by some hooks
679 679
                     if ($reshook < 0) {
680 680
                         $error++;
681 681
                     }
@@ -760,7 +760,7 @@  discard block
 block discarded – undo
760 760
                     }
761 761
 
762 762
                     // Call trigger for the "security events" log
763
-                    Globals::$user->trigger_mesg = Globals::$langs->trans("ErrorBadLoginPassword") . ' - login=' . AlDolUtils::GETPOST("username", "alpha", 2);
763
+                    Globals::$user->trigger_mesg = Globals::$langs->trans("ErrorBadLoginPassword").' - login='.AlDolUtils::GETPOST("username", "alpha", 2);
764 764
 
765 765
                     // Call of triggers
766 766
                     //include_once DOL_BASE_PATH . '/core/class/interfaces.class.php';
@@ -774,7 +774,7 @@  discard block
 block discarded – undo
774 774
                     $action = '';
775 775
                     Globals::$hookManager->initHooks(array('login'));
776 776
                     $parameters = array('dol_authmode' => $this->dol_authmode, 'dol_loginmesg' => $_SESSION["dol_loginmesg"]);
777
-                    $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action);    // Note that $action and $object may have been modified by some hooks
777
+                    $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action); // Note that $action and $object may have been modified by some hooks
778 778
                     if ($reshook < 0) {
779 779
                         $error++;
780 780
                     }
@@ -786,7 +786,7 @@  discard block
 block discarded – undo
786 786
             // End test login / passwords
787 787
             if (!$login || (in_array('ldap', $this->authmode) && empty($passwordtotest))) { // With LDAP we refused empty password because some LDAP are "opened" for anonymous access so connexion is a success.
788 788
                 // No data to test login, so we show the login page
789
-                AlDolUtils::dol_syslog("--- Access to " . $_SERVER["PHP_SELF"] . " showing the login form and exit");
789
+                AlDolUtils::dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." showing the login form and exit");
790 790
                 if (defined('NOREDIRECTBYMAINTOLOGIN')) {
791 791
                     return 'ERROR_NOT_LOGGED';
792 792
                 } else {
@@ -800,8 +800,8 @@  discard block
 block discarded – undo
800 800
                 AlDolUtils::dol_syslog('User not found, connexion refused');
801 801
                 session_destroy();
802 802
                 session_name($this->sessionname);
803
-                session_set_cookie_params(0, '/', null, false, true);   // Add tag httponly on session cookie
804
-                session_start();    // Fixing the bug of register_globals here is useless since session is empty
803
+                session_set_cookie_params(0, '/', null, false, true); // Add tag httponly on session cookie
804
+                session_start(); // Fixing the bug of register_globals here is useless since session is empty
805 805
 
806 806
                 if ($resultFetchUser == 0) {
807 807
                 // Load translation files required by page
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
 
810 810
                     $_SESSION["dol_loginmesg"] = Globals::$langs->trans("ErrorCantLoadUserFromDolibarrDatabase", $login);
811 811
 
812
-                    Globals::$user->trigger_mesg = 'ErrorCantLoadUserFromDolibarrDatabase - login=' . $login;
812
+                    Globals::$user->trigger_mesg = 'ErrorCantLoadUserFromDolibarrDatabase - login='.$login;
813 813
                 }
814 814
                 if ($resultFetchUser < 0) {
815 815
                     $_SESSION["dol_loginmesg"] = Globals::$user->error;
@@ -829,24 +829,24 @@  discard block
 block discarded – undo
829 829
                 $action = '';
830 830
                 Globals::$hookManager->initHooks(array('login'));
831 831
                 $parameters = array('dol_authmode' => $this->dol_authmode, 'dol_loginmesg' => $_SESSION["dol_loginmesg"]);
832
-                $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action);    // Note that $action and $object may have been modified by some hooks
832
+                $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action); // Note that $action and $object may have been modified by some hooks
833 833
                 if ($reshook < 0) {
834 834
                     $error++;
835 835
                 }
836 836
 
837 837
                 $paramsurl = array();
838 838
                 if (AlDolUtils::GETPOST('textbrowser', 'int')) {
839
-                    $paramsurl[] = 'textbrowser=' . AlDolUtils::GETPOST('textbrowser', 'int');
839
+                    $paramsurl[] = 'textbrowser='.AlDolUtils::GETPOST('textbrowser', 'int');
840 840
                 }
841 841
                 if (AlDolUtils::GETPOST('nojs', 'int')) {
842
-                    $paramsurl[] = 'nojs=' . AlDolUtils::GETPOST('nojs', 'int');
842
+                    $paramsurl[] = 'nojs='.AlDolUtils::GETPOST('nojs', 'int');
843 843
                 }
844 844
                 if (AlDolUtils::GETPOST('lang', 'aZ09')) {
845
-                    $paramsurl[] = 'lang=' . AlDolUtils::GETPOST('lang', 'aZ09');
845
+                    $paramsurl[] = 'lang='.AlDolUtils::GETPOST('lang', 'aZ09');
846 846
                 }
847
-                echo 'Location: ' . DOL_BASE_URI . '/index.php' . (count($paramsurl) ? '?' . implode('&', $paramsurl) : '');
847
+                echo 'Location: '.DOL_BASE_URI.'/index.php'.(count($paramsurl) ? '?'.implode('&', $paramsurl) : '');
848 848
                 throw Exception('x');
849
-                header('Location: ' . DOL_BASE_URI . '/index.php' . (count($paramsurl) ? '?' . implode('&', $paramsurl) : ''));
849
+                header('Location: '.DOL_BASE_URI.'/index.php'.(count($paramsurl) ? '?'.implode('&', $paramsurl) : ''));
850 850
                 exit;
851 851
             }
852 852
         }
@@ -855,16 +855,16 @@  discard block
 block discarded – undo
855 855
             // We are already into an authenticated session
856 856
             $login = $_SESSION["dol_login"];
857 857
             $entity = $_SESSION["dol_entity"];
858
-            AlDolUtils::dol_syslog("- This is an already logged session. _SESSION['dol_login']=" . $login . " _SESSION['dol_entity']=" . $entity, LOG_DEBUG);
858
+            AlDolUtils::dol_syslog("- This is an already logged session. _SESSION['dol_login']=".$login." _SESSION['dol_entity']=".$entity, LOG_DEBUG);
859 859
 
860 860
             $resultFetchUser = Globals::$user->fetch('', $login, '', 1, ($entity > 0 ? $entity : -1));
861 861
             if ($resultFetchUser <= 0) {
862 862
                 // Account has been removed after login
863
-                AlDolUtils::dol_syslog("Can't load user even if session logged. _SESSION['dol_login']=" . $login, LOG_WARNING);
863
+                AlDolUtils::dol_syslog("Can't load user even if session logged. _SESSION['dol_login']=".$login, LOG_WARNING);
864 864
                 session_destroy();
865 865
                 session_name($this->sessionname);
866
-                session_set_cookie_params(0, '/', null, false, true);   // Add tag httponly on session cookie
867
-                session_start();    // Fixing the bug of register_globals here is useless since session is empty
866
+                session_set_cookie_params(0, '/', null, false, true); // Add tag httponly on session cookie
867
+                session_start(); // Fixing the bug of register_globals here is useless since session is empty
868 868
 
869 869
                 if ($resultFetchUser == 0) {
870 870
                     // Load translation files required by page
@@ -872,7 +872,7 @@  discard block
 block discarded – undo
872 872
 
873 873
                     $_SESSION["dol_loginmesg"] = Globals::$langs->trans("ErrorCantLoadUserFromDolibarrDatabase", $login);
874 874
 
875
-                    Globals::$user->trigger_mesg = 'ErrorCantLoadUserFromDolibarrDatabase - login=' . $login;
875
+                    Globals::$user->trigger_mesg = 'ErrorCantLoadUserFromDolibarrDatabase - login='.$login;
876 876
                 }
877 877
                 if ($resultFetchUser < 0) {
878 878
                     $_SESSION["dol_loginmesg"] = Globals::$user->error;
@@ -892,24 +892,24 @@  discard block
 block discarded – undo
892 892
                 $action = '';
893 893
                 Globals::$hookManager->initHooks(array('login'));
894 894
                 $parameters = array('dol_authmode' => $this->dol_authmode, 'dol_loginmesg' => $_SESSION["dol_loginmesg"]);
895
-                $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action);    // Note that $action and $object may have been modified by some hooks
895
+                $reshook = Globals::$hookManager->executeHooks('afterLoginFailed', $parameters, Globals::$user, $action); // Note that $action and $object may have been modified by some hooks
896 896
                 if ($reshook < 0) {
897 897
                     $error++;
898 898
                 }
899 899
 
900 900
                 $paramsurl = array();
901 901
                 if (AlDolUtils::GETPOST('textbrowser', 'int')) {
902
-                    $paramsurl[] = 'textbrowser=' . AlDolUtils::GETPOST('textbrowser', 'int');
902
+                    $paramsurl[] = 'textbrowser='.AlDolUtils::GETPOST('textbrowser', 'int');
903 903
                 }
904 904
                 if (AlDolUtils::GETPOST('nojs', 'int')) {
905
-                    $paramsurl[] = 'nojs=' . AlDolUtils::GETPOST('nojs', 'int');
905
+                    $paramsurl[] = 'nojs='.AlDolUtils::GETPOST('nojs', 'int');
906 906
                 }
907 907
                 if (AlDolUtils::GETPOST('lang', 'aZ09')) {
908
-                    $paramsurl[] = 'lang=' . AlDolUtils::GETPOST('lang', 'aZ09');
908
+                    $paramsurl[] = 'lang='.AlDolUtils::GETPOST('lang', 'aZ09');
909 909
                 }
910
-                echo 'Location: ' . DOL_BASE_URI . '/index.php' . (count($paramsurl) ? '?' . implode('&', $paramsurl) : '');
910
+                echo 'Location: '.DOL_BASE_URI.'/index.php'.(count($paramsurl) ? '?'.implode('&', $paramsurl) : '');
911 911
                 throw Exception('x');
912
-                header('Location: ' . DOL_BASE_URI . '/index.php' . (count($paramsurl) ? '?' . implode('&', $paramsurl) : ''));
912
+                header('Location: '.DOL_BASE_URI.'/index.php'.(count($paramsurl) ? '?'.implode('&', $paramsurl) : ''));
913 913
                 exit;
914 914
             } else {
915 915
 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
@@ -918,30 +918,30 @@  discard block
 block discarded – undo
918 918
 // Code for search criteria persistence.
919 919
                 if (!empty($_GET['save_lastsearch_values'])) {    // We must use $_GET here
920 920
                     $relativepathstring = preg_replace('/\?.*$/', '', $_SERVER["HTTP_REFERER"]);
921
-                    $relativepathstring = preg_replace('/^https?:\/\/[^\/]*/', '', $relativepathstring);     // Get full path except host server
921
+                    $relativepathstring = preg_replace('/^https?:\/\/[^\/]*/', '', $relativepathstring); // Get full path except host server
922 922
 // Clean $relativepathstring
923 923
                     if (constant('DOL_BASE_URI')) {
924
-                        $relativepathstring = preg_replace('/^' . preg_quote(constant('DOL_BASE_URI'), '/') . '/', '', $relativepathstring);
924
+                        $relativepathstring = preg_replace('/^'.preg_quote(constant('DOL_BASE_URI'), '/').'/', '', $relativepathstring);
925 925
                     }
926 926
                     $relativepathstring = preg_replace('/^\//', '', $relativepathstring);
927 927
                     $relativepathstring = preg_replace('/^custom\//', '', $relativepathstring);
928 928
 //var_dump($relativepathstring);
929 929
 // We click on a link that leave a page we have to save search criteria, contextpage, limit and page. We save them from tmp to no tmp
930
-                    if (!empty($_SESSION['lastsearch_values_tmp_' . $relativepathstring])) {
931
-                        $_SESSION['lastsearch_values_' . $relativepathstring] = $_SESSION['lastsearch_values_tmp_' . $relativepathstring];
932
-                        unset($_SESSION['lastsearch_values_tmp_' . $relativepathstring]);
930
+                    if (!empty($_SESSION['lastsearch_values_tmp_'.$relativepathstring])) {
931
+                        $_SESSION['lastsearch_values_'.$relativepathstring] = $_SESSION['lastsearch_values_tmp_'.$relativepathstring];
932
+                        unset($_SESSION['lastsearch_values_tmp_'.$relativepathstring]);
933 933
                     }
934
-                    if (!empty($_SESSION['lastsearch_contextpage_tmp_' . $relativepathstring])) {
935
-                        $_SESSION['lastsearch_contextpage_' . $relativepathstring] = $_SESSION['lastsearch_contextpage_tmp_' . $relativepathstring];
936
-                        unset($_SESSION['lastsearch_contextpage_tmp_' . $relativepathstring]);
934
+                    if (!empty($_SESSION['lastsearch_contextpage_tmp_'.$relativepathstring])) {
935
+                        $_SESSION['lastsearch_contextpage_'.$relativepathstring] = $_SESSION['lastsearch_contextpage_tmp_'.$relativepathstring];
936
+                        unset($_SESSION['lastsearch_contextpage_tmp_'.$relativepathstring]);
937 937
                     }
938
-                    if (!empty($_SESSION['lastsearch_page_tmp_' . $relativepathstring]) && $_SESSION['lastsearch_page_tmp_' . $relativepathstring] > 1) {
939
-                        $_SESSION['lastsearch_page_' . $relativepathstring] = $_SESSION['lastsearch_page_tmp_' . $relativepathstring];
940
-                        unset($_SESSION['lastsearch_page_tmp_' . $relativepathstring]);
938
+                    if (!empty($_SESSION['lastsearch_page_tmp_'.$relativepathstring]) && $_SESSION['lastsearch_page_tmp_'.$relativepathstring] > 1) {
939
+                        $_SESSION['lastsearch_page_'.$relativepathstring] = $_SESSION['lastsearch_page_tmp_'.$relativepathstring];
940
+                        unset($_SESSION['lastsearch_page_tmp_'.$relativepathstring]);
941 941
                     }
942
-                    if (!empty($_SESSION['lastsearch_limit_tmp_' . $relativepathstring]) && $_SESSION['lastsearch_limit_tmp_' . $relativepathstring] != Globals::$conf->liste_limit) {
943
-                        $_SESSION['lastsearch_limit_' . $relativepathstring] = $_SESSION['lastsearch_limit_tmp_' . $relativepathstring];
944
-                        unset($_SESSION['lastsearch_limit_tmp_' . $relativepathstring]);
942
+                    if (!empty($_SESSION['lastsearch_limit_tmp_'.$relativepathstring]) && $_SESSION['lastsearch_limit_tmp_'.$relativepathstring] != Globals::$conf->liste_limit) {
943
+                        $_SESSION['lastsearch_limit_'.$relativepathstring] = $_SESSION['lastsearch_limit_tmp_'.$relativepathstring];
944
+                        unset($_SESSION['lastsearch_limit_tmp_'.$relativepathstring]);
945 945
                     }
946 946
                 }
947 947
 
@@ -990,14 +990,14 @@  discard block
 block discarded – undo
990 990
                 $_SESSION['dol_use_jmobile'] = $dol_use_jmobile;
991 991
             }
992 992
 
993
-            AlDolUtils::dol_syslog("This is a new started user session. _SESSION['dol_login']=" . $_SESSION["dol_login"] . " Session id=" . session_id());
993
+            AlDolUtils::dol_syslog("This is a new started user session. _SESSION['dol_login']=".$_SESSION["dol_login"]." Session id=".session_id());
994 994
 
995 995
             // Config::$dbEngine->begin();
996 996
             Config::$dbEngine->beginTransaction();
997 997
 
998 998
             Globals::$user->update_last_login_date();
999 999
 
1000
-            $loginfo = 'TZ=' . $_SESSION["dol_tz"] . ';TZString=' . $_SESSION["dol_tz_string"] . ';Screen=' . $_SESSION["dol_screenwidth"] . 'x' . $_SESSION["dol_screenheight"];
1000
+            $loginfo = 'TZ='.$_SESSION["dol_tz"].';TZString='.$_SESSION["dol_tz_string"].';Screen='.$_SESSION["dol_screenwidth"].'x'.$_SESSION["dol_screenheight"];
1001 1001
 
1002 1002
             // Call triggers for the "security events" log
1003 1003
             Globals::$user->trigger_mesg = $loginfo;
@@ -1013,7 +1013,7 @@  discard block
 block discarded – undo
1013 1013
             $action = '';
1014 1014
             Globals::$hookManager->initHooks(array('login'));
1015 1015
             $parameters = array('dol_authmode' => $this->dol_authmode, 'dol_loginfo' => $loginfo);
1016
-            $reshook = Globals::$hookManager->executeHooks('afterLogin', $parameters, Globals::$user, $action);    // Note that $action and $object may have been modified by some hooks
1016
+            $reshook = Globals::$hookManager->executeHooks('afterLogin', $parameters, Globals::$user, $action); // Note that $action and $object may have been modified by some hooks
1017 1017
             if ($reshook < 0) {
1018 1018
                 $error++;
1019 1019
             }
@@ -1034,7 +1034,7 @@  discard block
 block discarded – undo
1034 1034
                 if ($_SERVER["PHP_SELF"] != $newpath) {   // not already on landing page (avoid infinite loop)
1035 1035
                     echo $newpath;
1036 1036
                     throw Exception('x');
1037
-                    header('Location: ' . $newpath);
1037
+                    header('Location: '.$newpath);
1038 1038
                     exit;
1039 1039
                 }
1040 1040
             }
@@ -1065,7 +1065,7 @@  discard block
 block discarded – undo
1065 1065
         if (empty(Globals::$conf->global->MAIN_FORCETHEME) && !empty(Globals::$user->conf->MAIN_THEME)) {
1066 1066
             Globals::$conf->theme = Globals::$user->conf->MAIN_THEME;
1067 1067
 // Globals::$conf->css = "/theme/" . Globals::$conf->theme . "/style.css.php";
1068
-            Globals::$conf->css = '?controller=theme/' . Globals::$conf->theme . '&method=style.css';
1068
+            Globals::$conf->css = '?controller=theme/'.Globals::$conf->theme.'&method=style.css';
1069 1069
         }
1070 1070
     }
1071 1071
 }
Please login to merge, or discard this patch.