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

[sourcecode language= »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)]);
[/sourcecode]

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

Mise à jour Prestashop 1.6 en Prestashop 1.7 Officiel : Comment faire de l’humour involontaire

Un petit article qui  suit notre précédent sur la migration d’un Prestashop 1.6 vers Prestashop 1.7.

En effet, sur le Blog de Prestashop, un nouvel article est sorti pour indiquer comment effectuer la mise à jour de Prestashop de la version 1.6 vers la version 1.7. Cet article est d’ailleurs promu sur la colonne droite de votre interface d’administration.

Cet article sur la mise à jour détaille pas à pas les manipulations à effectuer. La procédure est assez courte et bien illustrée.

Read more

De nombreuses erreurs « Smarty: Missing template name »

Lors d’une mise à jour de Prestashop 1.6 vers 1.7  pour un de nos clients, et après sa configuration, nous nous sommes aperçus d’un très grand nombre d’erreur :

PHP Fatal error:  Uncaught  –> Smarty: Missing template name <– \n  thrown in /prestashop/vendor/prestashop/smarty/sysplugins/smarty_internal_template.php on line 678, referer: http://local/

Read more