Tag : gestion

Tag dans document : ajout, enlever
This commit is contained in:
Dany De Bontridder 2013-09-23 16:25:46 +00:00
parent e08a0c946e
commit b2af9acfe4
12 changed files with 383 additions and 2 deletions

View file

@ -0,0 +1,46 @@
<?php
/*
* This file is part of PhpCompta.
*
* PhpCompta is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* PhpCompta is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PhpCompta; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* $Revision$ */
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
$fl=new Follow_Up($cn);
$fl->ag_id=$_REQUEST['ag_id'];
if ( $g_user->can_write_action($fl->ag_id) == TRUE )
$fl->tag_add($_REQUEST['t_id']);
ob_start();
$fl->tag_cell();
$response= ob_get_clean();
ob_end_clean();
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<data>
<ctl></ctl>
<code>$html</code>
</data>
EOF;
exit();
?>

View file

@ -0,0 +1,38 @@
<?php
/**
* @brief display a window with the content of a tag
*/
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once 'class_tool_uos.php';
require_once 'class_tag.php';
ob_start();
$tag=new Tag($cn);
$tag->data->t_id=$_GET['tag'];
$tag->data->load();
echo HtmlInput::title_box("Détail du dossier / tag", "tag_div");
?>
<form id="tag_frm_detail" method="post">
<?php
echo dossier::hidden();
echo HtmlInput::hidden('t_id', $_GET['tag']);
echo HtmlInput::hidden('ac',$_GET['ac']);
$data=$tag->data;
require_once 'template/tag_detail.php';
echo HtmlInput::submit("save_tag", "Valider");
?>
</form>
<?php
$response= ob_get_clean();
ob_end_clean();
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<data>
<ctl></ctl>
<code>$html</code>
</data>
EOF;
exit();
?>

42
include/ajax_tag_list.php Normal file
View file

@ -0,0 +1,42 @@
<?php
/*
* This file is part of PhpCompta.
*
* PhpCompta is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* PhpCompta is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PhpCompta; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* $Revision$ */
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once 'class_tag.php';
ob_start();
$tag=new Tag($cn);
$tag->select();
$response= ob_get_clean();
ob_end_clean();
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<data>
<ctl></ctl>
<code>$html</code>
</data>
EOF;
exit();
?>

View file

@ -0,0 +1,46 @@
<?php
/*
* This file is part of PhpCompta.
*
* PhpCompta is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* PhpCompta is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PhpCompta; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* $Revision$ */
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
$fl=new Follow_Up($cn);
$fl->ag_id=$_REQUEST['ag_id'];
if ( $g_user->can_write_action($fl->ag_id) == TRUE ) $fl->tag_remove($_REQUEST['t_id']);
ob_start();
$fl->tag_cell();
$response= ob_get_clean();
ob_end_clean();
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<data>
<ctl></ctl>
<code>$html</code>
</data>
EOF;
exit();
?>

View file

@ -24,4 +24,31 @@
* @brief Manage the tags
*
*/
require_once 'class_tag.php';
require_once 'class_tool_uos.php';
$tag=new Tag($cn);
$uos=new Tool_Uos('tag');
if ( isset ($_POST['save_tag']))
{
try {
$uos->check();
$tag->save($_POST);
$uos->save();
} catch (Exception $e)
{
alert("déjà sauvé");
}
}
?>
<div style="margin-left:10%;width:80%">
<p class="notice">
Vous pouvez utiliser ceci comme des tags pour marquer des documents ou
comme des dossiers pour rassembler des documents. Un document peut appartenir
à plusieurs dossiers ou avoir plusieurs tags.
</p>
<?php
$tag->show_list();
$js=sprintf("onclick=\"show_tag('%s','%s','%s')\"",Dossier::id(),$_REQUEST['ac'],'-1');
echo HtmlInput::button("tag_add", "Ajout d'un dossier", $js);
?>

View file

@ -37,6 +37,7 @@ require_once('class_follow_up_detail.php');
require_once('class_inum.php');
require_once 'class_sort_table.php';
require_once 'class_irelated_action.php';
require_once 'class_tag.php';
/**
* \file
@ -509,6 +510,7 @@ class Follow_Up
$Hid = new IHidden();
$r.=$Hid->input("nb_item", MAX_ARTICLE);
$r.=HtmlInput::request_to_hidden(array("closed_action","remind_date_end","remind_date","sag_ref","only_internal","state","qcode", "ag_dest_query", "query", "tdoc", "date_start", "date_end", "hsstate"));
$a_tag=$this->tag_get();
/* get template */
ob_start();
require_once 'template/detail-action.php';
@ -1409,4 +1411,64 @@ class Follow_Up
jr_id=$1",array($p_jr_id));
return $array;
}
/**
* @brief get the tags of the current objet
* @return an array idx [ag_id,t_id,at_id,t_tag]
*/
function tag_get()
{
if ($this->ag_id==0)return;
$sql='select b.ag_id,b.t_id,b.at_id,a.t_tag'
. ' from '
.' tags as a join action_tags as b on (a.t_id=b.t_id)'
. ' where ag_id=$1 '
.' order by a.t_tag';
$array=$this->db->get_array($sql,array($this->ag_id));
return $array;
}
/**
* @brief show the tags of the current objet
* normally used by ajax. The same tag cannot be added twice
*
*/
function tag_add($p_t_id)
{
if ($this->ag_id==0)return;
$count=$this->db->get_value('select count(*) from action_tags'.
' where ag_id=$1 and t_id=$2',
array($this->ag_id,$p_t_id));
if ( $count > 0 ) return;
$sql=' insert into action_tags (ag_id,t_id) values ($1,$2)';
$this->db->exec_sql($sql,array($this->ag_id,$p_t_id));
}
/**
* @brief remove the tags of the current objet
* normally used by ajax
*/
function tag_remove($p_t_id)
{
if ($this->ag_id==0)return;
$sql=' delete from action_tags where ag_id=$1 and t_id=$2';
$this->db->exec_sql($sql,array($this->ag_id,$p_t_id));
}
function tag_cell()
{
$a_tag=$this->tag_get();
$c=count($a_tag);
for ($e=0;$e<$c;$e++) {
$js_remove=sprintf("onclick=\"action_tag_remove('%s','%s','%s')\"",dossier::id(),$this->ag_id,
$a_tag[$e]['t_id']);
echo '<span style="border:1px solid black">';
echo $a_tag[$e]['t_tag'];
echo '</span>';
echo '<span style="background-color:red;text-align:center;border-top:1px solid black; border-right:1px solid black;border-bottom:1px solid black;">';
echo HtmlInput::anchor("X", "javascript:void(0)", $js_remove).'&nbsp;&nbsp;';
echo '</span>';
echo '&nbsp;';
}
$js=sprintf("onclick=\"action_tag_select('%s','%s')\"",dossier::id(),$this->ag_id);
echo HtmlInput::button('tag_bt', 'Ajout tag',$js, 'smallbutton');
}
}

