Skip to Content

Mise à jour mineure simplifiée et automatisée

Malgré notre petit troll sur l’article d’une mise à jour de Prestashop 1.6 vers Prestashop 1.7, nous avons quand même tenté d’utiliser cette méthode pour une mise à jour.

Comme nous l’indiquions dans notre article,  une mise à jour majeure de Prestashop ne peut pas être aussi simple que celle décrite par Prestashop. Pour s’en rendre compte, vous pouvez consulter notre procédure pour une mise à jour d’un Prestashop 1.6 vers 1.7.

Par contre, l’idée de base qui  est de déposer les nouveaux fichiers, les fichiers de mise à jour et lancer la mise à jour nous semblait intéressant pour une automatisation.

Et effectivement pour une mise à jour mineure (X.Y.Z.W vers X.Y.A.B)  cette procédure simplifiée peut s’avérer grandement utile surtout si vous souhaitez l’automatiser. Sinon le module 1-click upgrade est largement utilisable.

Nous avons donc décidé de scripter une mise à jour mineure de Prestashop.

Pour ce faire, voici notre procédure sur un environnement de développement :

  1. Obtenir la version courante de Prestashop
  2. Récupération de la version de base de Prestashop sur le site des versions de Prestashop
  3. Modifier le nom du répertoire « admin » de la version de base de Prestashop par le nom du répertoire d’administration de votre boutique
  4. Effectuer une différence entre les fichiers présents dans la version de base de Prestashop et votre version courante utilisée pour votre boutique. Essayer de revenir au plus près de la version de base. Si des fichiers restent modifiés noter les différences ou les mettre de coté et les remplacer par ceux de la version de base. Normalement, cette liste doit être très courte car tous vos développements spécifiques doivent se trouver dans le répertoire override.
  5. Récupération de la dernière version souhaitée de Prestashop sur le site des versions de Prestashop
  6. Modifier le nom du répertoire « admin » de la dernière version souhaitée de Prestashop par le nom du répertoire d’administration de votre boutique
  7. Effectuer une différence pour récupérer la liste des fichiers présents dans la version de base mais non présent dans la dernière version souhaitée de Prestashop. Cette liste de fichier sera ajoutée à notre script.

Nous recherchons les différences avec des outils comme Meld pour Linux/Mac, ou Winmerge pour Windows.

Une fois la liste des fichiers supprimés établie, nous avons utilisé notre module dédié aux développeurs, afin de réaliser un script de mise à jour.

Ce script fonctionne aussi bien pour les mises à jour de Prestashop 1.6 ou de mises à jour de Prestashop 1.7.

Script de mise à jour mineure de Prestashop
!! Attention de toujours faire une sauvegarde de vos fichiers avant de les modifier. !!

Si vous ne comprenez pas ce que vous faites, ne pas modifier vos fichiers et demander à votre agence ou une agence de développement spécialisée dans Prestashop d’apporter ces modifications sur votre site Internet.

Ce fichier ne fonctionne qu’avec le module module Developper Tools. A vous de l’adapter en fonction de vos besoins.

modules/pliciwebupdate/data/001_update_prestashop_1.6.1.23.php

<?php
$prestashop_version = '1.6.1.23';
// This file must contain only prestashop content
$update_file = __DIR__.'/prestashop_'.$prestashop_version.'.zip'; 


// PS 1.7 version
$logDir = _PS_ROOT_DIR_.'/app/logs/'.(_PS_MODE_DEV_ ? 'dev' : 'prod').'/';
if (version_compare(_PS_VERSION_, '1.7.0.0', '<')) { // PS 1.6 version $logDir = _PS_ROOT_DIR_.'/log/'; } // Disabled shop if (!Configuration::updateValue('PS_SHOP_ENABLE', 0)) { Tools::displayError(vsprintf('Cannot disabled shop', [])); $controller->errors[] = vsprintf('Cannot disabled shop', []);
	return false;
}

// Remove all cache
Tools::clearSmartyCache();
Tools::clearXMLCache();
Media::clearCache();

