mirror of
https://github.com/YunoHost-Apps/leed_ynh.git
synced 2024-09-03 19:26:32 +02:00
Upgrade leed 1.7
This commit is contained in:
parent
93981c6287
commit
0d9cf153f3
5 changed files with 140 additions and 14 deletions
|
@ -66,11 +66,12 @@ CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà u
|
|||
}
|
||||
|
||||
GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app.
|
||||
# $1 = Nom de la base de donnée
|
||||
# Génère un mot de passe aléatoire.
|
||||
db_user=$1
|
||||
db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20)
|
||||
CHECK_VAR "$db_pwd" "db_pwd empty"
|
||||
# Utilise '$app' comme nom d'utilisateur et de base de donnée
|
||||
db_user=$app
|
||||
# Initialise la base de donnée et stocke le mot de passe mysql.
|
||||
ynh_mysql_create_db $db_user $db_user $db_pwd
|
||||
sudo yunohost app setting $app mysqlpwd -v $db_pwd
|
||||
|
@ -171,8 +172,9 @@ REMOVE_APP_DIR () { # Suppression du dossier de l'application
|
|||
}
|
||||
|
||||
REMOVE_BDD () { # Suppression de la base de donnée et de l'utilisateur associé.
|
||||
# $1 = Nom de la base de donnée
|
||||
# Utilise '$app' comme nom d'utilisateur et de base de donnée
|
||||
db_user=$app
|
||||
db_user=$1
|
||||
if mysqlshow -u root -p$(sudo cat $MYSQL_ROOT_PWD_FILE) | grep -q "^| $db_user"; then
|
||||
echo "Delete db"
|
||||
ynh_mysql_drop_db $db_user
|
||||
|
|
|
@ -54,7 +54,7 @@ sudo yunohost app setting $app admin -v $admin
|
|||
sudo yunohost app setting $app language -v $language
|
||||
sudo yunohost app setting $app domain -v $domain
|
||||
|
||||
GENERATE_DB # Créer une base de données et un utilisateur dédié au nom de l'app.
|
||||
GENERATE_DB $app # Créer une base de données et un utilisateur dédié au nom de l'app.
|
||||
|
||||
|
||||
# Crée le repertoire de destination et stocke son emplacement.
|
||||
|
@ -107,9 +107,9 @@ sudo find $final_path -type d | xargs sudo chmod 755
|
|||
# Les fichiers appartiennent à root
|
||||
sudo chown -R root: $final_path
|
||||
|
||||
# www-data doit avoir les droits d'écriture dans plugins et cache
|
||||
# www-data doit avoir les droits d'écriture dans plugins, cache et updates
|
||||
sudo mkdir $final_path/cache
|
||||
sudo chown -R www-data $final_path/cache $final_path/plugins
|
||||
sudo chown -R www-data $final_path/cache $final_path/plugins $final_path/updates
|
||||
|
||||
|
||||
# Récupération du code de synchronisation
|
||||
|
|
|
@ -15,7 +15,7 @@ else
|
|||
fi
|
||||
domain=$(sudo yunohost app setting $app domain)
|
||||
|
||||
REMOVE_BDD # Suppression de la base de donnée et de l'utilisateur associé.
|
||||
REMOVE_BDD $app # Suppression de la base de donnée et de l'utilisateur associé.
|
||||
|
||||
REMOVE_APP_DIR # Suppression du dossier de l'application
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ source .fonctions # Charge les fonctions génériques habituellement utilisées
|
|||
|
||||
# Récupère les infos de l'application.
|
||||
YNH_VERSION # Récupère le numéro de version de Yunohost.
|
||||
if [ $version = "2.4" ]; then
|
||||
if [ "$version" = "2.4" ]; then
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
else
|
||||
app=leed
|
||||
|
@ -13,6 +13,8 @@ domain=$(sudo yunohost app setting $app domain)
|
|||
path=$(sudo yunohost app setting $app path)
|
||||
admin=$(sudo yunohost app setting $app admin)
|
||||
is_public=$(sudo yunohost app setting $app is_public)
|
||||
final_path=$(sudo yunohost app setting $app final_path)
|
||||
db_pwd=$(sudo yunohost app setting $app mysqlpwd)
|
||||
|
||||
|
||||
CHECK_PATH # Vérifie et corrige la syntaxe du path.
|
||||
|
@ -28,7 +30,7 @@ sudo chown -R www-data: $final_path
|
|||
# Change variables in Leed configuration
|
||||
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
||||
sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
||||
sudo sed -i "s@NAMETOCHANGE@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
||||
sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
||||
|
||||
# Créer le fichier de configuration du pool php-fpm et le configure.
|
||||
sed -i "s@__NAMETOCHANGE__@$app@g" ../conf/php-fpm.conf
|
||||
|
@ -49,9 +51,9 @@ sudo find $final_path -type d | xargs sudo chmod 755
|
|||
# Les fichiers appartiennent à root
|
||||
sudo chown -R root: $final_path
|
||||
|
||||
# www-data doit avoir les droits d'écriture dans plugins et cache
|
||||
sudo mkdir $final_path/cache
|
||||
sudo chown -R www-data $final_path/cache $final_path/plugins
|
||||
# www-data doit avoir les droits d'écriture dans plugins, cache et updates
|
||||
sudo mkdir -p $final_path/cache
|
||||
sudo chown -R www-data $final_path/cache $final_path/plugins $final_path/updates
|
||||
|
||||
|
||||
# Récupération du code de synchronisation
|
||||
|
@ -65,19 +67,28 @@ sed -i "s@__PATH__@$path@g" ../conf/cron_leed
|
|||
sed -i "s@__CODESYNC__@$code_sync@g" ../conf/cron_leed
|
||||
sudo cp ../conf/cron_leed /etc/cron.d/$app
|
||||
|
||||
# Laisse un accès libre pour curl.
|
||||
sudo yunohost app setting $app unprotected_uris -v "/"
|
||||
# Régénère la configuration de SSOwat
|
||||
sudo yunohost app ssowatconf
|
||||
# Lance la procédure de mise à jour de leed.
|
||||
curl -kL https://$domain$path
|
||||
|
||||
# Make app private if necessary
|
||||
sudo yunohost app setting $app is_public -v "$is_public"
|
||||
if [ "$is_public" = "No" ];
|
||||
then
|
||||
# Retire l'autorisation d'accès de la page d'install.
|
||||
# Retire l'autorisation d'accès à leed
|
||||
sudo yunohost app setting $app unprotected_uris -d
|
||||
# Rend la page d'actualisation accessible pour le script cron.
|
||||
sudo yunohost app setting $app skipped_uris -v "/action.php"
|
||||
else # Si l'app est publique
|
||||
sudo yunohost app setting $app unprotected_uris -v "/"
|
||||
fi
|
||||
|
||||
# Recharge la configuration Nginx
|
||||
sudo service nginx reload
|
||||
# Régénère la configuration de SSOwat
|
||||
sudo yunohost app ssowatconf
|
||||
|
||||
|
||||
# Le thème par défaut présente actuellement un bug sur la langue et l'affichage du texte.
|
||||
mysql -h localhost -u $db_user -p$db_pwd -s $db_user -e 'UPDATE leed_configuration SET `value`="marigolds-old" WHERE `key`="theme"' # On force l'ancien thème
|
||||
|
|
113
sources/ajouts/Update.class.php
Normal file
113
sources/ajouts/Update.class.php
Normal file
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
/**
|
||||
@nom: Update
|
||||
@auteur: Maël ILLOUZ (mael.illouz@cobestran.com)
|
||||
@description: Classe de gestion des mises à jour en BDD liées aux améliorations apportées dans Leed
|
||||
@todo : Ajouter la possiblité d'executer des fichiers php de maj.
|
||||
*/
|
||||
|
||||
class Update{
|
||||
const FOLDER = '/updates';
|
||||
|
||||
/**
|
||||
* Description : Récupération des fichiers déjà passés lors des anciennes mises à jour.
|
||||
*/
|
||||
private static function getUpdateFile(){
|
||||
$updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
|
||||
if(!file_exists($updateFile)) {
|
||||
if (!touch($updateFile)) {
|
||||
die ('Impossible d\'écrire dans le répertoire .'.dirname($updateFile).'. Merci d\'ajouter les droits necessaires.');
|
||||
}
|
||||
}
|
||||
|
||||
return json_decode(file_get_contents($updateFile),true);
|
||||
}
|
||||
|
||||
private static function addUpdateFile($addFile){
|
||||
$updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
|
||||
$originFile = Update::getUpdateFile();
|
||||
if(empty($originFile))
|
||||
$originFile = array();
|
||||
$newfile = array_merge($originFile,$addFile);
|
||||
if (is_writable($updateFile)){
|
||||
file_put_contents($updateFile,json_encode($newfile));
|
||||
} else {
|
||||
die ('Impossible d\'écrire dans le fichier .'.$updateFile.'. Merci d\'ajouter les droits nécessaires.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Description : Permet de trouver les fichiers qui n'ont pas encore été joués
|
||||
*/
|
||||
private static function getNewPatch() {
|
||||
$files = glob(dirname(__FILE__). Update::FOLDER .'/*.sql');
|
||||
if(empty($files))
|
||||
$files = array();
|
||||
|
||||
$jsonFiles = Update::getUpdateFile();
|
||||
|
||||
$notPassed = array();
|
||||
|
||||
if ($jsonFiles=='') $jsonFiles[0] = array();
|
||||
|
||||
foreach($files as $file){
|
||||
$found = false;
|
||||
foreach($jsonFiles as $jsonfile){
|
||||
if (isset($jsonfile[0])) {
|
||||
if(in_array(basename($file), $jsonfile)) $found = true;
|
||||
}
|
||||
}
|
||||
if (!$found) $notPassed [] = basename($file);
|
||||
}
|
||||
return $notPassed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Description : Permet l'execution des fichiers sql non joués
|
||||
* @simulation : true pour ne pas faire les actions en bdd
|
||||
*/
|
||||
public static function ExecutePatch($simulation=false) {
|
||||
$newFilesForUpdate = Update::getNewPatch();
|
||||
|
||||
//si aucun nouveau fichier de mise à jour à traiter @return : false
|
||||
if(count($newFilesForUpdate)==0) return false;
|
||||
if (!$simulation) {
|
||||
foreach($newFilesForUpdate as $file){
|
||||
// récupération du contenu du sql
|
||||
$sql = file_get_contents(dirname(__FILE__).Update::FOLDER.'/'.$file);
|
||||
|
||||
$conn = MysqlConnector::getInstance()->connection;
|
||||
//on sépare chaque requête par les ;
|
||||
$sql_array = explode (";",$sql);
|
||||
foreach ($sql_array as $val) {
|
||||
$val = preg_replace('#([-].*)|(\n)#','',$val);
|
||||
if ($val != '') {
|
||||
//remplacement des préfixes de table
|
||||
$val = str_replace('##MYSQL_PREFIX##',MYSQL_PREFIX,$val);
|
||||
$result = $conn->query($val);
|
||||
$ficlog = dirname(__FILE__).Update::FOLDER.'/'.substr($file,0,strlen($file)-3).'log';
|
||||
if (false===$result) {
|
||||
file_put_contents($ficlog, date('d/m/Y H:i:s').' : SQL : '.$val."\n", FILE_APPEND);
|
||||
file_put_contents($ficlog, date('d/m/Y H:i:s').' : '.$conn->error."\n", FILE_APPEND);
|
||||
} else {
|
||||
file_put_contents($ficlog, date('d/m/Y H:i:s').' : SQL : '.$val."\n", FILE_APPEND);
|
||||
file_put_contents($ficlog, date('d/m/Y H:i:s').' : '.$conn->affected_rows.' rows affected'."\n", FILE_APPEND);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($conn);
|
||||
}
|
||||
$_SESSION = array();
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
// quand toutes les requêtes ont été executées, on insert le sql dans le json
|
||||
Update::addUpdateFile(array($newFilesForUpdate));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
Loading…
Reference in a new issue