Changeset 2904651
- Timestamp:
- 04/26/2023 03:22:05 PM (3 years ago)
- Location:
- stn-save-to-nextcloud/trunk
- Files:
-
- 7 edited
-
Controleurs/CreateBdd.php (modified) (1 diff)
-
Controleurs/CreateZip.php (modified) (1 diff)
-
Controleurs/DeleteSingleSave.php (modified) (1 diff)
-
Controleurs/MergeChunk.php (modified) (1 diff)
-
Controleurs/TakeBDD.php (modified) (1 diff)
-
STN.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
stn-save-to-nextcloud/trunk/Controleurs/CreateBdd.php
r2875765 r2904651 47 47 dbDelta($sql); 48 48 dbDelta($sql2); 49 50 51 52 49 53 50 ?> -
stn-save-to-nextcloud/trunk/Controleurs/CreateZip.php
r2875765 r2904651 133 133 $zip->close(); 134 134 135 // Si le gandarme est programm er135 // Si le gandarme est programmé 136 136 if (wp_next_scheduled ( 'gendarmeZip', array($date, $time))) { 137 137 // On le stop -
stn-save-to-nextcloud/trunk/Controleurs/DeleteSingleSave.php
r2875765 r2904651 36 36 37 37 // Envoi la requête (créer le morceau chunk dans le dossier uuid) 38 $resSendChunk = wp_remote_request(get_option('url_dlwcloud').'/remote.php/dav/'. 39 'files/'.get_option('login_dlwcloud').get_option('folder_dlwcloud') . 40 $date."_".$time."_wp_save_".stn_save_to_nextcloud::getDomain().".zip", $args); 38 $resSendChunk = wp_remote_request(stn_save_to_nextcloud::getFileNextCloud($date, $time), $args); 41 39 42 40 -
stn-save-to-nextcloud/trunk/Controleurs/MergeChunk.php
r2875765 r2904651 19 19 'Authorization' => 'Basic ' . base64_encode(get_option("login_dlwcloud") . ":" . get_option("pass_dlwcloud")), 20 20 // Va être envoyer vers la destination 21 'Destination' => get_option('url_dlwcloud').'/remote.php/dav/'. 22 'files/'.get_option('login_dlwcloud').get_option('folder_dlwcloud') . 23 $date."_".$time."_wp_save_".stn_save_to_nextcloud::getDomain().".zip", 21 'Destination' => stn_save_to_nextcloud::getFileNextCloud($date, $time), 24 22 ); 25 23 -
stn-save-to-nextcloud/trunk/Controleurs/TakeBDD.php
r2875765 r2904651 31 31 // Pour toute les tables 32 32 foreach ($tables as $table) { 33 // Récupère toute les occurences de la table 34 $selectAllFromTable = $mysqli->query("SELECT * FROM $table"); 35 // Compte de nombre d'occurences 36 $numColumns = $selectAllFromTable->field_count; 37 38 // Ajout dans le script 39 40 // Si la table exist on la supprime 41 $script .= "DROP TABLE IF EXISTS $table;"; 42 //Ajoute le script de CREATE TABLE 43 $createTable = $mysqli->query("SHOW CREATE TABLE $table"); 44 // Récupère le resultat de la requête 45 $row2 = $createTable->fetch_row(); 46 // Ajoute le script en sautant des lignes pour la lisibilité 47 $script .= "\n\n" . $row2[1] . ";\n\n"; 48 49 // Pour toute les occurences 50 while ($row = $selectAllFromTable->fetch_row()) { 51 // Ajoute un INSERT INTO 52 $script .= "INSERT INTO $table VALUES("; 53 // Pour tous les champs dans la table 54 for ($j=0; $j < $numColumns; $j++) { 55 // Gère les caractères spéciaux 56 $row[$j] = addslashes($row[$j]); 57 $row[$j] = str_replace("\n","\\n",$row[$j]); 58 // Ajoute la valeur dans VALUES() 59 $script .= '"' . $row[$j] . '"'; 33 if($table != $wpdb->prefix.'stn_dir_chunk' && $table != $wpdb->prefix.'stn_file_in_zip'){ 34 // Récupère toute les occurences de la table 35 $selectAllFromTable = $mysqli->query("SELECT * FROM $table"); 36 // Compte de nombre d'occurences 37 $numColumns = $selectAllFromTable->field_count; 60 38 61 // Si ce n'est pas la dernière values 62 if ($j < ($numColumns-1)) { 63 // On ajoute une virgule 64 $script .= ','; 65 66 } 67 } 68 // Fin du INSERT INTO 69 $script .= ");\n"; 70 } 71 // Saute de lignes pour marqué la fin de cet table 72 $script .= "\n\n\n"; 39 // Ajout dans le script 40 41 // Si la table exist on la supprime 42 $script .= "DROP TABLE IF EXISTS $table;"; 43 //Ajoute le script de CREATE TABLE 44 $createTable = $mysqli->query("SHOW CREATE TABLE $table"); 45 // Récupère le resultat de la requête 46 $row2 = $createTable->fetch_row(); 47 // Ajoute le script en sautant des lignes pour la lisibilité 48 $script .= "\n\n" . $row2[1] . ";\n\n"; 49 50 // Pour toute les occurences 51 while ($row = $selectAllFromTable->fetch_row()) { 52 // Ajoute un INSERT INTO 53 $script .= "INSERT INTO $table VALUES("; 54 // Pour tous les champs dans la table 55 for ($j=0; $j < $numColumns; $j++) { 56 // Gère les caractères spéciaux 57 $row[$j] = addslashes($row[$j]); 58 $row[$j] = str_replace("\n","\\n",$row[$j]); 59 // Ajoute la valeur dans VALUES() 60 $script .= '"' . $row[$j] . '"'; 61 62 // Si ce n'est pas la dernière values 63 if ($j < ($numColumns-1)) { 64 // On ajoute une virgule 65 $script .= ','; 66 } 67 } 68 // Fin du INSERT INTO 69 $script .= ");\n"; 70 } 71 // Saute de lignes pour marqué la fin de cet table 72 $script .= "\n\n\n"; 73 } 73 74 } 74 75 -
stn-save-to-nextcloud/trunk/STN.php
r2904476 r2904651 8 8 * * Plugin URI: httsp://www.davelopweb.fr/ 9 9 * Description: Sauvegarde wordpress + Bdd mensuelle vers votre instance Nextcloud 10 * * Version: 2. 0.110 * * Version: 2.1.0 11 11 * Author: Dave DELALLEAU / Lucas BOUTEVIN SANCE 12 12 * Author URI: https://www.davelopweb.fr/#contact … … 14 14 * 15 15 */ 16 17 class stn_save_to_nextcloud{ 16 17 /** 18 19 Ce fichier contient tout les includes avec les fonction et classes utile pour la sauvegarde et la restauration 18 20 21 **/ 19 22 20 // Un cron WP permet de gérer la planification d'action php 21 //activation du cron à l'activation 22 function activate(){ 23 // Créer la table qui va servir à gérer les chunks 24 include("Controleurs/CreateBdd.php"); 25 } 26 27 //désactivation du cron 28 function desactivate(){ 29 // Si l'évement est programmé 30 if (wp_next_scheduled ( 'programmeAndSave' )) { 31 wp_clear_scheduled_hook('programmeAndSave'); 32 } 33 // Si l'évement lancer maintenant est programmé 34 if (wp_next_scheduled ( 'saveNow' )) { 35 wp_clear_scheduled_hook('saveNow'); 36 } 37 // Supprime la BDD 38 include("Controleurs/DeleteBdd.php"); 39 } 40 41 // Fonction qui retourne le timestamp de la prochaine saauvegarde à effectuer selon les options enregistrés 42 static function calculDateSave(){ 43 // Si la sauvegarde est tout les mois 44 if(get_option('frequency_dlwcloud') == "month"){ 45 // Récupère la timestamp 46 $timestamp = strtotime('first '.get_option('day_dlwcloud').' of next month '.get_option('hour_dlwcloud').":00"); 47 } 48 // Si la sauvegarde est toute les semaines 49 else if(get_option('frequency_dlwcloud') == "week"){ 50 // Récupère la timestamps 51 $timestamp = strtotime('next '.get_option('day_dlwcloud').' '.get_option('hour_dlwcloud').":00"); 52 } 53 // Si c'est deux fois pas mois 54 else{ 55 switch(true){ 56 // Si on a pas dépassé le premier $jour du mois 57 case time() < strtotime('first '.get_option('day_dlwcloud').' of this month '.get_option('hour_dlwcloud').":00"): 58 $timestamp = strtotime('first '.get_option('day_dlwcloud').' of this month '.get_option('hour_dlwcloud').":00"); 59 break; 60 // Si on a pas dépassé le troisième $jour du mois 61 case time() < strtotime('third '.get_option('day_dlwcloud').' of this month '.get_option('hour_dlwcloud').":00"): 62 $timestamp = strtotime('third '.get_option('day_dlwcloud').' of this month '.get_option('hour_dlwcloud').":00"); 63 break; 64 // Si on a passé les deux 65 default: 66 // Le premier $jour du mois suivant 67 $timestamp = strtotime('first '.get_option('day_dlwcloud').' of next month '.get_option('hour_dlwcloud').":00"); 68 69 } 70 } 71 // Calcul le UTC avec l'heure locale 72 $decalage = current_time("timestamp") - time(); 73 // Adapte le timestamp à l'heure locale 74 $adaptedTimestamp = $timestamp - $decalage; 75 // Retourne le timestamp où doit s'effectuer la sauvegarde adapter à l'heure locale 76 return $adaptedTimestamp; 77 78 } 79 80 // Retourne le nom de domain du site WordPress 81 static function getDomain(){ 82 83 // Va chercher le nom de domain du WordPress 84 $urlparts = parse_url(home_url()); 85 // Va chercher le nom de domain du WordPress 86 return $urlparts['host']; 87 88 } 89 90 // Retourne le chemin du fichier zip dans le FTP 91 static function getFileCloud($date, $time){ 92 return ABSPATH . "wp_save_all_" . $date ."_".$time."_".stn_save_to_nextcloud::getDomain().".zip"; 93 } 94 95 // Retourne le chemin du fichier zip dans le FTP 96 static function getFileBDD($date, $time){ 97 return ABSPATH . "wp_save_bdd_" . $date ."_".$time."_".stn_save_to_nextcloud::getDomain().".sql"; 98 } 99 100 // Récupère la valeur du champ passé en paramètre pour le fichier en cour 101 static function getCurrentFile($champ, $table="stn_dir_chunk"){ 102 // Récupère la BDD 103 global $wpdb; 104 // Prépare le requête 105 $sql = "SELECT " . $champ . " FROM " . $wpdb->prefix . $table . " WHERE finish = false"; 106 // Execute la requête et retourne son resultat 107 return get_object_vars($wpdb->get_results($sql)[0])[$champ]; 108 } 109 110 // Fonction qui test la connexion avec NextCloud 111 static function is_NextCloud_good(){ 112 113 // Lance un test de connexion avec NextCloud 114 include("Controleurs/isNextCloudGood.php"); 115 116 // Si la connexion est incorrect 117 if(is_wp_error($nextcloud_response)){ 118 return false; 119 } 120 // Si la connexion est correct 121 else{ 122 return true; 123 } 124 } 125 126 // Fonction qui supprime toute les choses inutile à stocker et arrête la sauvegarde lors d'une erreur 127 static function there_is_an_error(){ 128 129 // J'envoie un mail pour prévenir de l'erreur 130 stn_save_to_nextcloud::sendMail(true); 131 132 // Stop la sauvegarde 133 exit; 134 135 } 136 137 // Fonction qui lance une sauvegarde maintenant 138 static function save_now(){ 139 // Si l'évement est programmé 140 if (!wp_next_scheduled ('save_in_progress')) { 141 // Programme un évènement pour indiqué que la sauvegarde est en cour (pour ne pas pouvoir relancer pendant une sauvegarde) 142 stn_save_to_nextcloud::reschedule_in_progress(60); 143 // Lance une sauvegarde en arrière plan 144 wp_schedule_single_event(time(),'DoSave'); 145 } 146 // Si on est sur un multisite 147 if(is_multisite()){ 148 // Redirige vers la page 149 wp_redirect('/wp-admin/network/admin.php?page=dlw-nextcloud&save=now'); 150 } 151 // Si on est sur un site classique 152 else{ 153 // Redirige vers la page 154 wp_redirect('/wp-admin/options-general.php?page=dlw-nextcloud&save=now'); 155 } 156 157 } 158 159 // Programme la futur sauvegarde et en lance une maintenant 160 static function programme_and_save(){ 161 162 // Programme la futur sauvegarde 163 stn_save_to_nextcloud::programme_futur_save(); 164 // Si l'évement est programmé 165 if (!wp_next_scheduled ('save_in_progress')) { 166 // Programme un évènement pour indiqué que la sauvegarde est en cour (pour ne pas pouvoir relancer pendant une sauvegarde) 167 stn_save_to_nextcloud::reschedule_in_progress(60); 168 // Lance une sauvegarde en arrière plan 169 wp_schedule_single_event(time(),'DoSave'); 170 } 171 } 172 173 // Fonction qui programme une sauvegarde selon la date de l'utilisateur 174 static function programme_futur_save(){ 175 176 // Si l'évement est déjà programmé 177 if (wp_next_scheduled ( 'programmeAndSave' )) { 178 // On le supprime 179 wp_clear_scheduled_hook('programmeAndSave'); 180 } 181 182 // Programme la prochaine sauvegarde 183 wp_schedule_single_event(stn_save_to_nextcloud::calculDateSave(),'programmeAndSave'); 184 185 } 186 187 // Fonction qui télécharge les fichiers WP dans le serveur FTP et supprime les traces de l'ancienne sauvegarde s'il y en a 188 static function save_in_ftp($relance=false, $date=null, $time=null){ 189 190 // Si aucune sauvegarde n'est en cour, initialise la sauvegarde 191 if(stn_save_to_nextcloud::backup_in_progress("stn_file_in_zip") == 0){ 192 193 // Supprime les chunks sauvegardés et gardés dans NextCloud 194 include("Controleurs/DeleteChunksNextCloud.php"); 195 196 // Supprime l'occurence de la BDD 197 include("Controleurs/DeleteChunksBdd.php"); 198 199 // Supprime s'il y en a les ancien fichiers sauvegardés et gardés dans le FTP 200 include("Controleurs/DeleteFileFtp.php"); 201 202 // Ajoute une valeur dans la BDD 203 include("Controleurs/AddDataFileInZip.php"); 204 } 205 206 // Créer et envoi au ftp le fichier zip contenant tout ce qu'il faut pour sauvegarder WordPress 207 include("Controleurs/CreateZip.php"); 208 209 } 210 211 212 // Fonction qui vérifie si le zip est completement créé 213 function gendarme_zip($date, $time){ 214 // Si ça fait plus de 10min qu'un fichier n'a pas été reçu 215 if(time() > stn_save_to_nextcloud::getCurrentFile("uploadTime", "stn_file_in_zip") + 600){ 216 // Relance la fonction 217 stn_save_to_nextcloud::save_in_ftp(true, $date, $time); 218 } 219 else{ 220 // Pogramme la prochaine vérification à dans 5min secondes 221 wp_schedule_single_event(time()+60, 'gendarmeZip', array($date, $time)); 222 // Programme un évènement pour indiqué que la sauvegarde est en cour (pour ne pas pouvoir relancer pendant une sauvegarde) 223 stn_save_to_nextcloud::reschedule_in_progress(80); 224 } 225 226 } 227 228 // Vérifie si une sauvegarde est en cour 229 static function backup_in_progress($table){ 230 231 // Vérifie si une sauvegarde est en cour 232 include("Controleurs/BackupInProgress.php"); 233 234 // Retourne le nombre de sauvegarde en cour (0 ou 1) 235 return $inProgress; 236 237 } 238 239 // Fonction qui transfert le zip au NextCloud indiqué 240 static function save_in_nextCloud($date, $time){ 241 242 // Variable qui permet de gérer les erreurs 243 $error = false; 244 245 // Si aucune sauvegarde n'est en cour 246 if(stn_save_to_nextcloud::backup_in_progress("stn_dir_chunk") == 0){ 247 248 // Créer le dossier temporaire SaveChunk qui contenir tout les morceaux du zip 249 include("Controleurs/CreateFolder.php"); 250 251 // Ici je créer l'occurence initial 252 include("Controleurs/AddDataChunk.php"); 253 254 } 255 256 // Envoi les morceaux de fichier à SaveChunk 257 include("Controleurs/SendChunk.php"); 258 259 // Créer le dossier inquiqué par l'utilisateur dans NextCLoud s'il n'existe pas 260 include("Controleurs/CheckForDestination.php"); 261 262 // Fusionne tout les fichier dans un zip 263 include("Controleurs/MergeChunk.php"); 264 265 // Passe la valeur de "finish" de la db à true 266 include("Controleurs/FinishDbTrue.php"); 267 268 // Supprime les anciennes sauvegardes s'il y en a trop 269 stn_save_to_nextcloud::deleteSaves($date, $time); 270 271 // Envoie du mail de reponse correct 272 stn_save_to_nextcloud::sendMail(false); 273 274 // Supprime les fichiers du FTP 275 include("Controleurs/DeleteFileFtp.php"); 23 // Dossier principal du plugin 24 define('PLUGIN_PATH', dirname(plugin_dir_path( __FILE__ )) . "/stn-save-to-nextcloud/"); 276 25 277 26 278 } 279 280 // Vérifie si les chunks ont planté et relance le si necessaire 281 function gendarme_chunk($nbChunkMax){ 282 // Si tout les chunks n'ont pas été envoyés 283 if($nbChunkMax != intval(stn_save_to_nextcloud::getCurrentFile("nbChunk"))){ 284 // Si ça fait longtemps qu'un chunk n'a pas été envoyés 285 if(time() > stn_save_to_nextcloud::getCurrentFile("uploadTime") + 50){ 286 // Ranlance la fonction 287 stn_save_to_nextcloud::save_in_nextCloud(); 288 } 289 else{ 290 // Programme dans 80s le gendarme 291 wp_schedule_single_event(time()+60, 'gendarmeChunk', array($nbChunkMax)); 292 // Programme un évènement pour indiqué que la sauvegarde est en cour (pas pouvoir relancer pendant une sauvegarde) 293 stn_save_to_nextcloud::reschedule_in_progress(100); 294 } 295 } 296 } 297 298 // Fonction qui permet de gérer les erreurs et d'envoyer un mail si necessaire 299 static function sendMail($error){ 300 301 // Envoi un mail de reponse 302 include("Controleurs/SendMail.php"); 27 // ---------- Les classes ---------- // 28 // Classe qui permet de sauvegarder un site WordPress 29 include("Classes/stn_save_to_nextcloud.php"); 303 30 304 } 31 // Classe qui permet de restaurer un site WordPress 32 include("Classes/stn_restore_from_nextcloud.php"); 305 33 306 // Fonction qui supprime les sauvegardes s'il y en a trop307 static function deleteSaves($date, $time){308 309 // Va chercher les sauvegardes toujours stockées310 include("Controleurs/HowManySave.php");311 312 // Pour toute les sauvegardes en trop313 for($i=0; $i<count($result)-intval(get_option("nb_save_dlwcloud")); $i++){314 // Si la sauvegarde n'a pas était faite maintenant315 if(get_object_vars($result[$i])["date"] != $date || get_object_vars($result[$i])["time"] != $time){316 // Supprime la sauvegarde de NextCloud et de la BDD317 stn_save_to_nextcloud::deleteSingleSave(get_object_vars($result[$i])["date"], get_object_vars($result[$i])["time"]);318 }319 }320 }321 322 // Supprime la sauvegarde faite à la date323 static function deleteSingleSave($date, $time){324 325 // Supprime la sauvegarde faite à la date de NextCloud et de la BDD326 include("Controleurs/DeleteSingleSave.php");327 328 }329 330 // Sert à reprogrammer le cron "save_in_progress"331 static function reschedule_in_progress($time){332 // Si l'évement est programmé333 if (wp_next_scheduled ( 'save_in_progress' )) {334 // On le supprime335 wp_clear_scheduled_hook('save_in_progress');336 }337 // On le reprogramme338 wp_schedule_single_event(time()+$time, 'save_in_progress');339 340 }341 342 static function ne_rien_faire(){}343 34 344 } 35 // ---------- Autres fonctionnalités ---------- // 36 // Permet gérer les sauvegardes automatiques 37 include("Controleurs/ManageAutoSave.php"); 345 38 346 // Créer une route dans l'API qui permet de récupérer la liste des paramètres de l'utilisateur en format json 39 // Permet créer les crons 40 include("Controleurs/CreateCron.php"); 41 42 // Permet d'afficher le bouton d'auto update pour les themes 43 include("Controleurs/ShowAutoUpdateTheme.php"); 44 45 // Permet gérer l'affichage des menus 46 include("Controleurs/ManageMenu.php"); 47 48 // Permet créer les paramètres d'utilisateur 49 include("Controleurs/CreateUserParam.php"); 50 51 52 // ---------- Les vues ---------- // 53 // Fonction qui permet d'afficher le visuel de la page de sauvegarde 54 include("Vues/vue_save.php"); 55 56 // Fonction qui permet d'afficher le visuel de la page de restauration 57 include("Vues/vue_restore.php"); 58 59 60 // ---------- L'API ---------- // 61 // Crée une route dans l'API qui permet de récupérer la liste des paramètres de l'utilisateur en format json 347 62 include("API/ListUserParam.php"); 348 // Créer une route dans l'API qui permet de récupérer le nombre de sauvegarde et pour chacune, sa date et son état. 63 64 // Crée une route dans l'API qui permet de récupérer le nombre de sauvegarde et pour chacune, sa date et son état. 349 65 include("API/ListSave.php"); 350 66 351 352 // Si on a une heure de sauvegarde 353 if(get_option("auto_update_dlwcloud") == "true"){ 354 355 // Récupère la class de la db 356 global $wpdb; 357 358 // Va chercher la date de la précédente sauvegarde 359 $sql = "SELECT date, time FROM " . $wpdb->prefix . "stn_dir_chunk ORDER BY date DESC LIMIT 1"; 360 // Execute la requête 361 $LastSave = get_object_vars($wpdb->get_results($sql)[0]); 362 // Transforme au bon format la date 363 $LastSave["date"] = substr($LastSave["date"], 0, 4) . "-" . substr($LastSave["date"], 4, 2) . "-" . substr($LastSave["date"], 6, 2); 364 365 // Récupère le timestamp de départ de l'autorisation (2h après la sauvegarde) 366 $debutAutorisation = strtotime($LastSave["date"] . " " . $LastSave["time"]) + 7200; 367 // Récupère le timestamp de la fin de l'autorisation (48h après la sauvegarde) 368 $FinAutorisation = strtotime($LastSave["date"] . " " . $LastSave["time"]) + 172800; 369 370 // Si on est avant ou après l'autorisation 371 if(time() < $debutAutorisation || time() > $FinAutorisation){ 372 // On désactive les mises à jour automatiques 373 add_filter('auto_update_core', '__return_false'); 374 add_filter('auto_update_theme', '__return_false'); 375 add_filter('auto_update_plugin', '__return_false'); 376 add_filter('auto_update_translation', '__return_false'); 377 378 } 379 380 } 381 382 $save_to_nextcloud=new stn_save_to_nextcloud(); 383 384 register_activation_hook(__FILE__,array($save_to_nextcloud,'activate')); 385 register_deactivation_hook(__FILE__,array($save_to_nextcloud,'desactivate')); 386 add_action('programmeAndSave',array($save_to_nextcloud,'programme_and_save')); 387 add_action('admin_post_saveNow',array($save_to_nextcloud,'save_now')); 388 add_action('DoSave',array($save_to_nextcloud,'save_in_ftp')); 389 add_action('gendarmeZip',array($save_to_nextcloud,'gendarme_zip')); 390 add_action('gendarmeChunk',array($save_to_nextcloud,'gendarme_chunk')); 391 add_action('gendarmeChunk',array($save_to_nextcloud,'gendarme_chunk')); 392 add_action('save_in_progress', array($save_to_nextcloud,'ne_rien_faire')); 393 394 395 // Fonction rend visible le bouton des mises à jour automatique pour les themes 396 function activer_maj_auto_theme() { 397 add_theme_support('automatic-feed-links'); 398 } 399 // Appelle la fonction 400 add_action('after_setup_theme', 'activer_maj_auto_theme'); 401 402 /*menu administration*/ 403 if ( is_admin() ){ // admin actions 404 // Si on est sur un multisite 405 if(is_multisite()){ 406 // Ajoute le menu, pas en mode sous-menu 407 add_action('network_admin_menu','stn_savetonextcloud_setup_menu_multisite'); 408 } 409 // Si on est sur un seul site 410 else{ 411 // Ajoute le menu dans les réglages 412 add_action('admin_menu','stn_savetonextcloud_setup_menu'); 413 } 414 // Enregistre les settings 415 add_action( 'admin_init', 'stn_savetonextcloud_settings' ); 416 417 function stn_savetonextcloud_settings() { // whitelist options 418 register_setting( 'nextcloud-group', 'url_dlwcloud' ); 419 register_setting( 'nextcloud-group', 'login_dlwcloud' ); 420 register_setting( 'nextcloud-group', 'pass_dlwcloud' ); 421 register_setting( 'nextcloud-group', 'frequency_dlwcloud'); 422 register_setting( 'nextcloud-group', 'day_dlwcloud' ); 423 register_setting( 'nextcloud-group', 'hour_dlwcloud' ); 424 register_setting( 'nextcloud-group', 'fuseau_dlwcloud' ); 425 register_setting( 'nextcloud-group', 'folder_dlwcloud' ); 426 register_setting( 'nextcloud-group', 'email_dlwcloud' ); 427 register_setting( 'nextcloud-group', 'nb_save_dlwcloud' ); 428 register_setting( 'nextcloud-group', 'auto_update_dlwcloud' ); 429 430 } 431 function stn_savetonextcloud_setup_menu_multisite(){ 432 add_menu_page('Save To Nextcloud', 'Save To Nextcloud', 'manage_options', 'dlw-nextcloud', 'stn_savetonextcloud_param'); 433 } 434 function stn_savetonextcloud_setup_menu(){ 435 add_menu_page('Save To Nextcloud', 'Save To Nextcloud', 'manage_options', 'dlw-nextcloud', 'stn_savetonextcloud_param'); 436 } 437 } 438 439 /*page admin*/ 440 function stn_savetonextcloud_param(){?> 441 <div class="wrap"> 442 <h2>Configuration "Save To Nextcloud"</h2> 443 <p>Veuillez renseigner vos identifiants vers votre instance Nextcloud</p> 444 <form method="post" action="<?php echo admin_url( 'options.php' );?>"> 445 <input type="hidden" name="action" value="ProgrammeSave"> 446 <?php 447 settings_fields( 'nextcloud-group' ); 448 do_settings_fields( 'nextcloud-group','dlwcloud' );?> 449 450 <table class="form-table"> 451 <tr valign="top"> 452 <th scope="row">URL ( https://cloud.domaine.fr )</th> 453 <td><input type="text" name="url_dlwcloud" value="<?php echo esc_url(get_option('url_dlwcloud')); ?>" required/></td> 454 </tr> 455 456 <tr valign="top"> 457 <th scope="row">Identifiant</th> 458 <td><input type="text" name="login_dlwcloud" value="<?php echo esc_html(get_option('login_dlwcloud')); ?>" required/></td> 459 </tr> 460 461 <tr valign="top"> 462 <th scope="row">Mot de passe</th> 463 <td><input type="password" name="pass_dlwcloud" value="<?php echo esc_html(get_option('pass_dlwcloud')); ?>" required/></td> 464 </tr> 465 466 <tr valign="top"> 467 <th scope="row">Fréquence de sauvegarde</th> 468 <td><select name="frequency_dlwcloud"> 469 <option value="week" <?php if(get_option('frequency_dlwcloud') == "week"){ ?> selected <?php } ?>>hebdomadaire</option> 470 <option value="twicemonth" <?php if(get_option('frequency_dlwcloud') == "twicemonth"){ ?> selected <?php } ?>>bimensuel</option> 471 <option value="month" <?php if(empty(get_option('frequency_dlwcloud')) || get_option('frequency_dlwcloud') == "month"){ ?> selected <?php } ?>>mensuel</option> 472 </select> 473 </td> 474 </tr> 475 476 <tr valign="top"> 477 <th scope="row">Jour de sauvegarde</th> 478 <td><select name="day_dlwcloud"> 479 <option value="Monday" <?php if(get_option('day_dlwcloud') == "Monday"){ ?> selected <?php } ?>>Lundi</option> 480 <option value="Tuesday" <?php if(get_option('day_dlwcloud') == "Tuesday"){ ?> selected <?php } ?>>Mardi</option> 481 <option value="Wednesday" <?php if(get_option('day_dlwcloud') == "Wednesday"){ ?> selected <?php } ?>>Mercredi</option> 482 <option value="Thursday" <?php if(get_option('day_dlwcloud') == "Thursday"){ ?> selected <?php } ?>>Jeudi</option> 483 <option value="Friday" <?php if(get_option('day_dlwcloud') == "Friday"){ ?> selected <?php } ?>>Vendredi</option> 484 485 <option value="Saturday" <?php if(empty(get_option('day_dlwcloud')) || get_option('day_dlwcloud') == "Saturday"){ ?> selected <?php } ?>>Samedi</option> 486 <option value="Sunday" <?php if(get_option('day_dlwcloud') == "Sunday"){ ?> selected <?php } ?>>Dimanche</option> 487 </select> 488 </td> 489 </tr> 490 491 <tr valign="top"> 492 <th scope="row">Heure de sauvegarde</th> 493 <td><input type="time" name="hour_dlwcloud" value="<?php echo esc_html(get_option('hour_dlwcloud')); ?>" required/></td> 494 </tr> 495 496 <tr valign="top"> 497 <th scope="row">Quel est votre fuseau horaire ?</th> 498 <td><select name="fuseau_dlwcloud"> 499 <option value="200" <?php if(get_option('fuseau_dlwcloud') == "200"){ ?> selected <?php } ?>>Très Bonne</option> 500 <option value="150" <?php if(get_option('fuseau_dlwcloud') == "150"){ ?> selected <?php } ?>>Bonne</option> 501 <option value="100" <?php if(empty(get_option('fuseau_dlwcloud')) || get_option('fuseau_dlwcloud') == "100"){ ?> selected <?php } ?>>Normal</option> 502 <option value="50" <?php if(get_option('fuseau_dlwcloud') == "50"){ ?> selected <?php } ?>>Mauvaise</option> 503 </select></td> 504 </tr> 505 506 <tr valign="top"> 507 <th scope="row">Dossier de sauvegarde distant ( /dossier/de/destination/ )</th> 508 <td><input type="text" name="folder_dlwcloud" value="<?php if (!empty(get_option('folder_dlwcloud'))){echo esc_html(get_option('folder_dlwcloud'));}else{echo "/save_wordpress/";};?>" required/></td> 509 </tr> 510 511 <tr valign="top"> 512 <th scope="row">Email de notification ( unMail;unAutreMail )</th> 513 <td><input type="text" name="email_dlwcloud" value="<?php if (!empty(get_option('email_dlwcloud'))){echo esc_html(get_option('email_dlwcloud'));}?>" required/></td> 514 </tr> 515 </table> 516 517 <table> 518 <tr valign="top"> 519 <th scope="row"></th> 520 <td> 521 <details> 522 <summary>Voir les réglages avancés</summary> 523 <table class="form-table"> 524 525 <th scope="row">Nombre de sauvegardes à conserver sur serveur</th> 526 <td><input type="text" name="nb_save_dlwcloud" value="<?php if (!empty(get_option('nb_save_dlwcloud'))){echo esc_html(get_option('nb_save_dlwcloud'));}else{echo "3";}?>" required/></td> 527 </tr> 528 529 <th scope="row">Voulez-vous activez vos mises à jours automatique seulement après une sauvegarde ?</th> 530 <td><select name="auto_update_dlwcloud"> 531 <option value="true" <?php if(get_option('auto_update_dlwcloud') == "true"){ ?> selected <?php } ?>>Oui</option> 532 <option value="false" <?php if(empty(get_option('auto_update_dlwcloud')) || get_option('auto_update_dlwcloud') == "false"){ ?> selected <?php } ?>>Non</option> 533 </select> 534 </br><p>En activant cette fonctionnalité, seules les mises à jour automatiques que vous avez déjà activées pourront être lancées pendant une période de 48 heures, débutant deux heures après la sauvegarde. Vous pourrez à nouveau activer de nouvelles mises à jour automatiques uniquement pendant cette période de 48 heures.</p> 535 </tr> 536 537 </table> 538 539 </details> 540 </td> 541 </tr> 542 543 </table> 544 <?php 545 // Si on enregistre de nouvelles option 546 if (isset($_GET['settings-updated']) && $_GET['settings-updated'] == true) { 547 // Programme la prochaine sauvegarde 548 stn_save_to_nextcloud::programme_futur_save(); 549 } 550 submit_button("Enregistrer les modifications"); ?> 551 </form> 552 <form action="<?php echo admin_url('admin-post.php'); ?>" method="post"> 553 <input type="hidden" name="action" value="saveNow"> 554 <?php submit_button('Faire une sauvegarde maintenant'); 555 if(isset($_GET['save'])){ 556 557 echo "<p>La sauvegarde est en cours, cela peut prendre quelques minutes. </br> Vous recevrez un mail lorsque celle-ci sera terminée. Ici, vous n'avez pas automatisé vos prochaines sauvegardes, si vous ne l'avez jamais fait ou que vous avez changé vos préférences, veuillez cliquer sur le bouton \"Enregistrer les modifications\"</p>"; 558 559 } 560 else{ 561 562 echo "<p>Le bouton \"Enregistrer les modifications\" permet d'automatiser le lancement des futurs sauvegardes selon les préférences indiquées : </br> - hebdomadaire : Toute les semaines à l'heure et au jour choisie à partir de la semaine prochaine. </br> - bimensuel : La première et troisème semaine du mois à l'heure et au jour choisie </br> - mensuel : La première semaine du mois à l'heure et au jour choisie à partir du mois prochain</p> </br> Le bouton \"Faire une sauvegarde maintenant\" permet de lancer une sauvegarde sans programmer les prochaines."; 563 564 } 565 566 ?> 567 </form> 568 </div> 569 <?php }; ?> 67 ?> -
stn-save-to-nextcloud/trunk/readme.txt
r2904475 r2904651 3 3 Tags: nextcloud, save, webdav, davelopweb, stn 4 4 Requires at least: 5.0 5 Requires PHP: 7. 45 Requires PHP: 7.3 6 6 Tested up to: 6.1 7 Stable tag: 2. 0.17 Stable tag: 2.1.0 8 8 License: GPLv2 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 25 25 == Changelog == 26 26 27 = 1.0. 1 =27 = 1.0.0 -> 2.0.1 = 28 28 29 Change the code to use cron 29 Mise en conformité du code pour le store Wordpress 30 30 31 = 2.1.0 = 31 32 32 = 1.0.2 = 33 34 Create and use BDD to verify if all chunks download 35 36 37 = 1.0.3 = 38 39 Use zip instead of tar. Create BDD script without exec. Can use multiple mail. Create Folder in NextCloud if not exist. 40 41 = 1.0.4 = 42 43 Don't use the ok files anymore. Resume zip possible 44 45 = 1.0.5 = 46 47 Added choice for frequency, day and time of backup. Possibility to notify several 48 people by email. 49 50 = 1.0.6 = 51 52 Cannot run two backups at the same time. Change the functionality of buttons. 53 54 = 2.0.0 = 55 56 Add 2 functions for the API : List of the user's parameters, list of his backups. Enable auto update of themes. Possibility to activate automatic updates only during a period of 48 hours, starting two hours after the backup. Possibility to block automatic updates. The plugin becomes compatible with WordPress multisite. 57 58 = 2.0.1 = 59 60 Ajout Dossier API manquant 61 62 63 == Upgrade Notice == 64 65 2.0.1: See changelog for full details. A recommended update for all. 33 Correctifs Bugs 66 34 67 35 == Links ==
Note: See TracChangeset
for help on using the changeset viewer.