Le module Versioning pour Magento

(mise à jour 3.7.1)

Sommaire

  1. Présentation du module
    1. Description
    2. Accès et configuration
    3. Installation et désinstallation
  2. Procédure d'installation
  3. Procédure de déploiement
  4. Configuration
    1. Gestionnaire de projet
    2. Page de connexion
    3. Pages de maintenance
    4. Événements
  5. Téléchargement du module
  6. Support
Logo de Magento

N'oubliez pas que cette documentation ne concerne que la dernière version du module.
N'oubliez pas de lire cette page entièrement.

Présentation du module

Description

Ce module permet :

Avant d'aller plus loin, voici une vidéo de présentation : voir la vidéo.

Accès et configuration

Configuration disponible dans Système » Configuration » Outils » Gestionnaire de version.
Disponible dans Outils » Gestionnaire de version.

Capture d'écran de la configuration (1/4)
Capture d'écran de l'historique des révisions (2/4)
Capture d'écran des différences entre deux révisions (3/4)
Capture d'écran de l'état du dépôt (4/4)

Installation et désinstallation

Afin de réaliser l'installation complète du module, il faut suivre la procédure d'installation. Après avoir suivi les différentes étapes, il ne reste plus qu'à installer le module avec Magento connect (ou en décompressant l'archive du module à la racine de Magento) avant de valider/commiter toutes les modifications. La clef d'extension est disponible à la fin de cette documentation.

Pour la désinstallation, après avoir annulé le commit d'installation du module, il ne reste plus qu'à effacer la configuration :

DELETE FROM core_config_data WHERE path LIKE "versioning/%";

Procédure d'installation

Très important :

1) Pour le fichier gitignore :

