Le module Versioning pour Magento

mise à jour

Sommaire

  1. Présentation du module
    1. Description
    2. Accès et configuration
    3. Installation et désinstallation
  2. Procédure d'installation
    1. Avec GIT
    2. Avec SVN
    3. Avec Bazaar
    4. Avec Darcs
    5. Avec Mercurial
  3. Configuration
    1. Gestionnaire de projet
    2. Page de connexion
    3. Pages de maintenance
  4. Extra
    1. Événements
    2. Authentification SSH
  5. Téléchargement et démo du module
  6. Support

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
Capture d'écran de la configuration (1/5)
Capture d'écran de l'historique des révisions
Capture d'écran de l'historique des révisions (2/5)
Capture d'écran des différences entre deux révisions
Capture d'écran des différences entre deux révisions (3/5)
Capture d'écran de l'état du dépôt
Capture d'écran de l'état du dépôt (4/5)
Capture d'écran de l'historique des mises à jour
Capture d'écran de l'historique des mises à jour (5/5)

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 :

Avec GIT

Premièrement, pour le fichier gitignore :

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

Deuxièmement, pour le fichier index.php :

// replace
if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__).'/errors/503.php';
    exit;
}
// by
// https://www.luigifab.info/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)) ? array_pop($ip) : 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), '-'.trim($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)) ? array_pop($ip) : 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), '-'.trim($ip).'-') === false))) {
		include_once('./errors/upgrade.php');
		exit(0);
	}
}

Troisièmement, 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.info/magento/versioning
	    // require_once(self::getBaseDir().DS.'errors'.DS.'404.php');
	    self::printException($e);

Quatrièmement, 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).

Il ne reste plus qu'à supprimer le dossier errors de Magento et à installer le module avec Magento connect (ou en décompressant l'archive du module à la racine de Magento).

Avec SVN

Bientôt disponible.

Avec Bazaar

Bientôt disponible.

Avec Darcs

Bientôt disponible.

Avec Mercurial

Bientôt disponible.

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.
Exemple en ligne.

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.
Exemple en ligne.

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.
Exemple en ligne.

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.
Exemple en ligne.

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.
Exemple en ligne.

Extra

Événements

Trois événements sont disponibles :

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

Authentification SSH

Premièrement, il faut créer le fichier /xyz/.git/ssh/config.sh :

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

Deuxièmement, il faut lancer ces commandes :

ssh-keyscan gitserver.xyz > /xyz/.git/ssh/known_hosts
chmod 400 /xyz/.git/ssh/*
chmod 500 /xyz/.git/ssh/config.sh
export GIT_SSH=/xyz/.git/ssh/config.sh

Téléchargement et démo du module

mise à jour

Démonstration : configuration / historique des révisions / historique des mises à jour / état du dépôt

Clef d'extension : https://www.luigifab.info/magento/connect/luigifab/Luigifab_Versioning
Téléchargement de la dernière version : luigifab-versioning-3.6.4.tgz (md5 41b4eb3d8ffe47a7742d8e6a22541664)
Dépôts publics : github.com / sourceforge.net

Testé avec Firefox 27/45, Chrome 29/67, Opera 54, Edge 14 sur Magento 1.4.1.0 avec PHP 7.1 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.1 et MariaDB 10.1.

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 !