noalyss  Version-9
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  */
29 if ( !defined ('ALLOWED')) die('Forbidden');
31 $sa = $http->request("sa", "string", 'list');
32 if (isset($_POST['upd']) &&
33  isset($_POST['m']))
34 {
35  $name=$http->post('name');
36  $desc =$http->post('desc');
37  $mod_id=$http->post("m", 0);
38 
39  if (trim($name) != "" && $mod_id != 0 && isNumber($mod_id)==1)
40  {
41  $cn = new Database();
42  $cn->exec_sql("update modeledef set mod_name=$1, " .
43  " mod_desc=$2 where mod_id=$3 ",
44  array(trim($name), trim($desc), $mod_id));
45  }
46  $sa = "list";
47 }
48 
49 $cn = new Database();
50 
51 $fmod_dbid=$http->post("FMOD_DBID","number",0);
52 
53 // IF FMOD_NAME is posted then must add a template
54 if (isset($_POST["FMOD_NAME"]))
55 {
56  $encoding = $cn->get_value("select encoding from pg_database where " .
57  " datname=$1",array(domaine . 'dossier' . $fmod_dbid));
58 
59  if ($encoding != 6)
60  {
61  alert(_('Désolé vous devez migrer ce modèle en unicode'));
62  echo '<span class="error">';
63  printf (_('la base de donnée %smod%s doit être migrée en unicode'),domaine,$fmod_dbid);
64  echo "</span>";
65  echo '<span class="error"> '._("Pour le passer en unicode, faites-en un backup puis restaurez le fichier reçu").'</span>';
66 
67  echo HtmlInput::button_anchor(_('Retour'), 'admin-noalyss.php?action=dossier_mgt');
68  return;
69  }
70 
71  $mod_name = $http->post("FMOD_NAME");
72  $mod_desc = $http->post("FMOD_DESC");
73  if ($mod_name != null || trim ($mod_name) != "")
74  {
75  $Res = $cn->exec_sql("insert into modeledef(mod_name,mod_desc)
76  values ($1,$2)",array($mod_name,$mod_desc));
77 
78  // get the mod_id
79  $l_id = $cn->get_current_seq('s_modid');
80  if ($l_id != 0)
81  {
82  $Sql = sprintf("CREATE DATABASE %sMOD%d encoding='UTF8' TEMPLATE %sDOSSIER%s", domaine, $l_id, domaine, $_POST["FMOD_DBID"]);
83  ob_start();
84  if ($cn->exec_sql($Sql) == false)
85  {
86  ob_end_clean();
87  echo "<h2 class=\"error\">";
88  printf(_('Base de donnée %sdossier%d" est accèdée, déconnectez-vous en d\'abord'),domaine,$fmod_dbid);
89  echo "</h2>";
90  $Res = $cn->exec_sql("delete from modeledef where mod_id=$1",array($l_id));
91 
92  exit;
93  }
94  }
95  }// if $mod_name != null
96  else
97  {
98  alert(_('Le nom est vide'));
99  return;
100  }
101  $cn_mod = new Database($l_id, 'mod');
102 
103  // Clean some tables
104 
105  $Res = $cn_mod->exec_sql("select distinct jr_pj from jrn where jr_pj is not null ");
106  if (Database::num_row($Res) != 0)
107  {
108  $a_lob = Database::fetch_all($Res);
109  $nb_lob=($a_lob == FALSE)?0:count($a_lob);
110  for ($i = 0; $i < $nb_lob; $i++)
111  $cn_mod->lo_unlink($a_lob[$i]['jr_pj']);
112  }
113  $Res = $cn_mod->exec_sql("truncate table centralized");
114  $Res = $cn_mod->exec_sql("truncate table jrn cascade");
115  $Res = $cn_mod->exec_sql("delete from del_jrn");
116  $Res = $cn_mod->exec_sql("delete from del_jrnx");
117  $Res = $cn_mod->exec_sql("truncate table jrnx cascade ");
118  $Res = $cn_mod->exec_sql("truncate table todo_list cascade ");
119  $Res = $cn_mod->exec_sql("delete from del_action");
120  $Res = $cn_mod->exec_sql("delete from profile_user");
121  $Res = $cn_mod->exec_sql("delete from jnt_letter");
122 
123  $Res = $cn_mod->exec_sql('delete from operation_analytique');
124  // Delete info from USERS
125  $Res = $cn_mod->exec_sql('delete from user_sec_act');
126  $Res = $cn_mod->exec_sql('delete from user_sec_action_profile');
127  $Res = $cn_mod->exec_sql('delete from user_local_pref');
128  $Res = $cn_mod->exec_sql('delete from user_sec_jrn');
129  $Res = $cn_mod->exec_sql('delete from bookmark');
130 
131  // Reset the closed periode
132  $Res = $cn_mod->exec_sql("update parm_periode set p_closed='f'");
133  $Res = $cn_mod->exec_sql('delete from jrn_periode');
134  $Res = $cn_mod->exec_sql(' insert into jrn_periode(p_id,jrn_def_id,status) ' .
135  ' select p_id,jrn_def_id,\'OP\' ' .
136  ' from ' .
137  ' parm_periode cross join jrn_def');
138 
139  // Reset Sequence
140  $a_seq = array('s_jrn', 's_jrn_op', 's_centralized', 's_stock_goods', 's_internal');
141  foreach ($a_seq as $seq)
142  {
143  $sql = sprintf("select setval('%s',1,false)", $seq);
144  $Res = $cn_mod->exec_sql($sql);
145  }
146  $sql = "select jrn_def_id from jrn_def ";
147  $Res = $cn_mod->exec_sql($sql);
149  for ($seq = 0; $seq < $Max; $seq++)
150  {
152  /* if seq doesn't exist create it */
153  if ($cn_mod->exist_sequence('s_jrn_' . $row['jrn_def_id']) == false)
154  {
155  $cn_mod->create_sequence('s_jrn_' . $row['jrn_def_id']);
156  }
157 
158 
159  $sql = sprintf("select setval('s_jrn_%d',1,false)", $row['jrn_def_id']);
160  $cn_mod->exec_sql($sql);
161 
162  $sql = sprintf("select setval('s_jrn_pj%d',1,false)", $row['jrn_def_id']);
163  $cn_mod->exec_sql($sql);
164  $sql = sprintf("select setval('jnt_letter_jl_id_seq',1,false)");
165  $cn_mod->exec_sql($sql);
166  }
167  //---
168  // Cleaning Follow_Up
169  //--
170  if (isset($_POST['DOC']))
171  {
172  $Res = $cn_mod->exec_sql("delete from action_gestion_related");
173  $Res = $cn_mod->exec_sql("delete from action_gestion_comment");
174  $Res = $cn_mod->exec_sql("delete from action_gestion_related");
175  $Res = $cn_mod->exec_sql("delete from action_person");
176  $Res = $cn_mod->exec_sql("delete from action_gestion");
177  $Res = $cn_mod->exec_sql("delete from tags");
178  $Res = $cn_mod->exec_sql("delete from action_tags");
179  $Res = $cn_mod->exec_sql("delete from document");
180 
181  // reset sequences for Follow-up
182  $a_seq=$cn_mod->get_array(" select sequence_name "
183  . " from information_schema.sequences "
184  . "where sequence_name like 'seq_doc_type%'"
185  );
186  $n_seq=count($a_seq);
187  for ($i = 0;$i < $n_seq;$i++) {
188  $cn_mod->alter_seq($a_seq[$i]['sequence_name'], 1);
189  }
190  }
191  if (isset($_POST['CARD']))
192  {
193  // it is necessary to remove the plugin amortissement due to a
194  // Foreign key without cascading
195  $a_schema=$cn_mod->get_array("
196  select nspname from pg_namespace
197  where
198  nspname not like 'pg_%'
199  and nspname in ('amortissement')
200  ");
201  $nb_schema=count($a_schema);
202  for ($i=0;$i < $nb_schema;$i++)
203  {
204  $cn_mod->exec_sql(" drop schema ".$a_schema[$i]['nspname']." cascade");
205  }
206  $Res = $cn_mod->exec_sql("delete from action_gestion");
207  $Res = $cn_mod->exec_sql("delete from fiche_detail");
208  $Res = $cn_mod->exec_sql("delete from fiche");
209  $Res = $cn_mod->exec_sql("delete from document");
210  $Res = $cn_mod->exec_sql("delete from document_modele");
211  $Res = $cn_mod->exec_sql("delete from op_predef");
212 
213 
214  }
215  if (isset($_POST['CANAL']))
216  {
217  $Res = $cn_mod->exec_sql('delete from poste_analytique');
218  $Res = $cn_mod->exec_sql('delete from plan_analytique');
219  }
220  if ( isset ($_POST['PLUGIN'])) {
221  $a_schema=$cn_mod->get_array("
222  select nspname from pg_namespace
223  where
224  nspname not like 'pg_%'
225  and nspname not in ('information_schema','public','comptaproc')
226  ");
227  $nb_schema=count($a_schema);
228  for ($i=0;$i < $nb_schema;$i++)
229  {
230  $cn_mod->exec_sql(" drop schema ".$a_schema[$i]['nspname']." cascade");
231  }
232  }
233  // Clean orphan log
234  $cn_mod->clean_orphan_lob();
235 
236 }
237 // Show all available templates
238 $url=$_SERVER['PHP_SELF']."?".http_build_query(array("sa"=>"list","action"=>$http->request('action')));
239 
241 $header->add(_("id"),$url," order by mod_id asc"," order by mod_id desc","ia","id");
242 $header->add(_("Nom"),$url," order by mod_name asc"," order by mod_name desc","na","nd");
243 $header->add(_("Description"),$url," order by mod_desc asc"," order by mod_desc desc","da","dd");
244 
245 $ord=(isset($_REQUEST['ord']))?$_REQUEST['ord']:'na';
246 $sql_order=$header->get_sql_order($ord);
247 
248 $Res = $cn->exec_sql("select mod_id,mod_name,mod_desc from
249  modeledef $sql_order");
250 
252 echo '<div class="content">';
253 echo "<H2>"._('Modèles')."</H2>";
254 if ($sa == 'list')
255 {
256  echo '<p>';
257  echo HtmlInput::button(_('Ajouter'),_('Ajouter un modèle')," onclick=\$('folder_add_id').show()");
258 
259  echo '</p>';
260  echo "<p class=\"notice\">" . _("Si vous voulez r&eacute;cup&eacute;rer toutes les adaptations d'un dossier " .
261  " dans un autre dossier, vous pouvez en faire un modèle." .
262  " Seules les fiches, la structure des journaux, les p&eacute;riodes,... seront reprises " .
263  "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>";
264  echo h2(_("Modèles locaux"));
265  if ($count == 0)
266  {
267  echo _("Aucun modèle disponible");
268  }
269  else
270  {
271 
272  echo '<span style="display:block;margin-top:10">';
273  echo _('Filtre').Icon_Action::infobulle(23);
274  echo HtmlInput::filter_table("t_modele", "0,1,2","1");
275  echo '</span>';
276  echo '<table id="t_modele" class="table_large" style="border-spacing:10;border-collapse:separate" >';
277  echo "<TR>".
278  "<TH>".$header->get_header(0)."</TH>" .
279  "<TH>".$header->get_header(1)."</TH>" .
280  "<TH>".$header->get_header(2)."</TH>" .
281  "<TH>"._('Nom base de données')."</TH>" .
282  "<th> </th>" .
283  "<th> </th>" .
284  "</TR>";
285 
286  for ($i = 0; $i < $count; $i++)
287  {
288  $mod = Database::fetch_array($Res, $i);
289  $class = ($i % 2 == 0) ? "odd" : "even";
290  $str_name=domaine.'mod'.$mod['mod_id'];
291  $valid=true;
292  $exist=true;
293  $mod_status="";
294  if ( $cn->exist_database($str_name) == 0 ) {
295  $exist=false;
296  $mod_status=_('Inexistant');
297  }
298  if ( $exist ) {
299  $mod_cn=new Database($mod['mod_id'],'mod');
300  if ( $mod_cn->exist_table("version")==0) {
301  $valid=false;
302  $mod_status=_('Invalide');
303  }
304  }
305  printf('<TR class="' . $class . '" style="vertical-align:top">' .
306  '<TD>%d </td><td><b> %s</b> </TD>' .
307  '<TD><I> %s </I></TD>' .
308  '<td>'.$str_name.'</td>'.
309  td($mod_status).
310  '<td> ' .
311  HtmlInput::anchor(_('Effacer'), '?action=modele_mgt&sa=del&m=' . $mod['mod_id']," onclick = \"modele_drop('{$mod['mod_id']}') \"") . '</td>' .
312  '</td>' .
313  '<td>' . HtmlInput::anchor(_('Modifie'), '?action=modele_mgt&sa=mod&m=' . $mod['mod_id']," onclick = \"modele_modify('{$mod['mod_id']}') \"") . '</td>' .
314  '</td>' .
315  '<td>' . HtmlInput::anchor(_('Backup'), '?action=backup&sa=b&t=m&d='
316  . $mod['mod_id']) . '</td>' .
317  '</TR>', $mod['mod_id'], $mod['mod_name'], $mod['mod_desc']);
318  }// for
319  echo "</table>";
320  }// if count = 0
321  echo h2(_("Modèles disponibles dans le dépôt"));
322 
323  require NOALYSS_INCLUDE . "/upgrade-template.php";
324 
325 }
326 ?>
327 <div id="folder_add_id" class="inner_box" style="display:none;top:50px">
328  <?php
329  echo HtmlInput::title_box(_("Ajout d'un modèle"), 'folder_add_id', "hide");
330 
331 //---------------------------------------------------------------------------
332 // Add a template
333 //---------------------------------------------------------------------------
334 // Show All available folder
335  $Res = $cn->exec_sql("select dos_id, dos_name,dos_description from ac_dossier
336  order by dos_name");
338  $available = "";
339  if ($count != 0)
340  {
341  $available = '<SELECT NAME="FMOD_DBID">';
342  for ($i = 0; $i < $count; $i++)
343  {
344  $db = Database::fetch_array($Res, $i);
345  $available.='<OPTION VALUE="' . $db['dos_id'] . '">' . $db['dos_name'] . ':' . $db['dos_description'];
346  }//for i
347  $available.='</SELECT>';
348  }//if count !=0
349  ?>
350  <form action="admin-noalyss.php?action=modele_mgt" METHOD="post" onsubmit="waiting_box();return true;">
351  <TABLE>
352  <tr>
353  <td><?php echo _('Nom')?> </TD>
354  <TD><INPUT TYPE="TEXT" class="input_text" VALUE="" NAME="FMOD_NAME"></TD>
355  </TR>
356  <TR>
357  <TD><?php echo _('Description')?></TD>
358  <TD><TEXTAREA ROWS="2" class="input_text" COLS="60" NAME="FMOD_DESC"></Textarea></TD>
359  </TR>
360  <TR>
361  <TD> <?php echo _("Bas&eacute; sur")?> </TD>
362  <TD> <?php echo $available?></TD>
363  </TR>
364  </table>
365  <ol style="list-style: none">
366  <li>
367  <input type="checkbox" class="input_text" name="DOC">
368  <?php echo _("Nettoyage des Documents et courriers (ce qui n'effacera pas les modèles de documents)")?>
369  </li>
370  <li>
371  <input type="checkbox" class="input_text" name="CARD">
372  <?php echo _("Nettoyage de toutes les fiches (ce qui effacera client,
373  op&eacute;rations pr&eacute;d&eacute;finies fournisseurs modèles de documents et documents)")?>
374  </li>
375  <li>
376  <input class="input_text" type="checkbox" name="CANAL">
377  <?php echo _("Nettoyage de la comptabilit&eacute; analytique : effacement des plans et des postes, les op&eacute;rations
378  sont de toute fa&ccedil;on effac&eacute;es")?>
379  </li>
380  <li>
381  <input class="input_text" type="checkbox" name="PLUGIN">
382  <?php echo _("Effacement de toutes les donn&eacute;es des plugins")?>
383  </li>
384  </ol>
385  <INPUT TYPE="SUBMIT" class="button" VALUE="<?php echo _("Ajout d'un modele")?>" >
386 </form>
387 </div>
388  <?php
389 
390  //---------------------------------------------------------------------------
391  // action = del
392  //---------------------------------------------------------------------------
393  if ($sa == 'remove')
394  {
395  if (!isset($_REQUEST['p_confirm']))
396  {
397  echo _('Désolé, vous n\'avez pas coché la case');
398  echo HtmlInput::button_anchor(_('Retour'), '?action=modele_mgt');
399  return;
400  }
401  try {
402  $mod_id=$http->request('m', "number");
403 
404  }
405  catch (Exception $e)
406  {
407  echo _('Donnée invalide');
408  return;
409  }
410  $cn = new Database();
411  $msg = "dossier";
412  $name = $cn->get_value("select mod_name from modeledef where mod_id=$1", array($mod_id));
413  if (strlen(trim($name)) == 0)
414  {
415  echo "<h2 class=\"error\"> $msg inexistant</h2>";
416  return;
417  }
418  // Before dropping database check that database exist
419  if ( $cn->exist_database(domaine.'mod'.$mod_id) == 1)
420  {
421  $sql = "drop database " . domaine . "mod" . sql_string($mod_id);
422  ob_start();
423  if ($cn->exec_sql($sql) == false)
424  {
425  ob_end_clean();
426 
427  echo "<h2 class=\"error\">";
428  printf (_("Base de donnée %s mod %s est accèdée, déconnectez-vous d'abord"),domaine,$mod_id )
429  . "</h2>";
430  exit;
431  }
432  ob_flush();
433  }
434  $sql = "delete from modeledef where mod_id=$1";
435  $cn->exec_sql($sql, array($mod_id));
436  print '<h2 class="error">';
437  printf (_("Le modèle %s est effacé")."</H2>",$name );
438  echo HtmlInput::button_anchor(_('Retour'), '?action=modele_mgt');
439  }
440  echo '</div>';
441  ?>
442 
$class
$class
Definition: cfgplugin.inc.php:128
DatabaseCore\fetch_all
static fetch_all($ret)
wrapper for the function pg_fetch_all
Definition: database_core.class.php:755
$e
$e
Definition: result_cat_card_summary.php:26
$cn
if(isset($_POST['upd']) &&isset($_POST['m'])) $cn
Definition: modele.inc.php:49
style
$opd_description style
Definition: ajax_mod_predf_op.php:52
$sql
if(strlen(trim($name))==0) if( $cn->exist_database(domaine. 'mod'. $mod_id)==1) $sql
Definition: modele.inc.php:434
$msg
$msg
Definition: modele.inc.php:411
$fmod_dbid
$fmod_dbid
Definition: modele.inc.php:51
$Res
$Res
Definition: modele.inc.php:248
$_POST
$_POST['ac']
Definition: do.php:365
HtmlInput\button
static button($p_name, $p_value, $p_javascript="", $p_class="smallbutton")
Definition: html_input.class.php:206
HttpInput
manage the http input (get , post, request) and extract from an array
Definition: http_input.class.php:37
tr
tr($p_string, $p_extra='')
Definition: ac_common.php:88
HtmlInput\anchor
static anchor($p_text, $p_url="", $p_js="", $p_style=' class="line" ', $p_title="click")
Return a simple anchor with a url or a javascript if $p_js is not null then p_url will be javascript:...
Definition: html_input.class.php:915
$url
if(isset($_POST["FMOD_NAME"])) $url
Definition: modele.inc.php:238
DatabaseCore\fetch_array
static fetch_array($ret, $p_indice=0)
wrapper for the function pg_fetch_array
Definition: database_core.class.php:745
$sa
$sa
Definition: modele.inc.php:31
HtmlInput\button_anchor
static button_anchor($p_label, $p_value, $p_name="", $p_javascript="", $p_class="smallbutton")
create a button with a ref
Definition: html_input.class.php:238
$name
$name
Definition: modele.inc.php:412
$desc
$desc[]
Definition: database.item.php:2
HtmlInput\title_box
static title_box($p_name, $p_div, $p_mod="close", $p_js="", $p_draggable="n", $p_enlarge='n')
Title for boxes, you can customize the symbol thanks symbol with the mode "custom".
Definition: html_input.class.php:838
sql_string
sql_string($p_string)
Fix the problem with the quote char for the database.
Definition: ac_common.php:504
$valid
$valid
Definition: recover.php:70
Sort_Table
Description of class_syn_sort_table.
Definition: sort_table.class.php:26
HtmlInput\filter_table
static filter_table($p_table_id, $p_col, $start_row)
filter the rows in a table and keep the colored row in alternance
Definition: html_input.class.php:1001
name
$from_poste name
Definition: balance.inc.php:159
$i
$i
Definition: action_document_type_mtable_input.php:83
h2
h2($p_string, $p_class="", $raw="")
Definition: ac_common.php:68
$header
$header
Definition: modele.inc.php:240
DatabaseCore\num_row
static num_row($ret)
wrapper for the function pg_NumRows
Definition: database_core.class.php:734
$Max
$Max
Definition: export_security_pdf.php:158
isNumber
isNumber($p_int)
Definition: ac_common.php:218
type
$input_from type
Definition: balance.inc.php:65
$http
$http
Definition: modele.inc.php:30
$str_name
$str_name
Definition: forecast_item_mtable-input.php:31
$_REQUEST
$_REQUEST['ac']
Definition: ajax_search_action.php:26
n
vous n
Definition: modele.inc.php:397
exit
for($e=0; $e< count($afiche); $e++) exit
Definition: export_fiche_balance_csv.php:109
$count
$count
Definition: modele.inc.php:251
$sql_order
$sql_order
Definition: modele.inc.php:246
Database
contains the class for connecting to Noalyss
Definition: database.class.php:32
alert
alert($p_msg, $buffer=false)
alert in javascript
Definition: ac_common.php:731
table
$all table
Definition: company.inc.php:138
td
td($p_string='', $p_extra='')
surround the string with td
Definition: ac_common.php:83
$row
$row
Definition: ajax_anc_detail_operation.php:33
$ord
$ord
Definition: modele.inc.php:245
$seq
$seq
Definition: action_document_type_mtable_input.php:62
print
print
Definition: modele.inc.php:436