noalyss Version-9
card_attribut_mtable.class.php
Go to the documentation of this file.
1<?php
2
3/*
4 * This file is part of NOALYSS.
5 *
6 * PhpCompta 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 * PhpCompta 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 PhpCompta; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20// Copyright (2002-2020) Author Dany De Bontridder <danydb@noalyss.eu>
21
22/**
23 * @file
24 * @brief manage the table attr_def
25 * @see card_attr.inc.php
26 */
27
28/**
29 * @class Card_Attribut_MTable
30 * @brief manage the table attr_def
31 * @see card_attr.inc.php
32 */
34{
36 function __construct(\Data_SQL $p_table)
37 {
38 parent::__construct($p_table);
39 $this->set_property_visible("ad_id", TRUE);
40 $this->set_property_updatable("ad_id", FALSE);
41 $this->set_col_label("ad_text", _("Nom"));
42 $this->set_col_label("ad_type", _("Type"));
43 $this->set_col_label("ad_size", _("Taille"));
44 $this->set_col_label('ad_default_order', _("Ordre"));
45 $this->set_col_label("ad_extra", _("Option sup."));
46 $this->set_col_label("ad_search_followup", _("Recherche suivi"));
47
48 $this->set_col_type("ad_search_followup", "custom");
49 $this->set_col_type("ad_text", "custom");
50 $this->set_col_type("ad_size", "numeric");
51 $this->set_col_type("ad_extra", "custom");
52 $this->set_col_type("ad_type", "select",
53 array(
54 ["value"=>"text", "label"=>_("Texte")],
55 ["value"=>"date", "label"=>_("Date")],
56 ["value"=>"numeric", "label"=>_("Nombre")],
57 ["value"=>"select", "label"=>_("Choix")],
58 ["value"=>"card", "label"=>_("Fiche")],
59 ["value"=>"zone", "label"=>_("Zone de texte")],
60 ["value"=>"check", "label"=>_("Coche")],
61 ["value"=>"poste", "label"=>_("Poste comptable")]
62 ));
63 $this->set_col_tips("ad_search_followup", 77);
64 // to prevent a call to this function for each row
65 $this->dossier_id=Dossier::id();
66 $this->set_order(['ad_id','ad_text',"ad_type","ad_default_order","ad_size","ad_extra","ad_search_followup"]);
67 $this->set_col_sort(1);
68 }
69
70 /**
71 * Display row of table attr_def
72 * @param array $row
73 */
74 function display_row($row)
75 {
76 tracedebug("card_attribute.log", $row);
77 if ($row['ad_id']>=9000)
78 {
79 $this->set_delete_row(TRUE);
80 $this->set_update_row(TRUE);
81 }
82 else
83 {
84 $this->set_delete_row(FALSE);
85 $this->set_update_row(FALSE);
86 }
87
88 parent::display_row($row);
89 }
90
91 /**
92 * For the type custom , we can call a function to display properly the value
93 * @param $p_key string key name
94 * @param $p_value string value
95 * @see input_custom
96 * @see set_type
97 * @note must return a string which will be in surrounded by td in the function display_row
98 * @return string
99 */
100 function display_row_custom($p_key, $p_value, $p_id=0)
101 {
102 if ($p_key=="ad_search_followup")
103 {
104 $ic=new Inplace_Switch(uniqid("search_follow_up"), $p_value);
105 $ic->set_callback("ajax_misc.php");
106 $ic->add_json_param("op", "card");
107 $ic->add_json_param("gDossier", $this->dossier_id);
108 $ic->add_json_param("op2", "attribute");
109 $ic->add_json_param("action", "enable_search");
110 $ic->add_json_param("ad_id", $p_id);
111 $ic->add_json_param("ctl", $p_id);
112 $ret=$ic->input();
113
114 return td($ret);
115 }
116 if ($p_key=="ad_text")
117 {
118 return td($p_value);
119 }
120 if ($p_key=="ad_extra")
121 {
122 return td($p_value);
123 }
124 return;
125 }
126
127 /**
128 * For the type custom , we can call a function to display properly the value
129 * @param $p_key string key name
130 * @param $p_value string value
131 * @see input_custom
132 * @see set_type
133 * @note must return a string which will be in surrounded by td in the function display_row
134 * @return string
135 */
136 function input_custom($p_key, $p_value)
137 {
138 if ($p_key=="ad_search_followup")
139 {
140 $p_id=$this->get_table()->get("ad_id");
141 $ic=new InputSwitch("ad_search_followup", $p_value);
142 echo $ic->input();
143 }
144 elseif ($p_key=="ad_text")
145 {
146 /**
147 * Bug in firefox if id=ad_text , the widget is not displaid
148 */
149 $text=new IText("ad_text", $p_value);
150 $text->id=uniqid();
151 echo $text->input();
152 }
153 elseif ($p_key=="ad_extra")
154 {
155 $text=new ITextarea("ad_extra", $p_value);
156 $text->id=uniqid();
157 echo $text->input();
158 }
159 echo "";
160 return;
161 }
162
163 function check()
164 {
165 $object_sql=$this->get_table();
166
167 if ($object_sql->get("ad_id")<9000&&$object_sql->get("ad_id")!=-1)
168 {
169 $this->set_error("ad_id", _("Bloqué"));
170 }
171
172 // Duplicate
173 $count="select count(*)
174 from attr_def as ad1
175 where
176 upper(trim(ad1.ad_text)) = upper(trim($1))
177 and ad1.ad_id != $2
178 ";
179 $count_duplicate=$object_sql->cn->get_value($count, [$object_sql->ad_text, $object_sql->ad_id]);
180 if ($count_duplicate>0)
181 {
182 $this->set_error("ad_text", _("Doublon"));
183 }
184 // type
185 if (in_array($object_sql->get("ad_type"),
186 array('date', 'text', 'numeric', 'zone', 'poste', 'card', 'select', 'check'))==false)
187 {
188 $this->set_error("ad_type", _("Type invalide"));
189 }
190
191 // Name empty
192 if (trim($object_sql->ad_text)=="")
193 {
194 $this->set_error("ad_text", _("Description ne peut pas être vide"));
195 }
196 // select protect
197 if ($object_sql->ad_size=="")
198 {
199 $object_sql->ad_size=22;
200 }
201 if ($object_sql->ad_type=='numeric')
202 {
203 $object_sql->ad_extra=(trim($object_sql->ad_extra)=='')?'2':$object_sql->ad_extra;
204 if (isNumber($object_sql->ad_extra)==0)
205 {
206 $this->set_error("ad_text", _("La précision doit être un chiffre"));
207 }
208 }
209
210 if ($object_sql->ad_type=='select')
211 {
212 if (trim($object_sql->ad_extra)=="")
213 {
214
215 $this->set_error("ad_extra", _("La requête SQL est vide "));
216 }
217 if (preg_match('/^\h*select/i', $object_sql->ad_extra)==0)
218 {
219 $this->set_error("ad_extra", _("La requête SQL doit commencer par SELECT "));
220 }
221 }
222 if ( $object_sql->ad_default_order < 11 || $object_sql->ad_default_order > 9998) {
223 $this->set_error("ad_default_order",_("Valeur entre 11 et 9998"));
224 }
225 if ($this->count_error()>0)
226 {
227 return false;
228 }
229 return true;
230 }
231
232 function delete()
233 {
234 $object_sql=$this->get_table();
235
236 if ($object_sql->getp("ad_id")<9000)
237 {
238 throw new Exception(_("Effacement bloqué"));
239 }
240
241 $db=$object_sql->cn;
242 try
243 {
244 $db->start();
245 $sql=$db->exec_sql("delete from fiche_detail where ad_id=$1 ", array($object_sql->ad_id));
246
247 $sql="delete from jnt_fic_attr where ad_id=$1";
248 $res=$db->exec_sql($sql, array($object_sql->ad_id));
249
250 $sql="delete from attr_def where ad_id=$1";
251 $res=$db->exec_sql($sql, array($object_sql->ad_id));
252
253 $object_sql=$this->get_table()->delete();
254 $db->commit();
255 }
256 catch (Exception $ex)
257 {
258 $db->rollback();
259 throw new Exception(_("Effacement bloqué : attribut utilisé"));
260 }
261 }
262
263}
isNumber($p_int)
Definition: ac_common.php:215
td($p_string='', $p_extra='')
surround the string with td
Definition: ac_common.php:83
if(!headers_sent())
– pour utiliser unoconv démarrer un server libreoffice commande libreoffice –headless –accept="socket...
$ex
Definition: balance.inc.php:45
manage the table attr_def
input_custom($p_key, $p_value)
For the type custom , we can call a function to display properly the value.
display_row_custom($p_key, $p_value, $p_id=0)
For the type custom , we can call a function to display properly the value.
display_row($row)
Display row of table attr_def.
this an abstract class , all the SQL class, like noalyss_sql (table), Acc_Plan_SQL (based on a SQL no...
static id()
return the 'gDossier' value after a check
Html Input.
Definition: itext.class.php:30
Manage the TEXTAREA html element.
A switch let you switch between 2 values : 0 and 1, it is used to replace the check.
show a switch, when you click on it an hidden field is changed, the value is 1 or 0
Purpose is to propose a librairy to display a table content and allow to update and delete row ,...
count_error()
returns the nb of errors found
set_delete_row($p_value)
Enable or disable the deletion of rows.
set_col_sort($p_num)
When adding an element ,we place it thanks the DOM Attribute sort_value set it to -1 if you want one ...
set_property_updatable($p_key, $p_value)
set a column of the data row updatable or not
set_col_tips($p_key, $p_comment)
Set the info for a column, use Icon_Action::infobulle the message are in message_javascript....
set_col_type($p_key, $p_value, $p_array=NULL)
set the type of a column , it will change in the input db box , the select must supply an array of po...
set_update_row($p_value)
Enable or disable the updating of rows.
set_property_visible($p_key, $p_value)
set a column of the data row visible or not
set_error($p_col, $p_message)
set the error message for a wrong input
set_col_label($p_key, $p_display)
set the name to display for a column
$count
if( $delta< 0) elseif( $delta==0)