1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/pluxml_ynh.git synced 2024-09-03 20:16:02 +02:00
pluxml_ynh/sources/update/class.plx.updater.php
2016-06-26 21:28:27 +02:00

201 lines
No EOL
5.2 KiB
PHP

<?php
/**
* Classe plxUpdater responsable du gestionnaire des mises à jour
*
* @package PLX
* @author Stephane F
**/
define('PLX_UPDATE', PLX_ROOT.'update/');
class plxUpdater {
public $newVersion = '';
public $oldVersion = '' ;
public $allVersions = null;
public $plxAdmin; # objet plxAdmin
/**
* Constructeur de la classe plxUpdater
*
* @param versions array liste des versions + script de mise à jour (fichier versions.php)
* @return null
* @author Stephane F
**/
public function __construct($versions) {
$this->allVersions = $versions;
$this->plxAdmin = plxAdmin::getInstance();
$this->getVersions();
}
/**
* Méthode chargée de démarrer les mises à jour
*
* @param version précédente version de pluxml à mettre à jour, sélectionner par l'utilisateur
* @return null
* @author Stéphane F
**/
public function startUpdate($version='') {
# suppression des versions qui ont déjà été mises à jour
$offset = array_search($version, array_keys($this->allVersions));
if($offset!='') {
$this->allVersions = array_slice($this->allVersions, $offset+1, null, true);
}
# démarrage des mises à jour
if($this->doUpdate())
$this->updateVersion();
}
/**
* Méthode qui récupère l'ancien et le nouveau n° de version de pluxml
*
* @return null
* @author Stéphane F
**/
public function getVersions() {
# Récupère l'ancien n° de version de Pluxml
if(isset($this->plxAdmin->aConf['version']))
$this->oldVersion = $this->plxAdmin->aConf['version'];
if(!isset($this->allVersions[$this->oldVersion]))
$this->oldVersion='';
# Récupère le nouveau n° de version de PluXml
if(is_readable(PLX_ROOT.'version')) {
$f = file(PLX_ROOT.'version');
$this->newVersion = $f['0'];
}
}
/**
* Méthode qui met à jour le n° de version dans le fichier parametres.xml
*
* @return null
* @author Stéphane F
**/
public function updateVersion() {
# on relit le fichier de paramètre pour récupérer les éventuels nouveaux ajoutés par la mise à jour
$this->plxAdmin->getConfiguration(path('XMLFILE_PARAMETERS'));
$new_params['version'] = $this->newVersion;
$this->plxAdmin->editConfiguration($this->plxAdmin->aConf, $new_params);
printf(L_UPDATE_ENDED.'<br />', $this->newVersion);
}
/**
* Méthode qui execute les mises à jour étape par étape
*
* @return stdout
* @author Stéphane F
**/
public function doUpdate() {
$errors = false;
foreach($this->allVersions as $num_version => $upd_filename) {
if($upd_filename!='') {
echo '<p><strong>'.L_UPDATE_INPROGRESS.' '.$num_version.'</strong></p>';
# inclusion du fichier de mise à jour
include(PLX_UPDATE.$upd_filename);
# création d'un instance de l'objet de mise à jour
$class_name = 'update_'.str_replace('.', '_', $num_version);
$class_update = new $class_name();
# appel des différentes étapes de mise à jour
$next = true;
$step = 1;
while($next AND !$errors) {
$method_name = 'step'.$step;
if(method_exists($class_name, $method_name)) {
if(!$class_update->$method_name()) {
$errors = true; # erreur détectée
} else {
$step++; # étape suivante
}
}
else $next = false;
}
echo '<br />';
}
}
echo '<br />';
if($errors)
echo '<p class="error">'.L_UPDATE_ERROR.'</p>';
else
echo '<p class="msg">'.L_UPDATE_SUCCESSFUL.'</p>';
return !$errors;
}
}
/**
* Classe plxUpdate responsable d'exécuter des actions de mises à jour
*
* @package PLX
* @author Stephane F
**/
class plxUpdate {
protected $plxAdmin; # objet de type plxAdmin
/**
* Constructeur qui initialise l'objet plxAdmin par référence
*
* @return null
* @author Stephane F
**/
public function __construct() {
$this->plxAdmin = plxAdmin::getInstance();
if(!isset($this->plxAdmin->aConf['plugins']))
$this->plxAdmin->aConf['plugins']='data/configuration/plugins.xml';
}
/**
* Méthode qui met à jour le fichier parametre.xml en important les nouveaux paramètres
*
* @param new_params tableau contenant la liste des nouveaux paramètres avec leur valeur par défaut.
* @return stdio
* @author Stéphane F
**/
public function updateParameters($new_params) {
# enregistrement des nouveaux paramètres
$ret = $this->plxAdmin->editConfiguration($this->plxAdmin->aConf, $new_params);
# valeur de retour
return $ret.'<br />';
}
/**
* Méthode récursive qui supprimes tous les dossiers et les fichiers d'un répertoire
*
* @param deldir répertoire de suppression
* @return boolean résultat de la suppression
* @author Stephane F
**/
public function deleteDir($deldir) { #fonction récursive
if(is_dir($deldir) AND !is_link($deldir)) {
if($dh = opendir($deldir)) {
while(FALSE !== ($file = readdir($dh))) {
if($file != '.' AND $file != '..') {
$this->deleteDir(($deldir!='' ? $deldir.'/' : '').$file);
}
}
closedir($dh);
}
return rmdir($deldir);
}
return unlink($deldir);
}
}
?>