lib.installer.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. # ***** BEGIN LICENSE BLOCK *****
  3. # This file is a contributed part of DotClear.
  4. # Copyright (c) 2004-2005 Olivier Meunier and contributors. All rights
  5. # reserved.
  6. #
  7. # DotClear is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 2 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # DotClear is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with DotClear; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. #
  21. # ***** END LICENSE BLOCK *****
  22. if (!class_exists('installer')) {
  23. /**
  24. @class installer
  25. */
  26. class installer {
  27. /**
  28. @function checkPluginShareDir
  29. Vérifie l'existence d'un sous répertoire portant le nom du plugin
  30. dans le dossier share/
  31. Ce sous dossier sera utilisé pour stocker les éventuelles informations
  32. de configuration ou autres fichiers relatifs au plugin nommé.
  33. Si le dossier n'existe pas, cette méthode essaiera de le créer et
  34. d'y placer un fichier .htaccess
  35. La fonction renvoie TRUE en cas de réussite (dossier existant ou
  36. créé avec succès), FALSE sinon.
  37. @param string dirname Le nom du sous dossier recherché
  38. @param boolean protect Flag pour protéger ou non l'accès par HTTP
  39. à ce répertoire
  40. @return boolean
  41. */
  42. function checkPluginShareDir($dirname,$protect = true)
  43. {
  44. $my_share_dir = DC_SHARE_DIR.'/'.$dirname;
  45. $failed = false;
  46. if (!is_dir($my_share_dir)) {
  47. $failed = true;
  48. // Si PHP en safe_mode, on laisse l'utilisateur créer
  49. // manuellement le sous répertoire dans share/
  50. if (ini_get('safe_mode') != false) return($failed);
  51. if (is_writeable(DC_SHARE_DIR)) {
  52. @umask(000);
  53. if (@mkdir($my_share_dir, 0777)) {
  54. $failed = false;
  55. // Creation d'un .htaccess dans le répertoire
  56. if ($fh = @fopen($my_share_dir.'/.htaccess', "wb")) {
  57. $deny_str = $protect?'':'#';
  58. $deny_str .= "Deny from all\n";
  59. fwrite($fh,
  60. "# Comment/uncomment the lines below depending of your needs\n".
  61. "# To deny any access to this directory\n".
  62. $deny_str
  63. );
  64. fclose($fh);
  65. }
  66. }
  67. }
  68. }
  69. return($failed);
  70. }
  71. /**
  72. @function loadPluginConfig
  73. Lit le fichier de configuration (.ini) d'un plugin.
  74. Si le fichier existe, cette méthode utilise un appel à la méthode
  75. de classe iniFile::read() pour en lire le contenu et renvoyer la
  76. configuration sous forme d'un tableau associatif (en cas de succès)
  77. ou FALSE (en cas d'échec).
  78. Si le fichier n'existe pas, FALSE est retourné.
  79. (Cf. inc/classes/class.ini.file.php)
  80. @param string plugin_name Le nom du plugin dont la configuration
  81. est souhaitée
  82. @return mixed
  83. */
  84. function loadPluginConfig($plugin_name)
  85. {
  86. $cfg_file = DC_SHARE_DIR.'/'.$plugin_name.'/'.$plugin_name.'.ini';
  87. if (@file_exists($cfg_file)) {
  88. return(iniFile::read($cfg_file, true));
  89. } else {
  90. return(false);
  91. }
  92. }
  93. /**
  94. @function savePluginConfig
  95. Enregistre la configuration d'un plugin dans un fichier .ini associé.
  96. @param string plugin_name Le nom du plugin concerné
  97. @param array plugin_cfg Les informations de configuration du
  98. plugin sous la forme d'un tableau associatif.
  99. @return boolean
  100. */
  101. function savePluginConfig($plugin_name, $plugin_cfg)
  102. {
  103. $cfg_file = DC_SHARE_DIR.'/'.$plugin_name.'/'.$plugin_name.'.ini';
  104. if (!@file_exists($cfg_file)) {
  105. @umask(000);
  106. if (@touch($cfg_file)) {
  107. @chmod($cfg_file, 0664);
  108. }
  109. }
  110. $ini_file = new iniFile($cfg_file);
  111. if (!empty($plugin_cfg) && is_array($plugin_cfg)) {
  112. foreach ($plugin_cfg as $key => $value) {
  113. $ini_file->editVar($key, $value);
  114. }
  115. $ini_file->saveFile();
  116. if ($ini_file->file && defined('DC_UPDATE_FILE_W') && DC_UPDATE_FILE_W) {
  117. files::touch(DC_UPDATE_FILE,time());
  118. }
  119. }
  120. return($ini_file->file);
  121. }
  122. }
  123. }
  124. ?>