/errors/config/*.ip
/errors/config/*.dat
/errors/config/*.csv
/maintenance.flag
/upgrade.flag

2) Pour le fichier index.php :

// replace
if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__).'/errors/503.php';
    exit;
}
// by
// https://www.luigifab.fr/magento/versioning
if (is_file('./maintenance.flag') && (strpos(getenv('REQUEST_URI'), '/admin/') === false)) {
	$ips = './errors/config/error503.ip';
	$ip = (!empty(getenv('HTTP_X_FORWARDED_FOR'))) ? explode(',', getenv('HTTP_X_FORWARDED_FOR')) : false;
	$ip = (!empty($ip)) ? trim(array_pop($ip)) : trim(getenv('REMOTE_ADDR'));
	$ip = (preg_match('#^::ffff:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$#', $ip) === 1) ? substr($ip, 7) : $ip;
	if (!is_file($ips) || (is_file($ips) && (strpos(file_get_contents($ips), '-'.$ip.'-') === false))) {
		include_once('./errors/503.php');
		exit(0);
	}
}
if (is_file('./upgrade.flag') && (strpos(getenv('REQUEST_URI'), '/admin/') === false)) {
	$ips = './errors/config/upgrade.ip';
	$ip = (!empty(getenv('HTTP_X_FORWARDED_FOR'))) ? explode(',', getenv('HTTP_X_FORWARDED_FOR')) : false;
	$ip = (!empty($ip)) ? trim(array_pop($ip)) : trim(getenv('REMOTE_ADDR'));
	$ip = (preg_match('#^::ffff:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$#', $ip) === 1) ? substr($ip, 7) : $ip;
	if (!is_file($ips) || (is_file($ips) && (strpos(file_get_contents($ips), '-'.$ip.'-') === false))) {
		include_once('./errors/upgrade.php');
		exit(0);
	}
}

3) Pour le fichier app/Mage.php (ce changement n'est pas obligatoire) :

// replace all
	    require_once(self::getBaseDir() . DS . 'errors' . DS . '404.php');
// by
	    // https://www.luigifab.fr/magento/versioning
	    // require_once(self::getBaseDir().DS.'errors'.DS.'404.php');
	    self::printException($e);

4) Il faut créer le fichier .git/hooks/prepare-commit-msg de manière à enregistrer le nom de la branche dans chaque message de commit. Il faut également que chaque personne qui utilisera le dépôt le crée (sinon, dans le back-office la représentation des branches ne fonctionnera pas - le fichier doit être exécutable).

#!/bin/bash
# https://www.luigifab.fr/magento/versioning
NAME=$(git branch | grep "*" | cut -c3-)
echo "{$NAME}" >> "$1"

5) Il faut supprimer le dossier errors de Magento.

Procédure de déploiement

Sur le serveur de production (ou de préproduction), lorsque le dépôt GIT requiert une authentification par clef (ci-dessous id_rsa, sans mot de passe), il y a un peu de configuration à faire.

1) Il faut créer le fichier /xyz/.git/ssh/config.sh :

#!/bin/bash
# https://www.luigifab.fr/magento/versioning
ssh -o UserKnownHostsFile=/xyz/.git/ssh/known_hosts -i /xyz/.git/ssh/id_rsa $@

2) Il faut créer le fichier /xyz/.git/ssh/known_hosts :

ssh-keyscan gitserver.xyz > /xyz/.git/ssh/known_hosts

3) Il faut appliquer les droits :

chmod 400 /xyz/.git/ssh/*
chmod 500 /xyz/.git/ssh/config.sh

4) Il ne reste plus qu'à charger la configuration :

export GIT_SSH=/xyz/.git/ssh/config.sh
git clone ...

Attention ! Veillez à ce qu'il ne soit pas possible de git clone https://www.votre-site.xyz/.git.

Configuration

Dans Système » Configuration » Outils » Gestionnaire de version.

Gestionnaire de projet

En complétant le champ avec par exemple http://www.redmine.org/issues/, alors les numéros des demandes présents dans les messages de commit seront transformés en liens HTML.

Page de connexion

Page de connexion

Essayer la nouvelle page de connexion au back-office ou la nouvelle page du mot de passe oublié, c'est les adopter !

Ci-contre la nouvelle page de connexion.

Pages de maintenance

Chaque page est configurable avec ses propres options (principalement le titre et le contenu), la configuration sera sauvegardée automatiquement dans le dossier errors/config.

Lorsque le site est verrouillé, l'accès au back-office est toujours possible :
- les adresses suivantes ne fonctionneront pas : magento.xyz/admin - magento.xyz/index.php/admin
- les adresses suivantes fonctionneront : magento.xyz/admin/ - magento.xyz/index.php/admin/

Intégrateur, développeur, il est possible de modifier l'apparence des pages de maintenance avec des surcharges.
Pour en savoir plus, lire le fichier lisezmoi disponible dans le dossier errors/config.

Erreur 503 (maintenance.flag)

Erreur 503 (maintenance.flag)

Cette page de maintenance s'active et se désactive dans le back-office dans Outils » Gestionnaire de version, ou manuellement en créant le fichier maintenance.flag. Elle est prioritaire sur la page de mise à jour.

Les options de configuration :

Ci-contre la page par défaut.

Mise à jour (upgrade.flag)

Mise à jour (upgrade.flag)

Cette page de maintenance s'active et se désactive dans le back-office dans Outils » Gestionnaire de version, ou manuellement en créant le fichier upgrade.flag.

Les options de configuration :

Ci-contre la page par défaut.

Rapport d'erreur

Rapport d'erreur

Cette page apparaît lorsque Magento rencontre une erreur. Un rapport d'erreur est enregistré dans le dossier var/report (avec un bonus, lorsque disponible, le REQUEST_URI de la page qui a générée l'erreur).

Les options de configuration :

Ci-contre la page par défaut.

Erreur 404 système

Erreur 404 système

Attention, cette page ne correspond pas à la page d'erreur 404 lorsque l'adresse d'une catégorie ou d'un produit n'existe pas.

Les options de configuration :

Ci-contre la page par défaut.

Événements

Trois événements sont disponibles :

Un exemple est disponible dans les fichiers Demo.php et config.xml.

Téléchargement du module

(mise à jour )

Clef d'extension : https://www.luigifab.fr/magento/connect/luigifab/Luigifab_Versioning
Téléchargement de la dernière version : luigifab-versioning-3.7.1.tgz (md5 d4e2dd29a9f14d7424950d6a31301701)
Voir aussi : github.com

Le channel already exists ? Pas de panique, lancez la commande suivante et réessayez : php downloader/mage.php channel-delete luigifab

3.7.0
Testé avec Firefox 27/45, Chrome 29/68, Opera 54, Edge 14 sur Magento 1.4.1.0 avec PHP 7.2 et MariaDB 10.1.
Testé avec Firefox 45 sur Magento 1.5.0.1 / 1.6.0.0 / 1.7.0.0 / 1.8.0.0 / 1.9.0.0 / 1.9.3.9 avec PHP 7.2 et MariaDB 10.1.
3.7.1
Testé avec Firefox 27/45, Chrome 70, Opera 56, Edge 14 sur Magento 1.9.3.10 avec PHP 7.0 / 7.1 / 7.2 / 7.3 et MariaDB 10.1.
Testé avec mon patch PHP 7.

Support

Un problème ? Une question ? Quelque chose ne fonctionne pas ? Y a un bug ? Contactez-moi (en français ou en anglais), si je ne suis pas en vacances et pas loin de ma boite email, je vous répondrai dans quelques heures.

Vous trouverez mon adresse email dans le fichier README, lisez-le !

Ce module n'est pas disponible sur magento narketplace.
Pourquoi ? Parce que ce module, n'a jamais fonctionné, ne fonctionne pas, et ne fonctionnera jamais, avec PHP 5.4 et 5.5.
Attention ! Fin 2020, Magento 1 c'est terminé. De plus, il n'y aura pas de version de ce module pour Magento 2.