View file

@ -31,7 +31,31 @@ class Tag
{
$ret=$this->data->seek(' order by t_tag');
if ( $this->cn->count($ret) == 0) return "";
require_once 'template/tag_list.php';
}
function select()
{
$ret=$this->data->seek(' order by t_tag');
if ( $this->cn->count($ret) == 0) return "aucun tag trouvé";
require_once 'template/tag_select.php';
}
function form_add()
{
$data=$this->data;
require_once 'template/tag_detail.php';
}
function show_form_add()
{
echo '<h2>'.' Ajout d\'un dossier (ou tag)'.'</h2>';
$this->form_add();
}
function save($p_array)
{
$this->data->t_id=$p_array['t_id'];
$this->data->t_tag=str_ireplace('<script>','<_script_>',$p_array['t_tag']);
$this->data->t_description=str_ireplace('<script>','<_script_>',$p_array['t_description']);
$this->data->save();
}
}

View file

@ -30,7 +30,7 @@ class Tag_SQL extends phpcompta_sql
function __construct(& $p_cn, $p_id = -1)
{
$this->table = "public.tag";
$this->table = "public.tags";
$this->primary_key = "t_id";
$this->name = array(

View file

@ -124,8 +124,17 @@
</TD>
<td>
<?php echo $str_ag_dest;?>
</tr>
<tr>
<TD>
Dossier / tags
</TD>
<td id="action_tag_td">
<?php
$this->tag_cell();
?>
</td>
</TR>
</table>

View file

@ -0,0 +1,16 @@
<?php
echo Dossier::hidden();
echo HtmlInput::hidden('t_id',$data->t_id);
echo HtmlInput::hidden('ac',$_REQUEST['ac']);
$uos=new Tool_Uos('tag');
echo $uos->hidden();
$t_tag=new IText('t_tag',$data->t_tag);
$t_description=new ITextarea('t_description',$data->t_description);
$t_description->style=' class="itextarea" style="width:50em;height:5em;vertical-align: top;"';
?>
<p>
Nom de Dossier (tag) : <?php echo $t_tag->input(); ?>
</p>
<p>
Description (tag) : <?php echo $t_description->input(); ?>
</p>

View file

@ -0,0 +1,35 @@
<?php
$max=$this->cn->count($ret);
?>
<table>
<tr>
<th>
Tag
</th>
<th>
Description
</th>
</tr>
<?php
$gDossier=Dossier::id();
$ac=$_REQUEST['ac'];
for ($i=0;$i<$max;$i++):
$row=Database::fetch_array($ret, $i);
?>
<tr class="<?php echo (($i%2==0)?'even':'odd');?>">
<td>
<?php
$js=sprintf("show_tag('%s','%s','%s')",$gDossier,$ac,$row['t_id']);
echo HtmlInput::anchor($row['t_tag'], "", "onclick=\"$js\"");
?>
</td>
<td>
<?php
echo $row['t_description'];
?>
</td>
</tr>
<?php
endfor;
?>
</table>

View file

@ -0,0 +1,36 @@
<?php
echo HtmlInput::title_box('Tag', 'tag_div');
$max=$this->cn->count($ret);
?>
<table>
<tr>
<th>
Tag
</th>
<th>
Description
</th>
</tr>
<?php
$gDossier=Dossier::id();
if (isNumber($_REQUEST['ag_id']) == 0 ) die ('ERROR : parameters invalid');
for ($i=0;$i<$max;$i++):
$row=Database::fetch_array($ret, $i);
?>
<tr class="<?php echo (($i%2==0)?'even':'odd');?>">
<td>
<?php
$js=sprintf("action_tag_add('%s','%s','%s')",$gDossier,$_REQUEST['ag_id'],$row['t_id']);
echo HtmlInput::anchor($row['t_tag'], "", "onclick=\"$js\"");
?>
</td>
<td>
<?php
echo $row['t_description'];
?>
</td>
</tr>
<?php
endfor;
?>
</table>