// Delete old files 
$files_to_remove = array(); 
$files_to_remove[] = 'admin6797/filemanager/jPlayer/skin/blue.monday/spirites_blue.monday_2011.psd'; 
$files_to_remove[] = 'admin6797/themes/default/template/controllers/attachments/list_action_delete.tpl'; 
$files_to_remove[] = 'admin6797/themes/default/template/controllers/meta/helpers/options'; 
$files_to_remove[] = 'admin6797/themes/default/template/controllers/tax_rules_group/helpers/form'; 
$files_to_remove[] = 'js/jquery/plugins/jquery.storageapi.js'; 
$files_to_remove[] = 'js/jquery/jquery-1.11.0.min.map'; 
$files_to_remove[] = 'js/admin-dashboard.js'; 
$files_to_remove[] = 'js/admin-dnd.js'; 
$files_to_remove[] = 'js/admin-products.js'; 
$files_to_remove[] = 'js/admin-scene-cropping.js'; 
$files_to_remove[] = 'js/adminImport.js'; 
$files_to_remove[] = 'js/admin_carrier_wizard.js'; 
$files_to_remove[] = 'js/admin_order.js'; 
$files_to_remove[] = 'js/admin_themes.js'; 
$files_to_remove[] = 'js/attributesBack.js'; 
$files_to_remove[] = 'js/login.js'; 
$files_to_remove[] = 'js/notifications.js'; 
$files_to_remove[] = 'js/price.js'; 
$files_to_remove[] = 'js/tinymce.inc.js'; 
$files_to_remove[] = 'mails/en/order_changed.html'; 
$files_to_remove[] = 'mails/en/order_changed.txt'; 
$files_to_remove[] = 'tools/parser_sql/parser_sql.php'; 
$files_to_remove[] = 'tools/parser_sql/php-sql-parser.php'; 
$files_to_remove[] = 'tools/profiling/Hook.php'; 
$files_to_remove[] = 'tools/smarty/debug.tpl'; 
$files_to_remove[] = 'tools/swift/Swift'; 
$files_to_remove[] = 'tools/swift/EasySwift.php'; 
$files_to_remove[] = 'tools/swift/Swift.php'; 
$files_to_remove[] = 'themes/default-bootstrap/font'; 
foreach($files_to_remove as $file_to_remove) 
{ 
    $filename = _PS_ROOT_DIR_.'/'.$file_to_remove; 
	if (file_exists($filename))
	{
		if (is_dir($filename)) {
			if (!Tools::deleteDirectory($filename)) 
			{
				Tools::displayError(vsprintf('Cannot delete dir "%s"', [$filename])); 
				$controller->errors[] = vsprintf('Cannot delete dir "%s"', [$filename]);
				return false;
			}
		} else {
			Tools::deleteFile($filename);
		}
	}
}

  
// Unzip database update
$zip = new ZipArchive;
if (true !== $zip->open($update_file)) {
    Tools::displayError(vsprintf('Cannot open update file "%s"', [$update_file]));
    $controller->errors[] = vsprintf('Cannot open update file "%s"', [$update_file]);
    return false;
}
if (true !== $zip->extractTo(_PS_ROOT_DIR_)) {
    $zip->close();
    Tools::displayError(vsprintf('Cannot extract file "%s" to path "%s"', [$update_file, _PS_ROOT_DIR_]));
    $controller->errors[] = vsprintf('Cannot extract file "%s" to path "%s"', [$update_file, _PS_ROOT_DIR_]);
    return false;
}
$zip->close();
 
// Launch database update
$update_url = Context::getContext()->shop->getBaseURL().'install/upgrade/upgrade.php';
$update_result = Tools::file_get_contents($update_url, false, null, 120);
if (empty($update_result))
{
    Tools::displayError(vsprintf('Cannot upgrade database', []));
    $controller->errors[] = vsprintf('Cannot upgrade database', []);
    return false;
}
file_put_contents($logDir.'/upgrade.log', $update_result);
 
// Remove install dir
if (false == Tools::deleteDirectory(_PS_ROOT_DIR_.'/install')) {
    Tools::displayError(vsprintf('Cannot delete dir "%s" ', [_PS_ROOT_DIR_.'/install']));
    $controller->errors[] = vsprintf('Cannot delete dir "%s" ', [_PS_ROOT_DIR_.'/install']);
    return false;
}

// Rename admin dir
	// Delete current admin dir
if (false == Tools::deleteDirectory(_PS_ADMIN_DIR_)) {
    Tools::displayError(vsprintf('Cannot delete dir "%s" ', [_PS_ADMIN_DIR_]));
    $controller->errors[] = vsprintf('Cannot delete dir "%s" ', [_PS_ADMIN_DIR_]);
    return false;
}
	// Rename admin dir to current admin dir
if (false == rename(_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_)) {
    Tools::displayError(vsprintf('Cannot rename dir "%s" to "%s"', [_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_]));
    $controller->errors[] = vsprintf('Cannot rename dir "%s" to "%s"', [_PS_ROOT_DIR_.'/admin', _PS_ADMIN_DIR_]);
    return false;
}
 
