Tag and Group Tag

new : Tag and Group : available in search
new : all tags or only one,
This commit is contained in:
Dany De Bontridder 2020-10-04 20:34:09 +02:00
parent dbea6cee68
commit 037a423a3b
19 changed files with 617 additions and 60 deletions

View file

@ -261,7 +261,11 @@ $path = array(
// cfgaction type of document
"cfgaction"=>'ajax_cfgaction',
// list options for multiple contact
"contact_option_list"=>'ajax_contact_option_list'
"contact_option_list"=>'ajax_contact_option_list',
// Add group of tags
'tag_group'=>'ajax_tag_group',
// set the group for a tag
'tag_set_group'=>"ajax_tag_set_group"
) ;
if (array_key_exists($op, $path)) {

View file

@ -24,7 +24,8 @@
*
*/
var ask_reload = 0;
var tag_choose = '';
// tag_choose Element which contains all the selected tags
var tag_choose = '';
var aDraggableElement = new Array();
/**
* return undefined if nothing is found , otherwise return the DOM elemnt
@ -2487,7 +2488,7 @@ function show_tag(p_dossier, p_ac, p_tag_id, p_post)
code_html = unescape_xml(code_html);
remove_waiting_box();
var posy = calcy(250);
add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0, style: "position:fixed;top:" + posy + "px"});
add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0, style: "position:fixed;top:15%;"});
$('tag_div').innerHTML = code_html;
try
{
@ -2711,8 +2712,10 @@ function search_display_tag(p_dossier, p_prefix)
* in the search screen
* @param {type} p_dossier
* @param {type} p_tag_id
* @param p_prefix is the prefix of the widget
* @param p_obj is either g for group of tag or t for a single tag
*/
function search_add_tag(p_dossier, p_tag_id, p_prefix)
function search_add_tag(p_dossier, p_tag_id, p_prefix,p_obj)
{
try {
var clear_button = 0;
@ -2721,7 +2724,7 @@ function search_add_tag(p_dossier, p_tag_id, p_prefix)
clear_button = 1;
}
waiting_box();
var queryString = "op=search_add_tag&gDossier=" + p_dossier + "&id=" + p_tag_id + "&clear=" + clear_button + '&pref=' + p_prefix;
var queryString = "op=search_add_tag&gDossier=" + p_dossier + "&id=" + p_tag_id + "&clear=" + clear_button + '&pref=' + p_prefix+"&obj="+p_obj;
var action = new Ajax.Request(
"ajax_misc.php",
{

70
html/js/taggroup.js Normal file
View file

@ -0,0 +1,70 @@
/*
* Copyright (C) 2020 Dany De Bontridder <dany@alchimerys.be>
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// Copyright (2002-2020) Author Dany De Bontridder <danydb@noalyss.eu>
var TagGroup = function ()
{
this.callback = "ajax_misc.php";
this.param_operation = "tag_set_group";
this.list_tag = "ol_tag_group";
this.div_tag_add = "d_tag_group_add";
/**
* Add a tag to group and redraw the div "div_tag_add"
* @param {int} p_tag_group_id
* @param {int} p_tag_id
* @param {int} p_dossier
*/
this.add_tag = function (p_tag_group_id, p_select, p_dossier) {
waiting_box();
// retrieve value from p_select
var p_tag_id = $(p_select).value;
new Ajax.Request(this.callback, {
method: "get",
parameters: {op: this.param_operation, gDossier: p_dossier, act: "add", tag_group: p_tag_group_id, tag: p_tag_id},
onSuccess: function (req) {
remove_waiting_box();
// redraw div_tag_add
$("d_tag_group_add").update(req.responseText);
}
});
};
/**
* removing a tag from a group and redraw the div "div_tag_add"
* @param {int} p_tag_group_id
* @param {int} p_tag_id
* @param {int} p_dossier
*/
this.remove = function (p_jt_tag, p_dossier) {
waiting_box();
new Ajax.Request(this.callback, {
method: "get",
parameters: {op: this.param_operation,
gDossier: p_dossier,
act: "remove",
jt_tag: p_jt_tag
},
onSuccess: function (req) {
remove_waiting_box();
// redraw div_tag_add
$("d_tag_group_add").update(req.responseText);
}
});
};
};

View file

@ -1,4 +1,5 @@
<?php
/*
* This file is part of NOALYSS.
*
@ -17,23 +18,42 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// Copyright Author Dany De Bontridder danydb@aevalys.eu
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
if (!defined('ALLOWED'))
die('Appel direct ne sont pas permis');
/**
*@file
*@brief add tag , used for follow up
*@see Tag
* @file
* @brief add tag , used for follow up
* @see Tag
*/
require_once NOALYSS_INCLUDE.'/class/tag.class.php';
//Single Tag
ob_start();
if ($_GET['clear']==1) {
if ($_GET['clear']==1)
{
/* Add a clear button */
echo Tag::add_clear_button($_GET['pref']);
}
$tag=new Tag($cn,$_GET['id']);
$tag->update_search_cell($_GET['pref']);
if ($http->request("obj")=='t')
{
$response= ob_get_clean();
$tag=new Tag($cn, $http->get("id", "number"));
$tag->update_search_cell($http->get("pref"));
}
elseif ($http->request("obj")=="g")
{
// Add all the tag from the group
$aTag=$cn->get_array("select t_id,t_tag from jnt_tag_group_tag jtgt join tags on (tag_id=t_id) where tag_group_id=1 order by 2 ");
$nb_atag=count($aTag);
$pref=$http->get("pref");
if ( $nb_atag > 0) {
for ($i=0;$i<$nb_atag;$i++){
$tag=new Tag($cn,$aTag[$i]['t_id']);
$tag->update_search_cell($pref);
}
}
}
$response=ob_get_clean();
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF
@ -44,7 +64,5 @@ echo <<<EOF
</data>
EOF;
exit();
?>

View file

@ -25,11 +25,10 @@ if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
*/
require_once NOALYSS_INCLUDE.'/class/tag.class.php';
ob_start();
$tag=new Tag($cn);
$tag->select_search($_GET['pref']);
$response= ob_get_clean();
$response= $tag->select_search($_GET['pref']);
$html=escape_xml($response);
header('Content-type: text/xml; charset=UTF-8');
echo <<<EOF

View file

@ -13,7 +13,7 @@ ob_start();
$tag=new Tag($cn);
$tag->data->t_id=$_GET['tag'];
$tag->data->load();
echo HtmlInput::title_box(_("Détail du dossier ou étiquette"), "tag_div");
echo HtmlInput::title_box(_("Détail du dossier ou étiquette"), "tag_div","close","","y");
?>
<?php

View file

@ -0,0 +1,64 @@
<?php
/*
* This file is part of NOALYSS.
*
* 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
*/
// Copyright (2002-2020) Author Dany De Bontridder <danydb@noalyss.eu>
if (!defined('ALLOWED'))
die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE."/class/tag_group_mtable.class.php";
/**
* @file
* @brief Manage the group of tags
*/
try {
$table=$http->request('table');
$action=$http->request('action');
$p_id=$http->request('p_id', "number");
$ctl_id=$http->request('ctl');
} catch(Exception $e) {
echo $e->getMessage();
return;
}
$obj=new Tag_Group_SQL($cn,$p_id);
$obj_manage=new Tag_Group_MTable($obj);
$obj_manage->set_callback("ajax_misc.php");
$obj_manage->add_json_param("op", "tag_group");
$obj_manage->set_object_name($ctl_id);
if ($action=="input")
{
header('Content-type: text/xml; charset=UTF-8');
echo $obj_manage->ajax_input()->saveXML();
return;
}
elseif ($action=="save")
{
$xml=$obj_manage->ajax_save();
header('Content-type: text/xml; charset=UTF-8');
echo $xml->saveXML();
}
elseif ($action=="delete")
{
$xml=$obj_manage->ajax_delete();
header('Content-type: text/xml; charset=UTF-8');
echo $xml->saveXML();
}

View file

@ -0,0 +1,77 @@
<?php
/*
* This file is part of NOALYSS.
*
* 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
*/
// Copyright (2002-2020) Author Dany De Bontridder <danydb@noalyss.eu>
if (!defined('ALLOWED'))
die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE."/class/tag_group_mtable.class.php";
/**
* @file
* @brief
*/
global $g_user;
$g_user->can_request('CFGTAG');
/*
* Received parameter
* gDossier
* act : action to perform
* tag_group : tag_group.tg_id
* tag=tags.t_id
*
*/
try
{
$act=$http->request("act");
}
catch (Exception $e)
{
record_log(__FILE__.$e->getMessage()." ".$e->getTraceAsString());
echo $e->getMessage()." ".$e->getTraceAsString();
}
$obj=new Tag_Group_SQL($cn);
$obj_manage=new Tag_Group_MTable($obj);
$obj_manage->set_callback("ajax_misc.php");
$obj_manage->add_json_param("op", "tag_group");
if ($act=="add")
{
$tag_group_id=$http->request("tag_group");
$tag=$http->request("tag");
$obj_manage->set_pk($tag_group_id);
// add tag to group tag
// protect against duplicate
if ($cn->get_value("select count (*) from jnt_tag_group_tag where tag_id = $1 and tag_group_id = $2",
[$tag, $tag_group_id])==0)
{
$cn->exec_sql("insert into jnt_tag_group_tag(tag_id,tag_group_id) values ($1,$2)", [$tag, $tag_group_id]);
}
}
elseif ($act=="remove")
{
$tag=$http->request("jt_tag");
$tag_group_id=$cn->get_value("select tag_group_id from jnt_tag_group_tag where jt_id = $1",[$tag]);
$obj_manage->set_pk($tag_group_id);
// remove tag from tag_group
$cn->exec_sql("delete from jnt_tag_group_tag where jt_id=$1", [$tag]);
}
$obj_manage->input_tag();

View file

@ -17,7 +17,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// Copyright Author Dany De Bontridder danydb@aevalys.eu
if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
if (!defined('ALLOWED'))
die('Appel direct ne sont pas permis');
/**
* @file
@ -26,34 +27,82 @@ if ( !defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
*/
require_once NOALYSS_INCLUDE.'/class/tag.class.php';
require_once NOALYSS_INCLUDE.'/lib/single_record.class.php';
require_once NOALYSS_INCLUDE."/lib/html_tab.class.php";
require_once NOALYSS_INCLUDE."/lib/output_html_tab.class.php";
require_once NOALYSS_INCLUDE."/class/tag_group_mtable.class.php";
/* * *****************************************************************************
* Tags
*
* ***************************************************************************** */
$tabs=new Html_Tab("tg", _("Etiquette"));
ob_start();
$tag=new Tag($cn);
$uos=new Single_Record('tag');
if ( isset ($_POST['save_tag_sb']))
if (isset($_POST['save_tag_sb']))
{
if ( ! isset ($_POST['remove']))
if (!isset($_POST['remove']))
{
try {
try
{
$uos->check();
$tag->save($_POST);
$uos->save();
} catch (Exception $e)
}
catch (Exception $e)
{
alert("déjà sauvé");
}
} else {
}
else
{
$tag->remove($_POST);
}
}
?>
<div style="margin-left:10%;width:80%">
<p class="notice">
<?php echo _("Vous pouvez utiliser ceci comme des étiquettes pour marquer des documents ou
<div style="margin-left:5%;width:90%">
<p class="info">
<?php echo _("Vous pouvez utiliser ceci comme des étiquettes pour marquer des documents ou
comme des dossiers pour rassembler des documents. Un document peut appartenir
à plusieurs dossiers ou avoir plusieurs étiquettes.");?>
</p>
<?php
$tag->show_list();
$js=sprintf("onclick=\"show_tag('%s','%s','%s','p')\"",Dossier::id(),$_REQUEST['ac'],'-1');
echo HtmlInput::button("tag_add", "Ajout d'un tag", $js);
?>
à plusieurs dossiers ou avoir plusieurs étiquettes."); ?>
</p>
<?php
$tag->show_list();
$js=sprintf("onclick=\"show_tag('%s','%s','%s','p')\"", Dossier::id(), $_REQUEST['ac'], '-1');
echo HtmlInput::button("tag_add", "Ajout d'un tag", $js);
?>
</div>
<?php
$tabs->set_content(ob_get_contents());
ob_end_clean();
/* * *****************************************************************************
* Group of Tags
*
* ***************************************************************************** */
$tag_group=new Html_Tab("grp_tg", _("Groupe étiquettes"));
$obj=new Tag_Group_SQL($cn);
$obj_manage=new Tag_Group_MTable($obj);
$obj_manage->set_callback("ajax_misc.php");
$obj_manage->add_json_param("op", "tag_group");
ob_start();
$obj_manage->display_table();
$r=ob_get_contents();
$tag_group->set_content($r);
ob_end_clean();
$out=new Output_Html_Tab();
$out->add($tabs);
$out->add($tag_group);
$out->output();
$obj_manage->create_js_script();
?>
<script>
$('divtg').show();
$('tabtg').className = 'tabs_selected';
$('divgrp_tg').hide();
$('tabgrp_tg').className = 'tabs';
var o_tagGroup=new TagGroup();
</script>

View file

@ -1202,15 +1202,26 @@ class Follow_Up
if ($p_array==null)
$p_array=$_GET;
$query="";
if (count($p_array['searchtag'])==0)
return "";
$query="";
$operand = "1 = 0 ";
if ($p_array['tag_option'] == 0 )
{
$operand=" and ";
} elseif ($p_array['tag_option']==1)
{
$operand=" or ";
}
$and=" ";
for ($i=0; $i<count($p_array['searchtag']); $i++)
{
if (isNumber($p_array['searchtag'][$i])==1)
$query .= ' and ag_id in (select ag_id from action_tags where t_id= '.sql_string($p_array['searchtag'][$i]).')';
if (isNumber($p_array['searchtag'][$i])==1) {
$query .= $and .' ag_id in (select ag_id from action_tags where t_id= '.sql_string($p_array['searchtag'][$i]).')';
$and = $operand;
}
}
return $query;
return "and (".$query.")";
}
/**
@ -1479,12 +1490,12 @@ class Follow_Up
$c=count($a_tag);
for ($e=0; $e<$c; $e++)
{
echo '<span style="border:1px solid black;margin-right:5px;">';
echo '<span style="border-radius:3px;border:1px solid;padding:5px;margin:1px">';
echo $a_tag[$e]['t_tag'];
if ($g_user->can_write_action($this->ag_id)==true)
{
$js_remove=sprintf("onclick=\"action_tag_remove('%s','%s','%s')\"", dossier::id(), $this->ag_id, $a_tag[$e]['t_id']);
echo HtmlInput::anchor(SMALLX, "javascript:void(0)", $js_remove, ' class="smallbutton" style="padding:0px;display:inline" ');
$js_remove=sprintf("action_tag_remove('%s','%s','%s')", dossier::id(), $this->ag_id, $a_tag[$e]['t_id']);
echo Icon_Action::trash(uniqid(), $js_remove);
}
echo '</span>';
echo '&nbsp;';

View file

@ -90,18 +90,20 @@ class Tag
*/
function select_search($p_prefix)
{
$res="";
$ret=$this->data->seek(' order by t_tag');
require_once NOALYSS_TEMPLATE.'/tag_search_select.php';
return HtmlInput::title_box('Tag', $p_prefix.'tag_div').$res;
}
/**
* In the screen search add this data to the cell
*/
function update_search_cell($p_prefix) {
echo '<span id="sp_'.$p_prefix.$this->data->t_id.'" style="border:1px solid black;margin-right:5px;">';
echo '<span id="sp_'.$p_prefix.$this->data->t_id.'" style="border-radius:3px;border:1px solid;padding:5px;margin:1px">';
echo h($this->data->t_tag);
echo HtmlInput::hidden($p_prefix.'tag[]', $this->data->t_id);
$js=sprintf("$('sp_".$p_prefix.$this->data->t_id."').remove();");
echo HtmlInput::anchor( SMALLX, "javascript:void(0)", "onclick=\"$js\"", ' class="smallbutton " style="padding:0px;display:inline" ');
echo Icon_Action::trash(uniqid(), $js);
echo '</span>';
}
/**

View file

@ -0,0 +1,91 @@
<?php
/*
* This file is part of NOALYSS.
*
* 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
*/
// Copyright (2002-2020) Author Dany De Bontridder <danydb@noalyss.eu>
/**
* @file
* @brief manage tag_group table
*
*
*/
require_once NOALYSS_INCLUDE.'/lib/manage_table_sql.class.php';
require_once NOALYSS_INCLUDE.'/database/tag_group_sql.class.php';
class Tag_Group_MTable extends Manage_Table_SQL
{
function __construct(Tag_Group_SQL $p_obj)
{
parent::__construct($p_obj);
$this->set_property_visible("tg_id", false);
$this->set_property_updatable("tg_id", false);
$this->set_col_label("tg_name", _('Nom'));
}
function input()
{
parent::input();
echo '<div id="d_tag_group_add">';
$this->input_tag();
echo '</div>';
}
/**
* Display a select widget for adding new tag
*/
function input_tag()
{
$cn=Dossier::connect();
$data_sql=$this->get_table();
// Display containing tag_id
$aTag=$cn->get_array("select jt_id,t_tag
from tags join jnt_tag_group_tag on (tag_id=t_id)
where tag_group_id=$1 order by 2", [$data_sql->tg_id]);
echo '<ol id="ol_tag_group">';
$nb=count($aTag);
$dossier_id=Dossier::id();
for ($i=0; $i<$nb; $i++)
{
// js to remove id
$js=Icon_Action::trash(uniqid(), sprintf("o_tagGroup.remove('%s','%s')", $aTag[$i]['jt_id'], $dossier_id));
printf('<li id="t%s"> %s %s %s</li>', $aTag[$i]['jt_id'],$aTag[$i]['t_tag'],$dossier_id,$js);
}
echo '</ol>';
// Add new tag
$select=new ISelect("is_tag", [], "s_tag_group");
$select->value=$cn->make_array("select t_id,t_tag
from tags
where
t_id not in (select tag_id from jnt_tag_group_tag
where tag_group_id=$1 ) order by 2", 0,[$data_sql->tg_id]);
echo $select->input();
echo HtmlInput::button('b_add_group', _("Ajout"),
sprintf("onclick=\"o_tagGroup.add_tag('%s','%s','%s'); \"", $data_sql->tg_id, $select->id, $dossier_id));
}
}

View file

@ -0,0 +1,62 @@
<?php
/**
* Autogenerated file
* This file is part of NOALYSS.
*
* NOALYSS 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.
*
* NOALYSS 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 NOALYSS; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
require_once NOALYSS_INCLUDE.'/lib/noalyss_sql.class.php';
require_once NOALYSS_INCLUDE.'/class/database.class.php';
/**
* class_tag_group_sql.php
*
*@file
*@brief abstract of the table public.tag_group */
class Tag_group_SQL extends Noalyss_SQL
{
function __construct(Database $p_cn,$p_id=-1)
{
$this->table = "public.tag_group";
$this->primary_key = "tg_id";
/*
* List of columns
*/
$this->name=array(
"tg_id"=>"tg_id"
,"tg_name"=>"tg_name"
);
/*
* Type of columns
*/
$this->type = array(
"tg_id"=>"numeric"
,"tg_name"=>"text"
);
$this->default = array(
"tg_id" => "auto"
);
$this->date_format = "DD.MM.YYYY";
parent::__construct($p_cn,$p_id);
}
}

View file

@ -2782,6 +2782,7 @@ function load_all_script()
echo js_include('sorttable.js');
echo js_include('nicEdit.js');
echo js_include('managetable.js');
echo js_include('taggroup.js');
}

View file

@ -828,12 +828,12 @@ class HtmlInput
/**
* Title for boxes, you can customize the symbol thanks symbol with
* the mode "custom"
* @param type $name Title
* @param type $div element id, except for mode none or custom
* @param type $mod hide , close , zoom , custom or none, with
* @param string $p_name Title
* @param string $div element id, except for mode none or custom
* @param string $p_mod hide , close , zoom , custom or none, with
* custom , the $name contains all the code
* @param type $p_js contains the javascript if mod = "custom" or "zoom" contains button + code
* @param type $p_draggable , if set to yes the box will be draggable
* @param string $p_js contains the javascript if mod = "custom" or "zoom" contains button + code
* @param char $p_draggable , y = yes n = no ,if set to yes the box will be draggable
* @return type
*/
static function title_box($p_name, $p_div, $p_mod="close", $p_js="",
@ -868,7 +868,9 @@ class HtmlInput
$r.="";
}
else
die(__FILE__.":".__LINE__._('Paramètre invaide'));
{
throw new Exception(__FILE__.":".__LINE__._("Paramètre invalide p_mod = '$p_mod'"));
}
$r.='</div>';

View file

@ -140,6 +140,18 @@
?>
</span>
</p>
<p>
<?php
echo _("Option étiquettes");
$iselect= new ISelect("tag_option");
$iselect->value=array(
array("value"=>0,"label"=>_("Toutes les étiquettes")),
array("value"=>1,"label"=>_("Au moins une étiquette"))
);
$iselect->set_value($http->request("tag_option","number",0));
echo $iselect->input();
?>
</p>
<input type="hidden" name="sa" value="list">
<?php echo $supl_hidden?>

View file

@ -2,6 +2,7 @@
//This file is part of NOALYSS and is under GPL
//see licence.txt
?><?php
$http=new HttpInput();
$max=$this->cn->count($ret);
echo HtmlInput::filter_table("tag_tb", '0,1', '1');
$nDossier=Dossier::id();
@ -14,13 +15,19 @@ $nDossier=Dossier::id();
<th>
<?php echo _("Description")?>
</th>
<th>
<?php echo _("Actif")?>
</th>
</tr>
<?php
$gDossier=Dossier::id();
$ac=$_REQUEST['ac'];
$ac=$http->request('ac');
for ($i=0;$i<$max;$i++):
$row=Database::fetch_array($ret, $i);
?>
$row=Database::fetch_array($ret, $i);
?>
<tr class="<?php echo (($i%2==0)?'even':'odd');?>">
<td>
<?php
@ -33,6 +40,7 @@ $ac=$_REQUEST['ac'];
echo $row['t_description'];
?>
</td>
<td>
<?php
$id=sprintf("tag_onoff%d",$row['t_id']);

View file

@ -2,12 +2,15 @@
//This file is part of NOALYSS and is under GPL
//see licence.txt
?><?php
echo HtmlInput::title_box('Tag', $p_prefix.'tag_div');
$max=$this->cn->count($ret);
if ( $max == 0 ) {
echo h2(_("Aucune étiquette disponible"),' class="notice"');
return;
}
require_once NOALYSS_INCLUDE."/lib/output_html_tab.class.php";
$tab_tag=new Html_Tab($p_prefix."tab_tag",_("Etiquettes"));
ob_start();
?>
<?php echo _("Cherche")." ".HtmlInput::filter_table($p_prefix.'tag_tb_id', '0,1', 1); ?>
<?php echo HtmlInput::button_action(_('Uniquement actif'), 'show_only_row(\''.$p_prefix.'tag_tb_id'.'\',\'tag_status\',\'Y\')');?>
@ -30,13 +33,13 @@ $gDossier=Dossier::id();
<tr <?=$attr?> class="<?php echo (($i%2==0)?'even':'odd');?>">
<td>
<?php
$js=sprintf("search_add_tag('%s','%s','%s')",$gDossier,$row['t_id'],$p_prefix);
$js=sprintf("search_add_tag('%s','%s','%s','t')",$gDossier,$row['t_id'],$p_prefix);
echo HtmlInput::anchor($row['t_tag'], "", "onclick=\"$js\"");
?>
</td>
<td>
<?php
echo $row['t_description'];
echo h($row['t_description']);
?>
</td>
<td>
@ -51,7 +54,55 @@ $gDossier=Dossier::id();
endfor;
?>
</table>
<?php
$tab_tag->set_content(ob_get_contents());
ob_end_clean();
// Tab for the groups
//
$tab_tag_group=new Html_Tab($p_prefix."tab_tag_group",_("Groupe"));
$aGroup=$this->cn->get_array("select tg_id, tg_name from tag_group order by 2 desc");
$nb_agroup=count($aGroup);
?>
<table class="result">
<tr>
<th><?=_("Groupe")?></th>
</tr>
<?php for ($i=0;$i<$nb_agroup;$i++):?>
<tr>
<td>
<?php
$js=sprintf("search_add_tag('%s','%s','%s','g')",$gDossier,$aGroup[$i]['tg_id'],$p_prefix);
echo HtmlInput::anchor($aGroup[$i]['tg_name'], "", "onclick=\"$js\"");
?>
</td>
</tr>
<?php endfor;?>
</table>
<?php
$tab_tag_group->set_content(ob_get_contents());
ob_end_clean();
// Both tab
$output=new Output_Html_Tab();
$output->add($tab_tag);
$output->add($tab_tag_group);
ob_start();
$output->output();
?>
<?=HtmlInput::button_close($p_prefix.'tag_div')?>
<script>
show_only_row('<?=$p_prefix?>tag_tb_id','tag_status','Y');
</script>
<?=HtmlInput::button_close($p_prefix.'tag_div')?>
<?=$output->build_js($p_prefix."tab_tag");?>
</script>
<?php
$res =ob_get_contents();
ob_end_clean();
return $res;
?>

View file

@ -139,4 +139,37 @@ ALTER TABLE public.contact_option_ref DROP COLUMN document_option_id;
-- on utilise un varchar pour stocker les possibilités
ALTER TABLE public.contact_option_ref DROP COLUMN cor_value_json;
ALTER TABLE public.contact_option_ref ADD cor_value_select varchar NULL;
COMMENT ON COLUMN public.contact_option_ref.cor_value_select IS 'Select values';
COMMENT ON COLUMN public.contact_option_ref.cor_value_select IS 'Select values';
CREATE TABLE public.tag_group (
tg_id bigserial NOT NULL,
tg_name varchar NOT NULL
);
COMMENT ON TABLE public.tag_group IS 'Group of tags';
-- Column comments
COMMENT ON COLUMN public.tag_group.tg_name IS 'Nom du groupe';
ALTER TABLE public.tag_group ADD CONSTRAINT tag_group_pk PRIMARY KEY (tg_id);
-- public.jnt_tag_group_tag definition
-- Drop table
-- DROP TABLE public.jnt_tag_group_tag;
CREATE TABLE public.jnt_tag_group_tag (
tag_group_id int8 NOT NULL,
tag_id int8 NOT NULL,
jt_id serial NOT NULL,
CONSTRAINT jnt_tag_group_tag_pkey PRIMARY KEY (jt_id),
CONSTRAINT jnt_tag_group_tag_un UNIQUE (tag_id, tag_group_id)
);
COMMENT ON TABLE public.jnt_tag_group_tag IS 'Many to Many table betwwen tag and tag group';
-- public.jnt_tag_group_tag foreign keys
ALTER TABLE public.jnt_tag_group_tag ADD CONSTRAINT jnt_tag_group_tag_fk FOREIGN KEY (tag_id) REFERENCES tags(t_id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE public.jnt_tag_group_tag ADD CONSTRAINT jnt_tag_group_tag_fk_1 FOREIGN KEY (tag_group_id) REFERENCES tag_group(tg_id) ON UPDATE CASCADE ON DELETE CASCADE;