26 require
'../main.inc.php';
27 include_once DOL_DOCUMENT_ROOT.
'/core/boxes/modules_boxes.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/class/infobox.class.php';
29 include_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
32 $langs->loadLangs(array(
'admin',
'boxes',
'accountancy'));
38 $rowid =
GETPOST(
'rowid',
'int');
39 $action =
GETPOST(
'action',
'aZ09');
51 if ($action ==
'addconst') {
52 dolibarr_set_const($db,
"MAIN_BOXES_MAXLINES", $_POST[
"MAIN_BOXES_MAXLINES"],
'', 0,
'', $conf->entity);
53 dolibarr_set_const($db,
"MAIN_ACTIVATE_FILECACHE", $_POST[
"MAIN_ACTIVATE_FILECACHE"],
'chaine', 0,
'', $conf->entity);
56 if ($action ==
'add') {
58 $boxids =
GETPOST(
'boxid',
'array');
61 if (is_array($boxids)) {
62 foreach ($boxids as $boxid) {
63 if (is_numeric($boxid[
'pos']) && $boxid[
'pos'] >= 0) {
67 $distinctfkuser = array();
69 $sql =
"SELECT fk_user";
70 $sql .=
" FROM ".MAIN_DB_PREFIX.
"user_param";
71 $sql .=
" WHERE param = 'MAIN_BOXES_".$db->escape($pos).
"' AND value = '1'";
72 $sql .=
" AND entity = ".$conf->entity;
73 dol_syslog(
"boxes.php search fk_user to activate box for", LOG_DEBUG);
76 $num = $db->num_rows(
$resql);
79 $obj = $db->fetch_object(
$resql);
80 $distinctfkuser[$obj->fk_user] = $obj->fk_user;
89 $distinctfkuser[
'0'] =
'0';
91 foreach ($distinctfkuser as $fk_user) {
92 if (!$error && $fk_user !=
'') {
93 $arrayofexistingboxid = array();
94 $nbboxonleft = $nbboxonright = 0;
95 $sql =
"SELECT box_id, box_order FROM ".MAIN_DB_PREFIX.
"boxes";
96 $sql .=
" WHERE position = ".$pos.
" AND fk_user = ".$fk_user.
" AND entity = ".$conf->entity;
97 dol_syslog(
"boxes.php activate box", LOG_DEBUG);
100 while ($obj = $db->fetch_object(
$resql)) {
101 $boxorder = $obj->box_order;
102 if (preg_match(
'/A/', $boxorder)) {
105 if (preg_match(
'/B/', $boxorder)) {
108 $arrayofexistingboxid[$obj->box_id] = 1;
114 if (empty($arrayofexistingboxid[$boxid[
'value']])) {
115 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"boxes (";
116 $sql .=
"box_id, position, box_order, fk_user, entity";
117 $sql .=
") values (";
118 $sql .= $boxid[
'value'].
", ".$pos.
", '".(($nbboxonleft > $nbboxonright) ?
'B01' :
'A01').
"', ".$fk_user.
", ".$conf->entity;
121 dol_syslog(
"boxes.php activate box", LOG_DEBUG);
122 $resql = $db->query($sql);
128 dol_syslog(
"boxes.php activate box - already exists in database", LOG_DEBUG);
143 if ($action ==
'delete') {
144 $sql =
"SELECT box_id FROM ".MAIN_DB_PREFIX.
"boxes";
145 $sql .=
" WHERE rowid=".((int) $rowid);
147 $resql = $db->query($sql);
148 $obj = $db->fetch_object(
$resql);
149 if (!empty($obj->box_id)) {
157 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"boxes";
158 $sql .=
" WHERE entity = ".$conf->entity;
159 $sql .=
" AND box_id=".$obj->box_id;
161 $resql = $db->query($sql);
167 if ($action ==
'switch') {
172 $objfrom->fetch(
GETPOST(
"switchfrom",
'int'));
175 $objto->fetch(
GETPOST(
'switchto',
'int'));
177 $resultupdatefrom = 0;
179 if (is_object($objfrom) && is_object($objto)) {
180 $newfirst = $objto->box_order;
181 $newsecond = $objfrom->box_order;
182 if ($newfirst == $newsecond) {
183 $newsecondchar = preg_replace(
'/[0-9]+/',
'', $newsecond);
184 $newsecondnum = preg_replace(
'/[a-zA-Z]+/',
'', $newsecond);
185 $newsecond = sprintf(
"%s%02d", $newsecondchar ? $newsecondchar :
'A', $newsecondnum + 1);
187 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order='".$db->escape($newfirst).
"' WHERE rowid=".((int) $objfrom->rowid);
189 $resultupdatefrom = $db->query($sql);
190 if (!$resultupdatefrom) {
194 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order='".$db->escape($newsecond).
"' WHERE rowid=".((int) $objto->rowid);
196 $resultupdateto = $db->query($sql);
197 if (!$resultupdateto) {
202 if ($resultupdatefrom && $resultupdateto) {
214 $form =
new Form($db);
220 print '<span class="opacitymedium">'.$langs->trans(
"BoxesDesc").
" ".$langs->trans(
"OnlyActiveElementsAreShown").
"</span><br>\n";
229 $sql =
"SELECT b.rowid, b.box_id, b.position, b.box_order,";
230 $sql .=
" bd.rowid as boxid";
231 $sql .=
" FROM ".MAIN_DB_PREFIX.
"boxes as b, ".MAIN_DB_PREFIX.
"boxes_def as bd";
232 $sql .=
" WHERE b.box_id = bd.rowid";
233 $sql .=
" AND b.entity IN (0,".$conf->entity.
")";
234 $sql .=
" AND b.fk_user=0";
235 $sql .=
" ORDER by b.position, b.box_order";
237 dol_syslog(
"Search available boxes", LOG_DEBUG);
238 $resql = $db->query($sql);
240 $num = $db->num_rows(
$resql);
246 $obj = $db->fetch_object(
$resql);
247 $boxes[$obj->position][$obj->box_id] = 1;
250 array_push($actives, $obj->box_id);
252 if ($obj->box_order ==
'' || $obj->box_order ==
'0' || $decalage) {
258 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order='".$db->escape($decalage).
"' WHERE rowid=".$obj->rowid;
266 $sql =
"SELECT box_order";
267 $sql .=
" FROM ".MAIN_DB_PREFIX.
"boxes";
268 $sql .=
" WHERE entity = ".$conf->entity;
269 $sql .=
" AND LENGTH(box_order) <= 2";
271 dol_syslog(
"Execute requests to renumber box order", LOG_DEBUG);
272 $result = $db->query($sql);
274 while ($record = $db->fetch_array($result)) {
276 if (preg_match(
"/[13579]{1}/", substr($record[
'box_order'], -1))) {
277 $box_order =
"A0".$record[
'box_order'];
278 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order = '".$db->escape($box_order).
"' WHERE entity = ".$conf->entity.
" AND box_order = '".$db->escape($record[
'box_order']).
"'";
279 $resql = $db->query($sql);
280 } elseif (preg_match(
"/[02468]{1}/", substr($record[
'box_order'], -1))) {
281 $box_order =
"B0".$record[
'box_order'];
282 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order = '".$db->escape($box_order).
"' WHERE entity = ".$conf->entity.
" AND box_order = '".$db->escape($record[
'box_order']).
"'";
283 $resql = $db->query($sql);
285 } elseif (
dol_strlen($record[
'box_order']) == 2) {
286 if (preg_match(
"/[13579]{1}/", substr($record[
'box_order'], -1))) {
287 $box_order =
"A".$record[
'box_order'];
288 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order = '".$db->escape($box_order).
"' WHERE entity = ".$conf->entity.
" AND box_order = '".$db->escape($record[
'box_order']).
"'";
289 $resql = $db->query($sql);
290 } elseif (preg_match(
"/[02468]{1}/", substr($record[
'box_order'], -1))) {
291 $box_order =
"B".$record[
'box_order'];
292 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"boxes SET box_order = '".$db->escape($box_order).
"' WHERE entity = ".$conf->entity.
" AND box_order = '".$db->escape($record[
'box_order']).
"'";
293 $resql = $db->query($sql);
308 print "\n\n".
'<!-- Boxes Available -->'.
"\n";
311 print '<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
312 print '<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
313 print '<input type="hidden" name="action" value="add">'.
"\n";
315 print '<div class="div-table-responsive-no-min">';
316 print '<table class="tagtable liste centpercent">'.
"\n";
318 print '<tr class="liste_titre">';
319 print '<td width="300">'.$langs->trans(
"Box").
'</td>';
320 print '<td>'.$langs->trans(
"Note").
'/'.$langs->trans(
"Parameters").
'</td>';
321 print '<td>'.$langs->trans(
"SourceFile").
'</td>';
322 print '<td width="160" class="center">'.$langs->trans(
"ActivateOn").
'</td>';
325 foreach ($boxtoadd as $box) {
326 if (preg_match(
'/^([^@]+)@([^@]+)$/i', $box->boximg)) {
327 $logo = $box->boximg;
329 $logo = preg_replace(
"/^object_/i",
"", $box->boximg);
332 print "\n".
'<!-- Box '.$box->boxcode.
' -->'.
"\n";
333 print '<tr class="oddeven">'.
"\n";
334 print '<td>'.img_object(
"", $logo,
'height="14px"').
' '.$langs->transnoentitiesnoconv($box->boxlabel);
335 if (!empty($box->class) && preg_match(
'/graph_/', $box->class)) {
336 print ' ('.$langs->trans(
"Graph").
')';
340 if ($box->note ==
'(WarningUsingThisBoxSlowDown)') {
341 $langs->load(
"errors");
342 print $langs->trans(
"WarningUsingThisBoxSlowDown");
344 print ($box->note ? $box->note :
' ');
347 print '<td>'.$box->sourcefile.
'</td>'.
"\n";
350 print '<td class="center">';
351 print $form->selectarray(
"boxid[".$box->box_id.
"][pos]", $pos_name, -1, 1, 0, 0,
'', 1).
"\n";
352 print '<input type="hidden" name="boxid['.$box->box_id.
'][value]" value="'.$box->box_id.
'">'.
"\n";
357 if (!count($boxtoadd) && count($boxactivated)) {
358 print '<tr><td class="opacitymedium" colspan="4">'.$langs->trans(
"AllWidgetsWereEnabled").
'</td></tr>';
360 print '</table>'.
"\n";
363 print '<div class="right">';
364 print '<input type="submit" class="button"'.(count($boxtoadd) ?
'' :
' disabled').
' value="'.$langs->trans(
"Activate").
'">';
367 print "\n".
'<!-- End Boxes Available -->'.
"\n";
374 print '<div class="div-table-responsive-no-min">';
375 print
'<table class="tagtable liste">'.
"\n";
377 print
'<tr class="liste_titre">';
378 print
'<td width="300">'.$langs->trans(
"Box").
'</td>';
379 print
'<td>'.$langs->trans(
"Note").
'/'.$langs->trans(
"Parameters").
'</td>';
380 print
'<td class="center" width="160">'.$langs->trans(
"ActiveOn").
'</td>';
381 print
'<td class="center" width="60" colspan="2">'.$langs->trans(
"PositionByDefault").
'</td>';
382 print
'<td class="center" width="80">'.$langs->trans(
"Disable").
'</td>';
387 foreach ($boxactivated as $key => $box) {
388 if (preg_match(
'/^([^@]+)@([^@]+)$/i', $box->boximg)) {
389 $logo = $box->boximg;
391 $logo = preg_replace(
"/^object_/i",
"", $box->boximg);
394 print
"\n".
'<!-- Box '.$box->boxcode.
' -->'.
"\n";
395 print
'<tr class="oddeven">';
396 print
'<td>'.img_object(
"", $logo,
'height="14px"').
' '.$langs->transnoentitiesnoconv($box->boxlabel);
397 if (!empty($box->class) && preg_match(
'/graph_/', $box->class)) {
398 print
' ('.$langs->trans(
"Graph").
')';
402 if ($box->note ==
'(WarningUsingThisBoxSlowDown)') {
403 $langs->load(
"errors");
404 print
img_warning(
'', 0).
' '.$langs->trans(
"WarningUsingThisBoxSlowDown");
406 print ($box->note ? $box->note :
' ');
409 print
'<td class="center">'.(empty($pos_name[$box->position]) ?
'' : $langs->trans($pos_name[$box->position])).
'</td>';
410 $hasnext = ($key < (count($boxactivated) - 1));
411 $hasprevious = ($key != 0);
412 print
'<td class="center">'.($key + 1).
'</td>';
413 print
'<td class="center">';
414 print ($hasnext ?
'<a href="boxes.php?action=switch&switchfrom='.$box->rowid.
'&switchto='.$boxactivated[$key + 1]->rowid.
'">'.
img_down().
'</a> ' :
'');
415 print ($hasprevious ?
'<a href="boxes.php?action=switch&switchfrom='.$box->rowid.
'&switchto='.$boxactivated[$key - 1]->rowid.
'">'.
img_up().
'</a>' :
'');
417 print
'<td class="center">';
418 print
'<a href="boxes.php?rowid='.$box->rowid.
'&action=delete&token='.
newToken().
'">'.
img_delete().
'</a>';
431 print
"\n\n".
'<!-- Other Const -->'.
"\n";
433 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
434 print
'<input type="hidden" name="token" value="'.newToken().
'">';
435 print
'<input type="hidden" name="action" value="addconst">';
436 print
'<div class="div-table-responsive-no-min">';
437 print
'<table class="noborder centpercent">';
439 print
'<tr class="liste_titre">';
440 print
'<td class="liste_titre">'.$langs->trans(
"Parameter").
'</td>';
441 print
'<td class="liste_titre">'.$langs->trans(
"Value").
'</td>';
444 print
'<tr class="oddeven">';
446 print $langs->trans(
"MaxNbOfLinesForBoxes");
449 print
'<input type="text" class="flat" size="6" name="MAIN_BOXES_MAXLINES" value="'.$conf->global->MAIN_BOXES_MAXLINES.
'">';
454 if ($conf->global->MAIN_FEATURES_LEVEL == 2 || !empty($conf->global->MAIN_ACTIVATE_FILECACHE)) {
455 print
'<tr class="oddeven"><td width="35%">'.$langs->trans(
"EnableFileCache").
'</td><td>';
456 print $form->selectyesno(
'MAIN_ACTIVATE_FILECACHE', $conf->global->MAIN_ACTIVATE_FILECACHE, 1);
465 print
'<div class="center"><input type="submit" class="button button-save" value="'.$langs->trans(
"Save").
'" name="Button"></div>';
469 print
"\n".
'<!-- End Other Const -->'.
"\n";
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dolibarr_set_const($db, $name, $value, $type= 'chaine', $visible=0, $note= '', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
static getListOfPagesForBoxes()
Name of positions (See below)
img_warning($titlealt= 'default', $moreatt= '', $morecss= 'pictowarning')
Show warning logo.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
img_down($titlealt= 'default', $selected=0, $moreclass= '')
Show down arrow logo.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
dol_strlen($string, $stringencoding= 'UTF-8')
Make a strlen call.
img_up($titlealt= 'default', $selected=0, $moreclass= '')
Show top arrow logo.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
static listBoxes($db, $mode, $zone, $user=null, $excludelist=array(), $includehidden=1)
Return array of boxes qualified for area and user.
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
print
Draft customers invoices.
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
img_delete($titlealt= 'default', $other= 'class="pictodelete"', $morecss= '')
Show delete logo.