// Check result
$errorLogFile = $logDir.date('Ymd').'_upgrade.log';
 
 
$controller->confirmations[] = '
'.vsprintf('Prestashop updated'."\n".'%s'."\n", [$update_result]);
$controller->warnings[] = '
'.vsprintf('Don\'t forget to enable your shop', []);
$controller->warnings[] = '
'.vsprintf('Check error log file'."\n

<pre>".'%s'."</pre>

\n", [file_get_contents($errorLogFile)]);

Vous devez accompagner ce fichier avec le fichier de la nouvelle version de Prestashop qui doit être stocké dans à l’emplacement :
modules/pliciwebupdate/data/prestashop_1.7.2.5.zip
En espérant que cela vous sera utile afin de rendre moins fastidieux les mises à jour de Prestashop.

A ce propos, nous allons essayer de développer un module qui permettra de vérifier si les classes parents des fichiers du répertoire override ont évolué entre deux versions. N’hésitez pas à nous dire si cela vous semble utile. Mais nous en reparlerons dans un nouvel article.

Prestashop n’utilise pas la bonne grille de frais de port

« Pourquoi Prestashop n’utilise pas la bonne grille de frais de port ? » voici la question ou la réponse n’a pas été aussi évidente.

Pour les plus impatient(e)s, voici le lien pour la solution. Pour les autres, voici le contexte qui a tout son importance.

Read more

Comment mettre à jour automatiquement des traductions sur Prestashop

Si votre architecture comportent plusieurs instances de votre site Internet (Production, pré-production, postes de développement, …) comment mettre à jour de manière automatique des traductions, sans devoir aller sur chacune des interfaces d’administration ?

Read more

Tarifs et poids des déclinaisons qui disparaissent

Nous avons été confrontés à un problème qui nous a fait devenir chèvre sur la fin.
En effet, un de nos clients sous Prestashop 1.7.2.4 nous a fait part de son incompréhension concernant ses saisies sur son Interface d’administration.
Sur des produits avec des déclinaisons, les impacts de prix et de poids s’enregistraient de manière aléatoires ou qui disparaissaient. Du moment que c’est « aléatoire », nous avons du mal à le reproduire et donc à intervenir rapidement dessus.

Read more

Des factures différentes en fonction des langues

Un client de notre agence de développement spécialisée dans Prestashop a souhaité modifier le format de ses factures.

Pour cela, rien de plus simple, il suffit de modifier les fichiers dans le répertoire /pdf  et de les copier dans le répertoire du thème.

Après plusieurs essais concluants,  nous essayons de les générer dans une autre langue, et là c’est le drame…

Read more

Pourquoi Prestashop 1.7 stocke des années de naissance dans le champ société

Après de longues et fastidieuses recherches, nous avons enfin trouvé l’origine des années de naissance dans le champ ‘company’ de la table ‘ps_address’.

En effet, un de nos clients se plaignait de synchronisation avec son ERP qui échouait à cause de valeurs invalides. Et cet ERP avait raison, car dans le champ société, Prestashop 1.7 transmettait une année de naissance.

Read more

Correction erreur sur le module « Module Simulateur de frais de livraison »

Lors de la maintenance mensuelle de notre client spécialisé dans la vente de filet et toiles d’ombrage, nous avons observé des erreurs dans les fichiers de logs de Pretashop:

Read more

Un Linux sur un Dell Precision 5820 avec une carte RAID 9440

Comme l’explique si bien l’article sur notre structuration et nos processus, nous sommes axés sur une industrialisation de nos méthodes de travail.

Donc, il y a quelques années, nous avions fait le choix de l’utilisation du logiciel VirtualBox pour nos environnements de développements. Pour se conformer à notre charte industrielle,  nous avons donc isolé nos outils/services dans des machines virtuelles. Cette isolation s’est faite au fur et à mesure, et ces machines virtuelles ont été installées sur des machines de bureau qui étaient recyclées en serveur. Et puis, comme tout le monde, le temps manquants, nous nous sommes jamais posés pour optimiser tous ces petits « serveurs » aux caractéristiques si différentes. Lors d’une coupure de courant ou de liaison Internet, il fallait refaire le tour de toutes les machines pour voir si tous les services étaient opérationnels, cela commençait à être pénible. De plus, l’activité grandissante de notre activité, nos machines virtuelles consommaient de plus en plus de RAM et les accès disques, bêtes noires des machines virtuelles, augmentaient pour compenser une mémoire limitée.

Read more

Structuration et industrialisation

Comme toutes les sociétés qui se développent, nous avons eu besoin de nous structurer.

Mais nous avons eu, très tôt,  cette volonté de nous structurer. Cette volonté fait partie de notre ADN.

Read more

PliciWeb Solutions