Suite dev pour grer le drag and drop des boxes ainsi que liste des box propres a chaque user

This commit is contained in:
Laurent Destailleur 2006-11-01 15:15:14 +00:00
parent 245dea6f48
commit 67b6803078
8 changed files with 152 additions and 79 deletions

View File

@ -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;
}
}
?>

View File

@ -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"');
}
}

View File

@ -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++;
}

View File

@ -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 '</td></tr></table>';
* 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 '<br>';
print_fiche_titre($langs->trans("OtherInformationsBoxes"));
print '<table width="100%" class="notopnoleftnoright">';
}
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 "<tr>\n";
print '<td valign="top" width="50%">';
print '<div id="boxto_'.$ii.'">';
if ($conf->use_ajax && $conf->browser->firefox)
{
print '<ul class="nocellnopadd" height="100px" id="box_'.$ii.'">';
print '<li class="nocellnopadd" height="100px">';
}
// Affichage boite ii
$box=$boxarray[$ii];
$box->loadBox();
$box->boxid="$ii";
$box->showBox();
if ($conf->use_ajax && $conf->browser->firefox)
{
print '</li>';
print '</ul>';
}
print '</div>';
print "</td>";
if ($ii % $NBCOLS == ($NBCOLS-1)) print "</tr>\n";
}
if ($ii % $NBCOLS == 0) print "<tr>\n";
print '<td valign="top" width="50%">';
print '<div id="boxto_'.$ii.'">';
if ($conf->use_ajax && $conf->browser->firefox)
{
print '<ul class="nocellnopadd" height="100px" id="box_'.$ii.'">';
print '<li class="nocellnopadd" height="100px">';
}
// Affichage boite ii
$box=$boxarray[$ii];
$box->loadBox();
$box->boxid="$ii";
$box->showBox();
if ($conf->use_ajax && $conf->browser->firefox)
{
print '</li>';
print '</ul>';
}
print '</div>';
print "</td>";
if ($ii % $NBCOLS == ($NBCOLS-1)) print "</tr>\n";
}
if (sizeof($boxarray))
{
if ($ii % $NBCOLS == ($NBCOLS-1)) print "</tr>\n";
print "</table>";
}
if ($conf->use_ajax && $conf->browser->firefox && 1==2)
if ($conf->use_ajax && $conf->browser->firefox && $conf->global->MAIN_SHOW_DEVELOPMENT_MODULES)
{
print '<script type="text/javascript" language="javascript">'."\n";
for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++)
@ -543,7 +555,8 @@ if ($conf->use_ajax && $conf->browser->firefox && 1==2)
print ");\n";
*/
print 'new Draggable(\'boxobject_'.$ii.'\', {revert:false});'."\n";
print 'Droppables.add(\'boxto_'.$ii.'\', {onDrop:function(element,dropon){alert(\'From: \' + encodeURIComponent(element.id) + \' - To: \' + encodeURIComponent(dropon.id))}});'."\n";
//print 'Droppables.add(\'boxto_'.$ii.'\', {onDrop:function(element,dropon){alert(\'From: \' + encodeURIComponent(element.id) + \' - To: \' + encodeURIComponent(dropon.id))}});'."\n";
print 'Droppables.add(\'boxto_'.$ii.'\', {onDrop:function(element,dropon){ window.location.href=\''.$_SERVER["PHP_SELF"].'?switchfrom=\'+encodeURIComponent(element.id)+\'&switchto=\'+encodeURIComponent(dropon.id); }});'."\n";
//print 'Droppables.add(\'box_'.$ii.'\', {onDrop:function(element,dropon){alert(\'w/o hoverclass, should be:\' + encodeURIComponent(element.id) )}});'."\n";
}
print '</script>'."\n";

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);