diff --git a/htdocs/boxes.php b/htdocs/boxes.php index b34e5873d1a..a9c86b1e778 100644 --- a/htdocs/boxes.php +++ b/htdocs/boxes.php @@ -51,45 +51,87 @@ class InfoBox /** - * \brief Retourne tableau des boites elligibles pour la zone + * \brief Retourne tableau des boites elligibles pour la zone et le user * \param $zone ID de la zone (0 pour la Homepage, ...) + * \param $user Objet user * \return array Tableau d'objet box */ - function listBoxes($zone) - { - $boxes=array(); - - $sql = "SELECT b.rowid, b.box_id,"; - $sql.= " d.file, d.note"; - $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d"; - $sql.= " WHERE b.box_id = d.rowid"; - $sql.= " AND position = ".$zone; - $sql.= " ORDER BY box_order"; - - dolibarr_syslog("InfoBox::listBoxes sql=$sql"); - - $result = $this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows($result); - $j = 0; - while ($j < $num) - { - $obj = $this->db->fetch_object($result); - $boxname=eregi_replace('.php$','',$obj->file); + function listBoxes($zone,$user) + { + global $conf; + + $boxes=array(); - include_once(DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"); - $box=new $boxname($this->db,$obj->note); - $boxes[$j]=$box; + $confuserzone='MAIN_BOXES_'.$zone; + if ($user->id && $user->conf->$confuserzone) + { + // Recupere liste des boites d'un user si ce dernier a sa propre liste + $sql = "SELECT b.rowid, b.box_id,"; + $sql.= " d.file, d.note"; + $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d"; + $sql.= " WHERE b.box_id = d.rowid"; + $sql.= " AND b.position = ".$zone; + $sql.= " AND b.fk_user = ".$user->id; + $sql.= " ORDER BY b.box_order"; + + dolibarr_syslog("InfoBox::listBoxes sql=$sql"); + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $j = 0; + while ($j < $num) + { + $obj = $this->db->fetch_object($result); + $boxname=eregi_replace('\.php$','',$obj->file); + include_once(DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"); + $box=new $boxname($this->db,$obj->note); + $boxes[$j]=$box; + $j++; + } + } + else { + $this->error=$this->db->error(); + dolibarr_syslog("InfoBox::listBoxes Error ".$this->error); + return array(); + } + } + else + { + // Recupere liste des boites active par defaut pour tous + $sql = "SELECT b.rowid, b.box_id,"; + $sql.= " d.file, d.note"; + $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d"; + $sql.= " WHERE b.box_id = d.rowid"; + $sql.= " AND b.position = ".$zone; + $sql.= " AND b.fk_user = 0"; + $sql.= " ORDER BY b.box_order"; - $j++; - } - } - else { - return array(); - } - return $boxes; - } + dolibarr_syslog("InfoBox::listBoxes sql=$sql"); + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $j = 0; + while ($j < $num) + { + $obj = $this->db->fetch_object($result); + $boxname=eregi_replace('\.php$','',$obj->file); + include_once(DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"); + $box=new $boxname($this->db,$obj->note); + $boxes[$j]=$box; + $j++; + } + } + else { + $this->error=$this->db->error(); + dolibarr_syslog("InfoBox::listBoxes Error ".$this->error); + return array(); + } + } + + return $boxes; + } } ?> diff --git a/htdocs/includes/boxes/box_external_rss.php b/htdocs/includes/boxes/box_external_rss.php index 436f52ae17f..3ef2a13e9d3 100644 --- a/htdocs/includes/boxes/box_external_rss.php +++ b/htdocs/includes/boxes/box_external_rss.php @@ -74,7 +74,14 @@ class box_external_rss extends ModeleBoxes { $site=$reg[1]; // Recupere flux RSS definie dans EXTERNAL_RSS_URLRSS_$site - $rss = fetch_rss( @constant("EXTERNAL_RSS_URLRSS_".$site) ); + $url=@constant("EXTERNAL_RSS_URLRSS_".$site); + $rss=fetch_rss($url); + if (! is_object($rss)) + { + dolibarr_syslog("FETCH_RSS site=".$site); + dolibarr_syslog("FETCH_RSS url=".$url); + return -1; + } // INFO sur le channel $description=$rss->channel['tagline']; @@ -135,7 +142,6 @@ class box_external_rss extends ModeleBoxes { $this->info_box_contents[$i][1] = array('align' => 'right', 'text' => $date, 'td' => 'nowrap="1"'); - } } diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 34dcc6fc1c3..4422c80cf2b 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -420,10 +420,18 @@ class DolibarrModules //$titre = $this->boxes[$key][0]; $file = $this->boxes[$key][1]; //$note = $this->boxes[$key][2]; - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def "; - $sql.= "WHERE file = '".$file."'"; - if (! $this->db->query($sql) ) + + $sql = "DELETE ".MAIN_DB_PREFIX."boxes"; + $sql.= " FROM ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def"; + $sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid"; + $sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$file."'"; + dolibarr_syslog("DolibarrModules::delete_boxes sql=".$sql); + $this->db->query($sql); + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def"; + $sql.= " WHERE file = '".$file."'"; + dolibarr_syslog("DolibarrModules::delete_boxes sql=".$sql); + if (! $this->db->query($sql)) { $err++; } diff --git a/htdocs/index.php b/htdocs/index.php index 44ee5296510..ed0d0042b94 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -27,13 +27,21 @@ */ require("./pre.inc.php"); +require_once(DOL_DOCUMENT_ROOT."/boxes.php"); $user->getrights(''); - // Simule le menu par défaut sur Home if (! isset($_GET["mainmenu"])) $_GET["mainmenu"]="home"; +$infobox=new InfoBox($db); + + + + +/* +* Affichage page +*/ llxHeader(); @@ -480,11 +488,17 @@ print ''; * Affichage des boites * */ -include_once("./boxes.php"); -$infobox=new InfoBox($db); -$boxarray=$infobox->listboxes("0"); // 0 = valeur pour la page accueil +$boxarray=$infobox->listboxes("0",$user); // 0=valeur pour la page accueil $boxjavascriptids=array(); +if (eregi('boxobject_([0-9]+)',$_GET["switchfrom"],$regfrom) + && eregi('boxto_([0-9]+)',$_GET["switchto"],$regto)) +{ + //print "Modif ordre box: ".$regfrom[1]." <-> ".$regto[1]; +// print_r($boxarray); +} + + $NBCOLS=2; // Nombre de colonnes pour les boites if (sizeof($boxarray)) @@ -492,42 +506,40 @@ if (sizeof($boxarray)) print '
'; print_fiche_titre($langs->trans("OtherInformationsBoxes")); print ''; -} -for ($ii=0, $ni=sizeof($boxarray); $ii<$ni; $ii++) -{ - $boxjavascriptids[$ii]='"box_'.$ii.'"'; + for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++) + { + $boxjavascriptids[$ii]='"box_'.$ii.'"'; + + if ($ii % $NBCOLS == 0) print "\n"; + print '"; + if ($ii % $NBCOLS == ($NBCOLS-1)) print "\n"; + } - if ($ii % $NBCOLS == 0) print "\n"; - print '"; - if ($ii % $NBCOLS == ($NBCOLS-1)) print "\n"; -} -if (sizeof($boxarray)) -{ if ($ii % $NBCOLS == ($NBCOLS-1)) print "\n"; print "
'; + print '
'; + + if ($conf->use_ajax && $conf->browser->firefox) + { + print '
    '; + print '
  • '; + } + // Affichage boite ii + $box=$boxarray[$ii]; + $box->loadBox(); + $box->boxid="$ii"; + $box->showBox(); + if ($conf->use_ajax && $conf->browser->firefox) + { + print '
  • '; + print '
'; + } + + print '
'; + print "
'; - print '
'; - - if ($conf->use_ajax && $conf->browser->firefox) - { - print '
    '; - print '
  • '; - } - // Affichage boite ii - $box=$boxarray[$ii]; - $box->loadBox(); - $box->boxid="$ii"; - $box->showBox(); - if ($conf->use_ajax && $conf->browser->firefox) - { - print '
  • '; - print '
'; - } - - print '
'; - print "
"; } -if ($conf->use_ajax && $conf->browser->firefox && 1==2) +if ($conf->use_ajax && $conf->browser->firefox && $conf->global->MAIN_SHOW_DEVELOPMENT_MODULES) { print ''."\n"; diff --git a/mysql/migration/2.0.0-2.1.0.sql b/mysql/migration/2.0.0-2.1.0.sql index 2aaac2565d8..52ccb2f3419 100644 --- a/mysql/migration/2.0.0-2.1.0.sql +++ b/mysql/migration/2.0.0-2.1.0.sql @@ -478,6 +478,9 @@ alter table llx_facturedet_rec add column total_tva real; alter table llx_facturedet_rec add column total_ttc real; +update llx_boxes set fk_user = 0 where fk_user IS NULL; +ALTER TABLE llx_boxes modify fk_user integer default 0 NOT NULL; + -- Supprimme orphelins pour permettre montée de la clé -- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL; @@ -485,3 +488,4 @@ ALTER TABLE llx_boxes ADD INDEX idx_boxes_boxid (box_id); -- V4 ALTER TABLE llx_boxes ADD CONSTRAINT fk_boxes_box_id FOREIGN KEY (box_id) REFERENCES llx_boxes_def (rowid); ALTER TABLE llx_boxes ADD INDEX idx_boxes_fk_user (fk_user); + diff --git a/mysql/tables/llx_boxes.key.sql b/mysql/tables/llx_boxes.key.sql index eff1dd77edf..4a3c57a4e3e 100644 --- a/mysql/tables/llx_boxes.key.sql +++ b/mysql/tables/llx_boxes.key.sql @@ -24,6 +24,6 @@ -- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL; ALTER TABLE llx_boxes ADD INDEX idx_boxes_boxid (box_id); --- V4 ALTER TABLE llx_boxes ADD CONSTRAINT fk_boxes_box_id FOREIGN KEY (box_id) REFERENCES llx_boxes_def (rowid); +ALTER TABLE llx_boxes ADD CONSTRAINT fk_boxes_box_id FOREIGN KEY (box_id) REFERENCES llx_boxes_def (rowid); ALTER TABLE llx_boxes ADD INDEX idx_boxes_fk_user (fk_user); \ No newline at end of file diff --git a/mysql/tables/llx_boxes.sql b/mysql/tables/llx_boxes.sql index 3ca18850845..39a2ceb0990 100644 --- a/mysql/tables/llx_boxes.sql +++ b/mysql/tables/llx_boxes.sql @@ -30,5 +30,5 @@ create table llx_boxes box_id integer NOT NULL, position smallint NOT NULL, box_order smallint default 0 NOT NULL, - fk_user integer + fk_user integer default 0 )type=innodb; diff --git a/mysql/tables/llx_commandedet.key.sql b/mysql/tables/llx_commandedet.key.sql index 223e1d8a4e4..3614e8cbaaf 100644 --- a/mysql/tables/llx_commandedet.key.sql +++ b/mysql/tables/llx_commandedet.key.sql @@ -24,4 +24,4 @@ -- V4 DELETE llx_commandedet FROM llx_commandedet LEFT JOIN llx_commande ON llx_commandedet.fk_commande = llx_commande.rowid WHERE llx_commande.rowid IS NULL; ALTER TABLE llx_commandedet ADD INDEX idx_commandedet_fk_commande (fk_commande); -ALTER TABLE llx_commandedet ADD CONSTRAINT fk_commandedet_fk_commande FOREIGN KEY (fk_commande) REFERENCES llx_commande (rowid); +-- V4 ALTER TABLE llx_commandedet ADD CONSTRAINT fk_commandedet_fk_commande FOREIGN KEY (fk_commande) REFERENCES llx_commande (rowid);