[ Index ] |
|
Code source de Dolibarr 2.0.1 |
1 <?php 2 /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> 3 * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> 4 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> 5 * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> 6 * Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 * 22 * $Id: DolibarrModules.class.php,v 1.35 2005/10/22 13:45:24 eldy Exp $ 23 * $Source: /cvsroot/dolibarr/dolibarr/htdocs/includes/modules/DolibarrModules.class.php,v $ 24 */ 25 26 /** 27 \file htdocs/includes/modules/DolibarrModules.class.php 28 \brief Fichier de description et activation des modules Dolibarr 29 */ 30 31 32 /** 33 \class DolibarrModules 34 \brief Classe mère des classes de description et activation des modules Dolibarr 35 */ 36 class DolibarrModules 37 { 38 var $db; // Handler d'accès aux bases 39 40 var $boxes; // Tableau des boites 41 var $const; // Tableau des constantes 42 var $rights; // Tableau des droits 43 44 var $dbversion; 45 46 47 /** 48 * \brief Constructeur 49 * \param DB handler d'accès base 50 */ 51 function DolibarrModules($DB) 52 { 53 $this->db = $DB ; 54 $this->dbversion = "-"; 55 } 56 57 58 /** 59 * \brief Fonction d'activation. Insère en base les constantes et boites du module 60 * \param array_sql tableau de requete sql a exécuter à l'activation 61 * \return int 1 si ok, 0 si erreur 62 */ 63 function _init($array_sql) 64 { 65 global $langs; 66 $err=''; 67 68 // Insère une entrée dans llx_dolibarr_modules 69 $err+=$this->_dbactive(); 70 71 // Insère la constante d'activation module 72 $err+=$this->_active(); 73 74 // Insère les boites dans llx_boxes_def 75 $err+=$this->insert_boxes(); 76 77 // Insère les constantes associées au module dans llx_const 78 $err+=$this->insert_const(); 79 80 // Insère les permissions associées au module actif dans llx_rights_def 81 $err+=$this->insert_permissions(); 82 83 // Créé les répertoires 84 if (is_array($this->dirs)) 85 { 86 foreach ($this->dirs as $key => $value) 87 { 88 $dir = $value; 89 if ($dir && ! file_exists($dir)) 90 { 91 umask(0); 92 if (! @mkdir($dir, 0755)) 93 { 94 $this->error = $langs->trans("ErrorCanNotCreateDir",$dir); 95 dolibarr_syslog("DolibarrModules::_init error"); 96 dolibarr_syslog("ErrorCanNotCreateDir $dir"); 97 } 98 } 99 } 100 } 101 102 // Exécute les requetes sql complémentaires 103 for ($i = 0 ; $i < sizeof($array_sql) ; $i++) 104 { 105 if (! $this->db->query($array_sql[$i])) 106 { 107 $err++; 108 } 109 } 110 111 // Renvoi valeur de retour 112 if ($err > 0) return 0; 113 return 1; 114 } 115 116 117 /** \brief Fonction de désactivation. Supprime de la base les constantes et boites du module 118 * \param array_sql tableau de requete sql a exécuter à la désactivation 119 * \return int 1 si ok, 0 si erreur 120 */ 121 function _remove($array_sql) 122 { 123 $err = 0; 124 125 // Supprime entrée des modules 126 $err+=$this->_dbunactive(); 127 128 // Supprime la constante d'activation du module 129 $err+=$this->_unactive(); 130 131 // Supprime les droits de la liste des droits disponibles 132 $err+=$this->delete_permissions(); 133 134 // Supprime les boites de la liste des boites disponibles 135 $err+=$this->delete_boxes(); 136 137 // Exécute les requetes sql complémentaires 138 for ($i = 0 ; $i < sizeof($array_sql) ; $i++) 139 { 140 if (!$this->db->query($array_sql[$i])) 141 { 142 $err++; 143 } 144 } 145 146 // Renvoi valeur de retour 147 if ($err > 0) return 0; 148 return 1; 149 } 150 151 152 /** 153 \brief Retourne le nom traduit du module si la traduction existe dans admin.lang, 154 sinon le nom défini par défaut dans le module. 155 \return string Nom du module traduit 156 */ 157 function getName() 158 { 159 global $langs; 160 $langs->load("admin"); 161 162 if ($langs->trans("Module".$this->numero."Name") != ("Module".$this->numero."Name")) 163 { 164 // Si traduction du nom du module existe 165 return $langs->trans("Module".$this->numero."Name"); 166 } 167 else 168 { 169 // Si traduction du nom du module n'existe pas, on prend définition en dur dans module 170 return $this->name; 171 } 172 } 173 174 175 /** 176 \brief Retourne la description traduite du module si la traduction existe dans admin.lang, 177 sinon la description définie par défaut dans le module. 178 \return string Nom du module traduit 179 */ 180 function getDesc() 181 { 182 global $langs; 183 $langs->load("admin"); 184 185 if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc")) 186 { 187 // Si traduction de la description du module existe 188 return $langs->trans("Module".$this->numero."Desc"); 189 } 190 else 191 { 192 // Si traduction de la description du module n'existe pas, on prend définition en dur dans module 193 return $this->description; 194 } 195 } 196 197 198 /** 199 \brief Retourne la version du module. 200 Pour les modules à l'état 'experimental', retourne la traduction de 'experimental' 201 Pour les modules 'dolibarr', retourne la version de Dolibarr 202 Pour les autres modules, retourne la version du module 203 \return string Version du module 204 */ 205 function getVersion() 206 { 207 global $langs; 208 $langs->load("admin"); 209 210 if ($this->version == 'experimental') return $langs->trans("VersionExperimental"); 211 elseif ($this->version == 'development') return $langs->trans("VersionDevelopment"); 212 elseif ($this->version == 'dolibarr') return DOL_VERSION; 213 elseif ($this->version) return $this->version; 214 else return $langs->trans("VersionUnknown"); 215 } 216 217 218 /** 219 \brief Retourne la version en base du module. 220 \return string Version du module 221 */ 222 function getDbVersion() 223 { 224 global $langs; 225 $langs->load("admin"); 226 227 $sql ="SELECT active_version FROM ".MAIN_DB_PREFIX."dolibarr_modules"; 228 $sql .= " WHERE numero=".$this->numero." AND active = 1"; 229 230 $resql = $this->db->query($sql); 231 232 if ($resql) 233 { 234 $num = $this->db->num_rows($resql); 235 236 if ($num > 0) 237 { 238 $row = $this->db->fetch_row($resql); 239 240 $this->dbversion = $row[0]; 241 } 242 243 $this->db->free($resql); 244 } 245 246 247 if ($this->version == 'experimental') return $langs->trans("VersionExperimental"); 248 elseif ($this->version == 'development') return $langs->trans("VersionDevelopment"); 249 elseif ($this->version == 'dolibarr') return DOL_VERSION; 250 elseif ($this->version) return $this->version; 251 else return ""; 252 253 } 254 255 256 /** 257 \brief Insère ligne module 258 \return int Nombre d'erreurs (0 si ok) 259 */ 260 function _dbactive() 261 { 262 $err = 0; 263 264 $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";"; 265 $this->db->query($sql_del); 266 267 $sql ="INSERT INTO ".MAIN_DB_PREFIX."dolibarr_modules (numero,active,active_date,active_version)"; 268 $sql .= " VALUES ("; 269 $sql .= $this->numero.",1,now(),'".$this->version."')"; 270 271 $this->db->query($sql); 272 273 return $err; 274 } 275 276 277 /** 278 \brief Supprime ligne module 279 \return int Nombre d'erreurs (0 si ok) 280 */ 281 function _dbunactive() 282 { 283 $err = 0; 284 285 $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";"; 286 $this->db->query($sql_del); 287 288 return $err; 289 } 290 291 292 /** 293 \brief Insère constante d'activation module 294 \return int Nombre d'erreurs (0 si ok) 295 */ 296 function _active() 297 { 298 $err = 0; 299 300 $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';"; 301 $this->db->query($sql_del); 302 303 $sql ="INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES 304 ('".$this->const_name."','1',0);"; 305 if (!$this->db->query($sql)) 306 { 307 $err++; 308 } 309 310 return $err; 311 } 312 313 314 /** 315 \brief Supprime constante d'activation module 316 \return int Nombre d'erreurs (0 si ok) 317 */ 318 function _unactive() 319 { 320 $err = 0; 321 322 $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';"; 323 $this->db->query($sql_del); 324 325 return $err; 326 } 327 328 329 /** 330 \brief Insère les boites associées au module dans llx_boxes_def 331 \return int Nombre d'erreurs (0 si ok) 332 */ 333 function insert_boxes() 334 { 335 $err=0; 336 337 foreach ($this->boxes as $key => $value) 338 { 339 $titre = $this->boxes[$key][0]; 340 $file = $this->boxes[$key][1]; 341 342 $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."boxes_def WHERE name ='".$titre."'"; 343 344 $result=$this->db->query($sql); 345 if ($result) 346 { 347 $row = $this->db->fetch_row($result); 348 if ($row[0] == 0) 349 { 350 $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (name, file) VALUES ('".$titre."','".$file."')"; 351 if (! $this->db->query($sql)) 352 { 353 $err++; 354 } 355 } 356 } 357 else 358 { 359 $err++; 360 } 361 } 362 363 return $err; 364 } 365 366 367 /** 368 \brief Supprime les boites 369 \return int Nombre d'erreurs (0 si ok) 370 */ 371 function delete_boxes() 372 { 373 $err=0; 374 375 foreach ($this->boxes as $key => $value) 376 { 377 $titre = $this->boxes[$key][0]; 378 $file = $this->boxes[$key][1]; 379 380 $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def WHERE file = '".$file."'"; 381 if (! $this->db->query($sql) ) 382 { 383 $err++; 384 } 385 } 386 387 return $err; 388 } 389 390 /** 391 \brief Insère les constantes associées au module dans llx_const 392 \return int Nombre d'erreurs (0 si ok) 393 */ 394 function insert_const() 395 { 396 $err=0; 397 398 foreach ($this->const as $key => $value) 399 { 400 $name = $this->const[$key][0]; 401 $type = $this->const[$key][1]; 402 $val = $this->const[$key][2]; 403 $note = $this->const[$key][3]; 404 $visible= $this->const[$key][4]; 405 406 $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."const WHERE name ='".$name."'"; 407 408 $result=$this->db->query($sql); 409 if ($result) 410 { 411 $row = $this->db->fetch_row($result); 412 413 if ($row[0] == 0) 414 { 415 if (! $visible) $visible='0'; 416 if (strlen($note)) 417 { 418 $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible) VALUES ('$name','$type','$val','$note','$visible');"; 419 } 420 elseif (strlen($val)) 421 { 422 $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,visible) VALUES ('$name','$type','$val','$visible');"; 423 } 424 else 425 { 426 $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,visible) VALUES ('$name','$type','$visible');"; 427 } 428 429 if (! $this->db->query($sql) ) 430 { 431 $err++; 432 } 433 } 434 } 435 else 436 { 437 $err++; 438 } 439 } 440 441 return $err; 442 } 443 444 /** 445 \brief Insère les permissions associées au module dans llx_rights_def 446 \return int Nombre d'erreurs (0 si ok) 447 */ 448 function insert_permissions() 449 { 450 $err=0; 451 452 //print $this->rights_class." ".sizeof($this->rights)."<br>"; 453 454 // Test si module actif 455 $sql_del = "SELECT value FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';"; 456 $resql=$this->db->query($sql_del); 457 if ($resql) { 458 459 $obj=$this->db->fetch_object($resql); 460 if ($obj->value) { 461 462 // Si module actif 463 foreach ($this->rights as $key => $value) 464 { 465 $r_id = $this->rights[$key][0]; 466 $r_desc = $this->rights[$key][1]; 467 $r_type = $this->rights[$key][2]; 468 $r_def = $this->rights[$key][3]; 469 $r_perms = $this->rights[$key][4]; 470 $r_subperms = $this->rights[$key][5]; 471 $r_modul = $this->rights_class; 472 473 if (strlen($r_perms) ) 474 { 475 if (strlen($r_subperms) ) 476 { 477 $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def "; 478 $sql .= " (id, libelle, module, type, bydefault, perms, subperms)"; 479 $sql .= " VALUES "; 480 $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."');"; 481 } 482 else 483 { 484 $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def "; 485 $sql .= " (id, libelle, module, type, bydefault, perms)"; 486 $sql .= " VALUES "; 487 $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."');"; 488 } 489 } 490 else 491 { 492 $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def "; 493 $sql .= " (id, libelle, module, type, bydefault)"; 494 $sql .= " VALUES "; 495 $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.");"; 496 } 497 498 $resql=$this->db->query($sql); 499 if (! $resql) 500 { 501 if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS") { 502 $err++; 503 } 504 } 505 } 506 } 507 } 508 509 return $err; 510 } 511 512 513 /** 514 \brief Supprime les permissions 515 \return int Nombre d'erreurs (0 si ok) 516 */ 517 function delete_permissions() 518 { 519 $err=0; 520 521 $sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';"; 522 if (!$this->db->query($sql)) 523 { 524 $err++; 525 } 526 527 return $err; 528 } 529 530 } 531 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 12:29:37 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |