1
0
Fork 0
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:
Maniack Crudelis 2016-06-25 13:08:00 +02:00
parent 93981c6287
commit 0d9cf153f3
5 changed files with 140 additions and 14 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View 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;
}
}
?>