noalyss Version-10
NOALYSS : serveur de comptabilité et ERP (2002)
Loading...
Searching...
No Matches
modele.inc.php
Go to the documentation of this file.
1<?php
2/*
3 * This file is part of NOALYSS.
4 *
5 * NOALYSS is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * NOALYSS is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with NOALYSS; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20// Copyright Author Dany De Bontridder danydb@aevalys.eu
21
22/**
23 * \file
24 *
25 *
26 * \brief concerne only the template
27 *
28 */
29if ( !defined ('ALLOWED')) die('Forbidden');
32$sa = $http->request("sa", "string", 'list');
33if (isset($_POST['upd']) &&
34 isset($_POST['m']))
35{
36 $name=$http->post('name');
37 $desc =$http->post('desc');
38 $mod_id=$http->post("m", "number",0);
39
40 if (trim($name) != "" && $mod_id != 0 && isNumber($mod_id)==1)
41 {
42 $cn = new Database();
43 $cn->exec_sql("update modeledef set mod_name=$1, " .
44 " mod_desc=$2 where mod_id=$3 ",
45 array(trim($name), trim($desc), $mod_id));
46 }
47 $sa = "list";
48}
49
50$cn = new Database();
51
52$fmod_dbid=$http->post("FMOD_DBID","number",0);
53
54// IF FMOD_NAME is posted then must add a template
55if (isset($_POST["FMOD_NAME"]))
56{
57 $encoding = $cn->get_value("select encoding from pg_database where " .
58 " datname=$1",array(domaine . 'dossier' . $fmod_dbid));
59
60 if ($encoding != 6)
61 {
62 alert(_('Désolé vous devez migrer ce modèle en unicode'));
63 echo '<span class="error">';
64 printf (_('la base de donnée %smod%s doit être migrée en unicode'),domaine,$fmod_dbid);
65 echo "</span>";
66 echo '<span class="error"> '._("Pour le passer en unicode, faites-en un backup puis restaurez le fichier reçu").'</span>';
67
68 echo HtmlInput::button_anchor(_('Retour'), 'admin-noalyss.php?action=dossier_mgt');
69 return;
70 }
71
72 $mod_name = $http->post("FMOD_NAME");
73 $mod_desc = $http->post("FMOD_DESC");
74 if ($mod_name != null || trim ($mod_name) != "")
75 {
76 $Res = $cn->exec_sql("insert into modeledef(mod_name,mod_desc)
77 values ($1,$2)",array($mod_name,$mod_desc));
78
79 // get the mod_id
80 $l_id = $cn->get_current_seq('s_modid');
81 if ($l_id != 0)
82 {
83 $Sql = sprintf("CREATE DATABASE %sMOD%d encoding='UTF8' TEMPLATE %sDOSSIER%s", domaine, $l_id, domaine, $_POST["FMOD_DBID"]);
84 ob_start();
85 if ($cn->exec_sql($Sql) == false)
86 {
87 ob_end_clean();
88 echo "<h2 class=\"error\">";
89 printf(_('Base de donnée %sdossier%d" est accèdée, déconnectez-vous en d\'abord'),domaine,$fmod_dbid);
90 echo "</h2>";
91 $Res = $cn->exec_sql("delete from modeledef where mod_id=$1",array($l_id));
92
93 exit;
94 }
95 }
96 }// if $mod_name != null
97 else
98 {
99 alert(_('Le nom est vide'));
100 return;
101 }
102 $cn_mod = new Database($l_id, 'mod');
103
104 // Clean some tables
105
106 $Res = $cn_mod->exec_sql("select distinct jr_pj from jrn where jr_pj is not null ");
107 if (Database::num_row($Res) != 0)
108 {
109 $a_lob = Database::fetch_all($Res);
110 $nb_lob=($a_lob == FALSE)?0:count($a_lob);
111 for ($i = 0; $i < $nb_lob; $i++)
112 $cn_mod->lo_unlink($a_lob[$i]['jr_pj']);
113 }
114 $Res = $cn_mod->exec_sql("truncate table tool_uos");
115 $Res = $cn_mod->exec_sql("truncate table user_filter");
116 $Res = $cn_mod->exec_sql("truncate table user_widget");
117 $Res = $cn_mod->exec_sql("truncate table centralized");
118 $Res = $cn_mod->exec_sql("truncate table stock_change cascade");
119 $Res = $cn_mod->exec_sql("truncate table parm_periode cascade");
120 $Res = $cn_mod->exec_sql("truncate table operation_exercice cascade");
121 $Res = $cn_mod->exec_sql("truncate table jrn cascade");
122 $Res = $cn_mod->exec_sql("truncate table forecast cascade");
123 $Res = $cn_mod->exec_sql("delete from del_jrn");
124 $Res = $cn_mod->exec_sql("delete from del_jrnx");
125 $Res = $cn_mod->exec_sql("truncate table jrnx cascade ");
126 $Res = $cn_mod->exec_sql("truncate table todo_list cascade ");
127 $Res = $cn_mod->exec_sql("delete from del_action");
128 $Res = $cn_mod->exec_sql("delete from profile_user");
129 $Res = $cn_mod->exec_sql("delete from jnt_letter");
130
131 $Res = $cn_mod->exec_sql('delete from operation_analytique');
132 // Delete info from USERS
133 $Res = $cn_mod->exec_sql('delete from user_sec_act');
134 $Res = $cn_mod->exec_sql('delete from user_sec_action_profile');
135 $Res = $cn_mod->exec_sql('delete from user_local_pref');
136 $Res = $cn_mod->exec_sql('delete from user_sec_jrn');
137 $Res = $cn_mod->exec_sql('delete from bookmark');
138
139 // Reset the closed periode
140 $Res = $cn_mod->exec_sql("update parm_periode set p_closed='f'");
141 $Res = $cn_mod->exec_sql('delete from jrn_periode');
142 $Res = $cn_mod->exec_sql(' insert into jrn_periode(p_id,jrn_def_id,status) ' .
143 ' select p_id,jrn_def_id,\'OP\' ' .
144 ' from ' .
145 ' parm_periode cross join jrn_def');
146 // clean parameter
147 $Res= $cn_mod->exec_sql('update "parameter" set pr_value=null');
148 $Res= $cn_mod->exec_sql('update "parameter_extra" set pe_value=null');
149 $Res= $cn_mod->exec_sql('update parm_mail_server set pe_value=null');
150
151 // clean forecast
152 //
153 // Reset Sequence
154 $a_seq = array('s_jrn', 's_jrn_op', 's_centralized', 's_stock_goods', 's_internal');
155 foreach ($a_seq as $seq)
156 {
157 $sql = sprintf("select setval('%s',1,false)", $seq);
158 $Res = $cn_mod->exec_sql($sql);
159 }
160 $sql = "select jrn_def_id from jrn_def ";
161 $Res = $cn_mod->exec_sql($sql);
163 for ($seq = 0; $seq < $Max; $seq++)
164 {
166 /* if seq doesn't exist create it */
167 if ($cn_mod->exist_sequence('s_jrn_' . $row['jrn_def_id']) == false)
168 {
169 $cn_mod->create_sequence('s_jrn_' . $row['jrn_def_id']);
170 }
171
172
173 $sql = sprintf("select setval('s_jrn_%d',1,false)", $row['jrn_def_id']);
174 $cn_mod->exec_sql($sql);
175
176 $sql = sprintf("select setval('s_jrn_pj%d',1,false)", $row['jrn_def_id']);
177 $cn_mod->exec_sql($sql);
178 $sql = sprintf("select setval('jnt_letter_jl_id_seq',1,false)");
179 $cn_mod->exec_sql($sql);
180 }
181 //---
182 // Cleaning Follow_Up
183 //--
184 if (isset($_POST['DOC']))
185 {
186 $Res = $cn_mod->exec_sql("delete from action_gestion_related");
187 $Res = $cn_mod->exec_sql("delete from action_gestion_filter");
188 $Res = $cn_mod->exec_sql("delete from action_gestion_comment");
189 $Res = $cn_mod->exec_sql("delete from action_gestion_related");
190 $Res = $cn_mod->exec_sql("delete from action_person");
191 $Res = $cn_mod->exec_sql("delete from action_gestion");
192 $Res = $cn_mod->exec_sql("delete from tags");
193 $Res = $cn_mod->exec_sql("delete from tag_group");
194 $Res = $cn_mod->exec_sql("delete from action_tags");
195 $Res = $cn_mod->exec_sql("delete from document");
196
197 // reset sequences for Follow-up
198 $a_seq=$cn_mod->get_array(" select sequence_name "
199 . " from information_schema.sequences "
200 . "where sequence_name like 'seq_doc_type%'"
201 );
202 $n_seq=count($a_seq);
203 for ($i = 0;$i < $n_seq;$i++) {
204 $cn_mod->alter_seq($a_seq[$i]['sequence_name'], 1);
205 }
206 }
207 if (isset($_POST['CARD']))
208 {
209 // it is necessary to remove the plugin amortissement due to a
210 // Foreign key without cascading
211 $a_schema=$cn_mod->get_array("
212 select nspname from pg_namespace
213 where
214 nspname not like 'pg_%'
215 and nspname in ('amortissement')
216 ");
217 $nb_schema=count($a_schema);
218 for ($i=0;$i < $nb_schema;$i++)
219 {
220 $cn_mod->exec_sql(" drop schema ".$a_schema[$i]['nspname']." cascade");
221 }
222 $Res = $cn_mod->exec_sql("delete from action_gestion");
223 $Res = $cn_mod->exec_sql("delete from fiche_detail");
224 $Res = $cn_mod->exec_sql("delete from fiche");
225 $Res = $cn_mod->exec_sql("delete from document");
226 $Res = $cn_mod->exec_sql("delete from document_modele");
227 $Res = $cn_mod->exec_sql("delete from op_predef");
228 $Res = $cn_mod->exec_sql("delete from op_predef_detail");
229
230
231 }
232 if (isset($_POST['CANAL']))
233 {
234 $Res = $cn_mod->exec_sql('delete from poste_analytique');
235 $Res = $cn_mod->exec_sql('delete from plan_analytique');
236 $Res = $cn_mod->exec_sql('truncate key_distribution cascade');
237 }
238 if ( isset ($_POST['PLUGIN'])) {
239 $a_schema=$cn_mod->get_array("
240 select nspname from pg_namespace
241 where
242 nspname not like 'pg_%'
243 and nspname not in ('information_schema','public','comptaproc')
244 ");
245 $nb_schema=count($a_schema);
246 for ($i=0;$i < $nb_schema;$i++)
247 {
248 $cn_mod->exec_sql(" drop schema ".$a_schema[$i]['nspname']." cascade");
249 }
250 $Res = $cn_mod->exec_sql("delete from profile_mobile where me_code not in ('AGENDA','LOGOUT')");
251 $Res = $cn_mod->exec_sql("delete from menu_ref where me_type='PL'");
252 $Res = $cn_mod->exec_sql("delete from extension ");
253 }
254 // Clean orphan log
255 $cn_mod->clean_orphan_lob();
256
257}
258// Show all available templates
259$url=$_SERVER['PHP_SELF']."?".http_build_query(array("sa"=>"list","action"=>$http->request('action')));
260
262$header->add(_("id"),$url," order by mod_id asc"," order by mod_id desc","ia","id");
263$header->add(_("Nom"),$url," order by mod_name asc"," order by mod_name desc","na","nd");
264$header->add(_("Description"),$url," order by mod_desc asc"," order by mod_desc desc","da","dd");
265
266$ord=(isset($_REQUEST['ord']))?$_REQUEST['ord']:'na';
267$sql_order=$header->get_sql_order($ord);
268
269$Res = $cn->exec_sql("select mod_id,mod_name,mod_desc from
270 modeledef $sql_order");
271
273echo '<div class="content">';
274echo '<h2 class="">'._('Modèles')."</H2>";
275if ($sa == 'list')
276{
277 echo '<p>';
278 echo HtmlInput::button(_('Ajouter'),_('Ajouter un modèle')," onclick=\$('folder_add_id').show()");
279
280 echo '</p>';
281 echo "<p class=\"notice\">" . _("Si vous voulez r&eacute;cup&eacute;rer toutes les adaptations d'un dossier " .
282 " dans un autre dossier, vous pouvez en faire un modèle." .
283 " Seules les fiches, la structure des journaux, les p&eacute;riodes,... seront reprises " .
284 "et aucune donn&eacute;e du dossier sur lequel le dossier est bas&eacute;. Les données contenues dans les extensions ne sont pas effacées") . "</p>";
285 echo h2(_("Modèles locaux"),'class="h-section"');
286 if ($count == 0)
287 {
288 echo _("Aucun modèle disponible");
289 }
290 else
291 {
292
293 echo '<span style="display:block;margin-top:10">';
294 echo _('Filtre').Icon_Action::infobulle(23);
295 echo HtmlInput::filter_table("t_modele", "0,1,2","1");
296 echo '</span>';
297 echo '<table id="t_modele" class="table_large" style="border-spacing:10;border-collapse:separate" >';
298 echo "<TR>".
299 "<TH>".$header->get_header(0)."</TH>" .
300 "<TH>".$header->get_header(1)."</TH>" .
301 "<TH>".$header->get_header(2)."</TH>" .
302 "<TH>"._('Nom base de données')."</TH>" .
303 "<th> </th>" .
304 "<th> </th>" .
305 "</TR>";
306
307 for ($i = 0; $i < $count; $i++)
308 {
310 $class = ($i % 2 == 0) ? "odd" : "even";
311 $str_name=domaine.'mod'.$mod['mod_id'];
312 $valid=true;
313 $exist=true;
314 $mod_status="";
315 if ( $cn->exist_database($str_name) == 0 ) {
316 $exist=false;
317 $mod_status=_('Inexistant');
318 }
319 if ( $exist ) {
320 $mod_cn=new Database($mod['mod_id'],'mod');
321 if ( $mod_cn->exist_table("version")==0) {
322 $valid=false;
323 $mod_status=_('Invalide');
324 }
325 }
326 printf('<TR class="' . $class . '" style="vertical-align:top">' .
327 '<TD>%d </td><td><b> %s</b> </TD>' .
328 '<TD><I> %s </I></TD>' .
329 '<td>'.$str_name.'</td>'.
330 td($mod_status).
331 '<td> ' .
332 HtmlInput::anchor(_('Effacer'), '?action=modele_mgt&sa=del&m=' . $mod['mod_id']," onclick = \"modele_drop('{$mod['mod_id']}') \"") . '</td>' .
333 '</td>' .
334 '<td>' . HtmlInput::anchor(_('Modifie'), '?action=modele_mgt&sa=mod&m=' . $mod['mod_id']," onclick = \"modele_modify('{$mod['mod_id']}') \"") . '</td>' .
335 '</td>' .
336 '<td>' . HtmlInput::anchor(_('Backup'), '?action=backup&sa=b&t=m&d='
337 . $mod['mod_id']) . '</td>' .
338 '</TR>', $mod['mod_id'], $mod['mod_name'], $mod['mod_desc']);
339 }// for
340 echo "</table>";
341 }// if count = 0
342 echo h2(_("Modèles disponibles dans le dépôt"),' class="h-section"');
343
344 require NOALYSS_INCLUDE . "/upgrade-template.php";
345
346}
347?>
348<div id="folder_add_id" class="inner_box" style="display:none;top:50px">
349 <?php
350 echo HtmlInput::title_box(_("Ajout d'un modèle"), 'folder_add_id', "hide");
351
352//---------------------------------------------------------------------------
353// Add a template
354//---------------------------------------------------------------------------
355// Show All available folder
356 $Res = $cn->exec_sql("select dos_id, dos_name,dos_description from ac_dossier
357 order by dos_name");
360 if ($count != 0)
361 {
362 $available = '<SELECT NAME="FMOD_DBID">';
363 for ($i = 0; $i < $count; $i++)
364 {
366 $available.='<OPTION VALUE="' . $db['dos_id'] . '">' . $db['dos_name'] . ':' . $db['dos_description'];
367 }//for i
368 $available.='</SELECT>';
369 }//if count !=0
370 ?>
371 <form action="admin-noalyss.php?action=modele_mgt" METHOD="post" onsubmit="waiting_box();return true;">
372 <TABLE>
373 <tr>
374 <td><?php echo _('Nom')?> </TD>
375 <TD><INPUT TYPE="TEXT" class="input_text" VALUE="" NAME="FMOD_NAME"></TD>
376 </TR>
377 <TR>
378 <TD><?php echo _('Description')?></TD>
379 <TD><TEXTAREA ROWS="2" class="input_text" COLS="60" NAME="FMOD_DESC"></Textarea></TD>
380 </TR>
381 <TR>
382 <TD> <?php echo _("Bas&eacute; sur")?> </TD>
383 <TD> <?php echo $available?></TD>
384 </TR>
385 </table>
386 <ol style="list-style: none">
387 <li>
388 <input type="checkbox" class="input_text" name="DOC">
389 <?php echo _("Nettoyage des Documents et courriers (ce qui n'effacera pas les modèles de documents)")?>
390 </li>
391 <li>
392 <input type="checkbox" class="input_text" name="CARD">
393 <?php echo _("Nettoyage de toutes les fiches (ce qui effacera client,
394 op&eacute;rations pr&eacute;d&eacute;finies fournisseurs modèles de documents et documents)")?>
395 </li>
396 <li>
397 <input class="input_text" type="checkbox" name="CANAL">
398 <?php echo _("Nettoyage de la comptabilit&eacute; analytique : effacement des plans et des postes, les op&eacute;rations
399 sont de toute fa&ccedil;on effac&eacute;es")?>
400 </li>
401 <li>
402 <input class="input_text" type="checkbox" name="PLUGIN">
403 <?php echo _("Effacement de toutes les donn&eacute;es des plugins")?>
404 </li>
405 </ol>
406 <INPUT TYPE="SUBMIT" class="button" VALUE="<?php echo _("Ajout d'un modele")?>" >
407</form>
408</div>
409 <?php
410
411 //---------------------------------------------------------------------------
412 // action = del
413 //---------------------------------------------------------------------------
414 if ($sa == 'remove')
415 {
416 if (!isset($_REQUEST['p_confirm']))
417 {
418 echo _('Désolé, vous n\'avez pas coché la case');
419 echo HtmlInput::button_anchor(_('Retour'), '?action=modele_mgt');
420 return;
421 }
422 try {
423 $mod_id=$http->request('m', "number");
424
425 }
426 catch (Exception $e)
427 {
428 echo _('Donnée invalide');
429 return;
430 }
431 $cn = new Database();
432 $msg = "dossier";
433 $name = $cn->get_value("select mod_name from modeledef where mod_id=$1", array($mod_id));
434 if (noalyss_strlentrim($name) == 0)
435 {
436 echo "<h2 class=\"error\"> $msg inexistant</h2>";
437 return;
438 }
439 // Before dropping database check that database exist
440 if ( $cn->exist_database(domaine.'mod'.$mod_id) == 1)
441 {
442 $sql = "drop database " . domaine . "mod" . sql_string($mod_id);
443 ob_start();
444 if ($cn->exec_sql($sql) == false)
445 {
446 ob_end_clean();
447
448 echo "<h2 class=\"error\">";
449 printf (_("Base de donnée %s mod %s est accèdée, déconnectez-vous d'abord"),domaine,$mod_id )
450 . "</h2>";
451 exit;
452 }
453 ob_flush();
454 }
455 $sql = "delete from modeledef where mod_id=$1";
456 $cn->exec_sql($sql, array($mod_id));
457 print '<h2 class="error">';
458 printf (_("Le modèle %s est effacé")."</H2>",$name );
459 echo HtmlInput::button_anchor(_('Retour'), '?action=modele_mgt');
460 }
461 echo '</div>';
462 ?>
463
h2($p_string, $p_class="", $raw="")
Definition ac_common.php:68
isNumber($p_int)
noalyss_strlentrim($p_string)
tr($p_string, $p_extra='')
Definition ac_common.php:88
sql_string($p_string)
Fix the problem with the quote char for the database.
td($p_string='', $p_extra='')
surround the string with td
Definition ac_common.php:83
alert($p_msg, $buffer=false)
alert in javascript
$opd_description style
$_REQUEST['ac']
$from_poste name
_("actif, passif,charge,...")
$input_from type
$class
Display the Plugin and for each profile were it is installed or not.
static fetch_array($ret, $p_indice=0, $p_mode=PGSQL_ASSOC)
wrapper for the function pg_fetch_array
static fetch_all($ret, $p_mode=PGSQL_ASSOC)
wrapper for the function pg_fetch_all
static num_row($ret)
wrapper for the function pg_num_rows
contains the class for connecting to Noalyss
static title_box($p_name, $p_div, $p_mod="close", $p_js="", $p_draggable="n", $p_enlarge='n', $raw="", $refresh='')
Title for boxes, you can customize the symbol thanks symbol with the mode "custom".
manage the http input (get , post, request) and extract from an array
static echo_file($msg, $print=true)
display the file
Definition dbg.php:88
Description of class_syn_sort_table.
$all table
$_POST['ac']
Definition do.php:323
$count
for($e=0; $e< count($afiche); $e++) exit
if(count($a_accounting)==0) $header
domaine
Definition install.php:370
print
Type of printing.
$ord
Definition menu.inc.php:116
$sql_order
$fmod_dbid
vous n
$available
$valid
Definition recover.php:57