* Copyright (C) 2004 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Eric Seigne * * 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. * * $Id$ * $Source$ */ /*! \file htdocs/html.form.class.php \brief Fichier de la classe des fonctions prédéfinie de composants html \version $Revision$ */ /*! \class Form \brief Classe permettant la génération de composants html */ class Form { var $db; var $errorstr; /*! \brief Constructeur \param DB handler d'accès base de donnée */ function Form($DB) { $this->db = $DB; return 1; } /* * \brief Retourne la liste déroulante des départements/province/cantons tout pays confondu ou pour un pays donné. * \remarks Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays. * \remarks La cle de la liste est le code (il peut y avoir plusieurs entrée pour * un code donnée mais dans ce cas, le champ pays diffère). * Ainsi les liens avec les départements se font sur un département indépendemment de nom som. * \param selected code forme juridique a présélectionné * \param pays_code 0=liste tous pays confondus, sinon code du pays à afficher */ function select_departement($selected='',$pays_code=0) { global $conf,$langs; $langs->load("dict"); $htmlname='departement_id'; // On recherche les départements/cantons/province active d'une region et pays actif $sql = "SELECT d.rowid, d.code_departement as code , d.nom, d.active, p.libelle as libelle_pays, p.code as code_pays FROM"; $sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid"; $sql .= " AND d.active = 1 AND r.active = 1 AND p.active = 1"; if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; $sql .= " ORDER BY p.code, d.code_departement"; $result=$this->db->query($sql); if ($result) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Retourne la liste déroulante des regions actives dont le pays est actif * \remarks La cle de la liste est le code (il peut y avoir plusieurs entrée pour * un code donnée mais dans ce cas, le champ pays et lang diffère). * Ainsi les liens avec les regions se font sur une region independemment * de nom som. */ function select_region($selected='',$htmlname='region_id') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT r.rowid, r.code_region as code, r.nom as libelle, r.active, p.libelle as libelle_pays FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE r.fk_pays=p.rowid AND r.active = 1 and p.active = 1 ORDER BY libelle_pays, libelle ASC"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Retourne la liste déroulante des pays actifs, dans la langue de l'utilisateur * \param selected code pays pré-sélectionné * \param htmlname nom de la liste deroulante * \todo trier liste sur noms après traduction plutot que avant */ function select_pays($selected='',$htmlname='pays_id') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT rowid, libelle, code, active FROM ".MAIN_DB_PREFIX."c_pays"; $sql .= " WHERE active = 1"; $sql .= " ORDER BY code ASC;"; if ($this->db->query($sql)) { print ''; return 0; } else { dolibarr_print_error($this->db); return 1; } } /* * \brief Retourne la liste déroulante des langues disponibles * \param */ function select_lang($selected='',$htmlname='lang_id') { global $langs; $langs_available=$langs->get_available_languages(); print ''; } /* * \brief Retourne la liste déroulante des sociétés * \param */ function select_societes($selected='',$htmlname='soc_id') { // On recherche les societes $sql = "SELECT s.idp, s.nom FROM "; $sql .= MAIN_DB_PREFIX ."societe as s "; $sql .= "ORDER BY nom ASC"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Retourne la liste déroulante des contacts d'une société donnée * */ function select_contacts($socid,$selected='',$htmlname='contactid') { // On recherche les societes $sql = "SELECT s.idp, s.name, s.firstname FROM "; $sql .= MAIN_DB_PREFIX ."socpeople as s"; $sql .= " WHERE fk_soc=".$socid; $sql .= " ORDER BY s.name ASC"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Retourne le nom d'un pays * \param id id du pays */ function pays_name($id) { $sql = "SELECT rowid, libelle FROM ".MAIN_DB_PREFIX."c_pays"; $sql .= " WHERE rowid=$id;"; if ($this->db->query($sql)) { $num = $this->db->num_rows(); if ($num) { $obj = $this->db->fetch_object(); return $obj->libelle; } else { return "Non défini"; } } } /* * \brief Retourne la liste déroulante des civilite actives * \param selected civilite pré-sélectionnée */ function select_civilite($selected='') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT rowid, code, civilite, active FROM ".MAIN_DB_PREFIX."c_civilite"; $sql .= " WHERE active = 1"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Retourne la liste déroulante des formes juridiques tous pays confondu ou pour un pays donné. * \remarks Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays * \param selected code forme juridique a présélectionné * \param pays_code 0=liste tous pays confondus, sinon code du pays à afficher */ function select_forme_juridique($selected='',$pays_code=0) { global $conf,$langs; $langs->load("dict"); // On recherche les formes juridiques actives des pays actifs $sql = "SELECT f.rowid, f.code as code , f.libelle as nom, f.active, p.libelle as libelle_pays, p.code as code_pays"; $sql .= " FROM llx_c_forme_juridique as f, llx_c_pays as p"; $sql .= " WHERE f.fk_pays=p.rowid"; $sql .= " AND f.active = 1 AND p.active = 1"; if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; $sql .= " ORDER BY p.code, f.code"; $result=$this->db->query($sql); if ($result) { print ''; } else { dolibarr_print_error($this->db); } } /* * \brief Affiche formulaire de demande de confirmation * \param page page * \param title title * \param question question * \param action action */ function form_confirm($page, $title, $question, $action) { global $langs; print '
'; print ''; print ''; print ''; print '\n"; print ''; print '
'.$title.'
'.$question.''; $this->selectyesno("confirm","no"); print "
'; print "
\n"; } /* * \brief Selection du taux de tva * */ function select_tva($name='', $defaulttx = '') { if (! strlen(trim($name))) { $name = "tauxtva"; } $file = DOL_DOCUMENT_ROOT . "/conf/tva.local.php"; if (is_readable($file)) { include $file; } else { $txtva[0] = '19.6'; $txtva[1] = '5.5'; $txtva[2] = '0'; } if ($defaulttx == '') { $defaulttx = $txtva[0]; } $taille = sizeof($txtva); print ''; } /* * \brief Affiche zone de selection de date * Liste deroulante pour les jours, mois, annee et eventuellement heurs et minutes * Les champs sont présélectionnées avec: * - La date set_time (timestamps ou date au format YYYY-MM-DD ou YYYY-MM-DD HH:MM) * - La date du jour si set_time vaut '' * - Aucune date (champs vides) si set_time vaut -1 */ function select_date($set_time='', $prefix='re', $h = 0, $m = 0, $empty=0) { if (! $set_time && ! $empty) { $set_time = time(); } $strmonth[1] = "Janvier"; $strmonth[2] = "Février"; $strmonth[3] = "Mars"; $strmonth[4] = "Avril"; $strmonth[5] = "Mai"; $strmonth[6] = "Juin"; $strmonth[7] = "Juillet"; $strmonth[8] = "Août"; $strmonth[9] = "Septembre"; $strmonth[10] = "Octobre"; $strmonth[11] = "Novembre"; $strmonth[12] = "Décembre"; // Analyse de la date de préselection if (eregi('^([0-9]+)\-([0-9]+)\-([0-9]+)\s?([0-9]+)?:?([0-9]+)?',$set_time,$reg)) { // Date au format 'YYYY-MM-DD' ou 'YYYY-MM-DD HH:MM:SS' $syear = $reg[1]; $smonth = $reg[2]; $sday = $reg[3]; $shour = $reg[4]; $smin = $reg[5]; } else { // Date est un timestamps $syear = date("Y", $set_time); $smonth = date("n", $set_time); $sday = date("d", $set_time); $shour = date("H", $set_time); $smin = date("i", $set_time); } print '"; print '"; if ($empty || $set_time == -1) { print ''; } else { print '\n"; } if ($h) { print 'H\n"; if ($m) { print 'M\n"; } } } /* * \brief Affiche liste déroulante * */ function select($name, $sql, $id='') { $result = $this->db->query($sql); if ($result) { print '"; } else { print $this->db->error(); } } /*! \brief Affiche un select à partir d'un tableau \param name nom de la zone select \param array tableau de key+valeur \param id key présélectionnée \param empty 1 si il faut un valeur " " dans la liste, 0 sinon \param key_libelle 1 pour afficher la key dans la valeur "[key] value" */ function select_array($name, $array, $id='', $empty=0, $key_libelle=0) { print '"; } /* * \brief Renvoie la chaîne de caractère décrivant l'erreur * */ function error() { return $this->errorstr; } /* * \brief Selection de oui/non en caractere (renvoi yes/no) * \param name nom du select * \param value valeur présélectionnée * \param option 0 retourne yes/no, 1 retourne 1/0 */ function selectyesno($name,$value='',$option=0) { global $langs; $yes="yes"; $no="no"; if ($option) { $yes="1"; $no="0"; } print ''."\n"; } /* * \brief Selection de oui/non en chiffre (renvoi 1/0) * \param name nom du select * \param value valeur présélectionnée */ function selectyesnonum($name,$value='') { $this->selectyesno($name,$value,1); } /* * \brief Checkbox * */ function checkbox($name,$checked=0,$value=1) { if ($checked==1){ print "\n"; }else{ print "\n"; } } } ?>