PageRenderTime 63ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/htdocs/admin/boxes.php

https://github.com/asterix14/dolibarr
PHP | 481 lines | 344 code | 81 blank | 56 comment | 61 complexity | 79f625f2119b42f9d7b47f5f85b44244 MD5 | raw file
Possible License(s): LGPL-2.0
  1. <?php
  2. /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
  4. * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. /**
  20. * \file htdocs/admin/boxes.php
  21. * \brief Page to setup boxes
  22. */
  23. require("../main.inc.php");
  24. include_once(DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php");
  25. include_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
  26. $langs->load("admin");
  27. if (!$user->admin) accessforbidden();
  28. $rowid = GETPOST('rowid','int');
  29. $action = GETPOST('action');
  30. // Definition des positions possibles pour les boites
  31. $pos_array = array(0); // Positions possibles pour une boite (0,1,2,...)
  32. $pos_name = array(0=>$langs->trans("Home")); // Nom des positions 0=Homepage, 1=...
  33. $boxes = array();
  34. /*
  35. * Actions
  36. */
  37. if ($action == 'addconst')
  38. {
  39. dolibarr_set_const($db, "MAIN_BOXES_MAXLINES",$_POST["MAIN_BOXES_MAXLINES"],'',0,'',$conf->entity);
  40. }
  41. if ($action == 'add')
  42. {
  43. $sql = "SELECT rowid";
  44. $sql.= " FROM ".MAIN_DB_PREFIX."boxes";
  45. $sql.= " WHERE fk_user = 0";
  46. $sql.= " AND box_id = ".$_POST["boxid"];
  47. $sql.= " AND position = ".$_POST["pos"];
  48. $resql = $db->query($sql);
  49. dol_syslog("boxes.php::search if box active sql=".$sql);
  50. if ($resql)
  51. {
  52. $num = $db->num_rows($resql);
  53. if ($num == 0)
  54. {
  55. $db->begin();
  56. // Si la boite n'est pas deja active, insert with box_order=''
  57. $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
  58. $sql.= "box_id";
  59. $sql.= ", position";
  60. $sql.= ", box_order";
  61. $sql.= ", fk_user";
  62. $sql.= ") values (";
  63. $sql.= $_POST["boxid"];
  64. $sql.= ", ".$_POST["pos"];
  65. $sql.= ", ''";
  66. $sql.= ", 0";
  67. $sql.= ")";
  68. dol_syslog("boxes.php activate box sql=".$sql);
  69. $resql = $db->query($sql);
  70. // Remove all personalized setup when a box is activated or disabled
  71. $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
  72. $sql.= " WHERE param LIKE 'MAIN_BOXES_%'";
  73. dol_syslog("boxes.php delete user_param sql=".$sql);
  74. $resql = $db->query($sql);
  75. $db->commit();
  76. }
  77. Header("Location: boxes.php");
  78. exit;
  79. }
  80. else
  81. {
  82. dol_print_error($db);
  83. }
  84. }
  85. if ($action == 'delete')
  86. {
  87. $db->begin();
  88. $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
  89. $sql.= " WHERE rowid=".$rowid;
  90. $resql = $db->query($sql);
  91. // Remove all personalized setup when a box is activated or disabled
  92. $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
  93. $sql.= " WHERE param LIKE 'MAIN_BOXES_%'";
  94. $resql = $db->query($sql);
  95. $db->commit();
  96. }
  97. if ($action == 'switch')
  98. {
  99. // On permute les valeur du champ box_order des 2 lignes de la table boxes
  100. $db->begin();
  101. $objfrom=new ModeleBoxes($db);
  102. $objfrom->fetch($_GET["switchfrom"]);
  103. $objto=new ModeleBoxes($db);
  104. $objto->fetch($_GET["switchto"]);
  105. if (is_object($objfrom) && is_object($objto))
  106. {
  107. $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$objto->box_order."' WHERE rowid=".$objfrom->rowid;
  108. //print "xx".$sql;
  109. $resultupdatefrom = $db->query($sql);
  110. if (! $resultupdatefrom) { dol_print_error($db); }
  111. $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$objfrom->box_order."' WHERE rowid=".$objto->rowid;
  112. //print "xx".$sql;
  113. $resultupdateto = $db->query($sql);
  114. if (! $resultupdateto) { dol_print_error($db); }
  115. }
  116. if ($resultupdatefrom && $resultupdateto)
  117. {
  118. $db->commit();
  119. }
  120. else
  121. {
  122. $db->rollback();
  123. }
  124. }
  125. /*
  126. * View
  127. */
  128. llxHeader('',$langs->trans("Boxes"));
  129. print_fiche_titre($langs->trans("Boxes"),'','setup');
  130. print $langs->trans("BoxesDesc")." ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
  131. /*
  132. * Recherche des boites actives par defaut pour chaque position possible
  133. * On stocke les boites actives par defaut dans $boxes[position][id_boite]=1
  134. */
  135. $actives = array();
  136. $sql = "SELECT b.rowid, b.box_id, b.position, b.box_order,";
  137. $sql.= " bd.rowid as boxid";
  138. $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd";
  139. $sql.= " WHERE b.box_id = bd.rowid";
  140. $sql.= " AND bd.entity = ".$conf->entity;
  141. $sql.= " AND b.fk_user=0";
  142. $sql.= " ORDER by b.position, b.box_order";
  143. $resql = $db->query($sql);
  144. if ($resql)
  145. {
  146. $num = $db->num_rows($resql);
  147. $i = 0;
  148. $decalage=0;
  149. while ($i < $num)
  150. {
  151. $var = ! $var;
  152. $obj = $db->fetch_object($resql);
  153. $boxes[$obj->position][$obj->box_id]=1;
  154. $i++;
  155. array_push($actives,$obj->box_id);
  156. if ($obj->box_order == '' || $obj->box_order == '0' || $decalage) $decalage++;
  157. // On renumerote l'ordre des boites si l'une d'elle est a ''
  158. // This occurs just after an insert.
  159. if ($decalage)
  160. {
  161. $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$decalage." WHERE rowid=".$obj->rowid;
  162. $db->query($sql);
  163. }
  164. }
  165. if ($decalage)
  166. {
  167. // Si on a renumerote, on corrige champ box_order
  168. // This occurs just after an insert.
  169. $sql = "SELECT box_order";
  170. $sql.= " FROM ".MAIN_DB_PREFIX."boxes";
  171. $sql.= " WHERE length(box_order) <= 2";
  172. $result = $db->query($sql);
  173. if ($result)
  174. {
  175. while ($record = $db->fetch_array($result))
  176. {
  177. if (dol_strlen($record['box_order']) == 1)
  178. {
  179. if (preg_match("/[13579]{1}/",substr($record['box_order'],-1)))
  180. {
  181. $box_order = "A0".$record['box_order'];
  182. $sql="update llx_boxes set box_order = '".$box_order."' where box_order = ".$record['box_order'];
  183. $resql = $db->query($sql);
  184. }
  185. else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1)))
  186. {
  187. $box_order = "B0".$record['box_order'];
  188. $sql="update llx_boxes set box_order = '".$box_order."' where box_order = ".$record['box_order'];
  189. $resql = $db->query($sql);
  190. }
  191. }
  192. else if (dol_strlen($record['box_order']) == 2)
  193. {
  194. if (preg_match("/[13579]{1}/",substr($record['box_order'],-1)))
  195. {
  196. $box_order = "A".$record['box_order'];
  197. $sql="update llx_boxes set box_order = '".$box_order."' where box_order = ".$record['box_order'];
  198. $resql = $db->query($sql);
  199. }
  200. else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1)))
  201. {
  202. $box_order = "B".$record['box_order'];
  203. $sql="update llx_boxes set box_order = '".$box_order."' where box_order = ".$record['box_order'];
  204. $resql = $db->query($sql);
  205. }
  206. }
  207. }
  208. }
  209. }
  210. $db->free($resql);
  211. }
  212. /*
  213. * Boites disponibles
  214. */
  215. print "<br>\n";
  216. print_titre($langs->trans("BoxesAvailable"));
  217. print '<table class="noborder" width="100%">';
  218. print '<tr class="liste_titre">';
  219. print '<td width="300">'.$langs->trans("Box").'</td>';
  220. print '<td>'.$langs->trans("Note").'/'.$langs->trans("Parameters").'</td>';
  221. print '<td>'.$langs->trans("SourceFile").'</td>';
  222. print '<td width="160">'.$langs->trans("ActivateOn").'</td>';
  223. print "</tr>\n";
  224. $sql = "SELECT rowid, file, note, tms";
  225. $sql.= " FROM ".MAIN_DB_PREFIX."boxes_def";
  226. $sql.= " WHERE entity = ".$conf->entity;
  227. $resql = $db->query($sql);
  228. $var=True;
  229. if ($resql)
  230. {
  231. $form=new Form($db);
  232. $num = $db->num_rows($resql);
  233. $i = 0;
  234. // Boucle sur toutes les boites
  235. while ($i < $num)
  236. {
  237. $obj = $db->fetch_object($resql);
  238. if (preg_match('/^([^@]+)@([^@]+)$/i',$obj->file,$regs))
  239. {
  240. $boxname = $regs[1];
  241. $module = $regs[2];
  242. $sourcefile = "/".$module."/core/boxes/".$boxname.".php";
  243. }
  244. else
  245. {
  246. $boxname=preg_replace('/.php$/i','',$obj->file);
  247. $sourcefile = "/core/boxes/".$boxname.".php";
  248. }
  249. dol_include_once($sourcefile);
  250. $box=new $boxname($db,$obj->note);
  251. $enabled=true;
  252. if ($box->depends && count($box->depends) > 0)
  253. {
  254. foreach($box->depends as $module)
  255. {
  256. if (empty($conf->$module->enabled)) $enabled=false;
  257. }
  258. }
  259. if ($enabled)
  260. {
  261. //if (in_array($obj->rowid, $actives) && $box->box_multiple <> 1)
  262. if (in_array($obj->rowid, $actives))
  263. {
  264. // La boite est deja activee
  265. }
  266. else
  267. {
  268. $var=!$var;
  269. if (preg_match('/^([^@]+)@([^@]+)$/i',$box->boximg))
  270. {
  271. $logo = $box->boximg;
  272. }
  273. else
  274. {
  275. $logo=preg_replace("/^object_/i","",$box->boximg);
  276. }
  277. print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
  278. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  279. print '<tr '.$bc[$var].'>';
  280. print '<td>'.img_object("",$logo).' '.$box->boxlabel.'</td>';
  281. print '<td>' . ($obj->note?$obj->note:'&nbsp;') . '</td>';
  282. print '<td>' . $sourcefile . '</td>';
  283. // Pour chaque position possible, on affiche un lien
  284. // d'activation si boite non deja active pour cette position
  285. print '<td>';
  286. print $form->selectarray("pos",$pos_name);
  287. print '<input type="hidden" name="action" value="add">';
  288. print '<input type="hidden" name="boxid" value="'.$obj->rowid.'">';
  289. print ' <input type="submit" class="button" name="button" value="'.$langs->trans("Activate").'">';
  290. print '</td>';
  291. print '</tr></form>';
  292. }
  293. }
  294. $i++;
  295. }
  296. $db->free($resql);
  297. }
  298. print '</table>';
  299. /*
  300. * Boites activees
  301. *
  302. */
  303. print "<br>\n\n";
  304. print_titre($langs->trans("BoxesActivated"));
  305. print '<table class="noborder" width="100%">';
  306. print '<tr class="liste_titre">';
  307. print '<td width="300">'.$langs->trans("Box").'</td>';
  308. print '<td>'.$langs->trans("Note").'/'.$langs->trans("Parameters").'</td>';
  309. print '<td align="center" width="160">'.$langs->trans("ActiveOn").'</td>';
  310. print '<td align="center" width="60" colspan="2">'.$langs->trans("PositionByDefault").'</td>';
  311. print '<td align="center" width="80">'.$langs->trans("Disable").'</td>';
  312. print '</tr>'."\n";
  313. $sql = "SELECT b.rowid, b.box_id, b.position,";
  314. $sql.= " bd.file, bd.note, bd.tms";
  315. $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd";
  316. $sql.= " WHERE b.box_id = bd.rowid";
  317. $sql.= " AND bd.entity = ".$conf->entity;
  318. $sql.= " AND b.fk_user=0";
  319. $sql.= " ORDER by b.position, b.box_order"; // Note box_order return A01,A03...,B02,B04...
  320. $resql = $db->query($sql);
  321. if ($resql)
  322. {
  323. $num = $db->num_rows($resql);
  324. $i = 0;
  325. $var=true;
  326. $box_order=1;
  327. $foundrupture=1;
  328. // On lit avec un coup d'avance
  329. $obj = $db->fetch_object($resql);
  330. while ($obj && $i < $num)
  331. {
  332. $var = ! $var;
  333. $objnext = $db->fetch_object($resql);
  334. if (preg_match('/^([^@]+)@([^@]+)$/i',$obj->file,$regs))
  335. {
  336. $boxname = $regs[1];
  337. $module = $regs[2];
  338. $sourcefile = "/".$module."/core/boxes/".$boxname.".php";
  339. }
  340. else
  341. {
  342. $boxname=preg_replace('/.php$/i','',$obj->file);
  343. $sourcefile = "/core/boxes/".$boxname.".php";
  344. }
  345. dol_include_once($sourcefile);
  346. $box=new $boxname($db,$obj->note);
  347. if (preg_match('/^([^@]+)@([^@]+)$/i',$box->boximg))
  348. {
  349. $logo = $box->boximg;
  350. }
  351. else
  352. {
  353. $logo=preg_replace("/^object_/i","",$box->boximg);
  354. }
  355. print '<tr '.$bc[$var].'>';
  356. print '<td>'.img_object("",$logo).' '.$box->boxlabel.'</td>';
  357. print '<td>' . ($obj->note?$obj->note:'&nbsp;') . '</td>';
  358. print '<td align="center">' . $pos_name[$obj->position] . '</td>';
  359. $hasnext=true;
  360. $hasprevious=true;
  361. if ($foundrupture) { $hasprevious=false; $foundrupture=0; }
  362. if (! $objnext || $obj->position != $objnext->position) { $hasnext=false; $foundrupture=1; }
  363. print '<td align="center">'.$box_order.'</td>';
  364. print '<td align="center">';
  365. print ($hasnext?'<a href="boxes.php?action=switch&switchfrom='.$obj->rowid.'&switchto='.$objnext->rowid.'">'.img_down().'</a>&nbsp;':'');
  366. print ($hasprevious?'<a href="boxes.php?action=switch&switchfrom='.$obj->rowid.'&switchto='.$objprevious->rowid.'">'.img_up().'</a>':'');
  367. print '</td>';
  368. print '<td align="center">';
  369. print '<a href="boxes.php?rowid='.$obj->rowid.'&amp;action=delete">'.img_delete().'</a>';
  370. print '</td>';
  371. print '</tr>'."\n";
  372. $i++;
  373. $box_order++;
  374. if (! $foundrupture) $objprevious = $obj;
  375. else $box_order=1;
  376. $obj=$objnext;
  377. }
  378. $db->free($resql);
  379. }
  380. print '</table><br>';
  381. // Other parameters
  382. print_titre($langs->trans("Other"));
  383. print '<table class="noborder" width="100%">';
  384. $var=false;
  385. print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
  386. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  387. print '<input type="hidden" name="action" value="addconst">';
  388. print '<tr '.$bc[$var].'><td>';
  389. print $langs->trans("MaxNbOfLinesForBoxes")."</td>\n";
  390. print '<td>';
  391. print '<input type="text" class="flat" size="6" name="MAIN_BOXES_MAXLINES" value="'.$conf->global->MAIN_BOXES_MAXLINES.'">';
  392. print '</td><td align="right">';
  393. print '<input type="submit" class="button" value="'.$langs->trans("Save").'" name="Button">';
  394. print '</td>'."\n";
  395. print '</tr>';
  396. print '</form>';
  397. print '</table>';
  398. $db->close();
  399. llxFooter();
  400. ?>