luigifab.fr

Le module Versioning pour OpenMage

Sommaire (v4.6.0)

  1. Présentation du module
    1. Description
    2. Accès et configuration
    3. Compatible avec OpenFileEditor
    4. 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. Fonctionnalités cachées
    5. Événements
  5. Téléchargement du module

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

🌟🌟🌟🌟🌟 par Henri,
le 01/04/2020
Ce module n'est pas premium, n'est pas ultimate, n'est pas pro, il ne contient pas un mouchard ni un jolie panneau de publicité, et il n'augmentera pas votre ROI de 165%. Il est tout simplement mieux que tout ce que vous avez pu voir ailleurs. C'est une révolution !

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.

Très important :

Compatible avec OpenFileEditor

Lorsque l'extension pour navigateur OpenFileEditor est installée, lors de l'affichage d'une trace d'erreur PHP, les chemins des fichiers sont cliquables, afin de les ouvrirs dans votre éditeur de fichier préféré.

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 composer (ou en décompressant l'archive du module) avant de valider/commiter toutes les modifications.

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

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

Procédure d'installation

1) Pour le fichier gitignore :

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

2) Pour les fichiers index.php et api.php :

php// replace
if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__).'/errors/503.php';
    exit;
}
// by
// @see https://github.com/luigifab/openmage-versioning
if (is_file('./maintenance.flag') && (mb_stripos(getenv('REQUEST_URI'), '/admin/') === false)) {
    $ips = './errors/config/error503.ip';
    $ip = empty(getenv('HTTP_X_FORWARDED_FOR')) ? false : explode(',', getenv('HTTP_X_FORWARDED_FOR'));
    $ip = empty($ip) ? getenv('REMOTE_ADDR') : reset($ip);
    $ip = (preg_match('# ::f{4}:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $ip) === 1) ? substr($ip, 7) : $ip;
    if (!is_file($ips) || (is_file($ips) && (stripos(file_get_contents($ips), '-'.$ip.'-') === false))) {
        include_once('./errors/503.php');
        exit(0);
    }
}
if (is_file('./upgrade.flag') && (mb_stripos(getenv('REQUEST_URI'), '/admin/') === false)) {
    $ips = './errors/config/upgrade.ip';
    $ip = empty(getenv('HTTP_X_FORWARDED_FOR')) ? false : explode(',', getenv('HTTP_X_FORWARDED_FOR'));
    $ip = empty($ip) ? getenv('REMOTE_ADDR') : reset($ip);
    $ip = (preg_match('# ::f{4}:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $ip) === 1) ? substr($ip, 7) : $ip;
    if (!is_file($ips) || (is_file($ips) && (stripos(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) :

difdiff --git a/app/Mage.php b/app/Mage.php
index 051804580..6210ad9cd 100644
--- a/app/Mage.php
+++ b/app/Mage.php
@@ -647,7 +647,9 @@ final class Mage
             header('Location: ' . self::getBaseUrl());
             die;
         } catch (Mage_Core_Model_Store_Exception $e) {
-            require_once(self::getBaseDir() . DS . 'errors' . DS . '404.php');
+            // @see https://github.com/luigifab/openmage-versioning
+            // require_once(self::getBaseDir().DS.'errors'.DS.'404.php');
+            self::printException($e);
             die;
         } catch (Exception $e) {
             self::printException($e);
@@ -690,7 +692,9 @@ final class Mage
             header('Location: ' . self::getBaseUrl());
             die();
         } catch (Mage_Core_Model_Store_Exception $e) {
-            require_once(self::getBaseDir() . DS . 'errors' . DS . '404.php');
+            // @see https://github.com/luigifab/openmage-versioning
+            // require_once(self::getBaseDir().DS.'errors'.DS.'404.php');
+            self::printException($e);
             die();
         } catch (Exception $e) {
             if (self::isInstalled() || self::$_isDownloader) {

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).

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

5) Il faut supprimer le dossier errors de OpenMage.

6) Il ne reste plus qu'à installer le module :

shellcomposer require luigifab/openmage-versioning
git add .
git commit
git push

Procédure de déploiement

Sur le serveur de production (ou de préproduction, ou encore en local), 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 :

bash#!/bin/bash
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 :

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

3) Il faut appliquer les droits :

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

4) Il ne reste plus qu'à charger la configuration et à cloner le dépôt :

shellexport GIT_SSH=/xyz/.git/ssh/config.sh
git clone gitserver.xyz/repo.git /xyz/
mkdir /xyz/htdocs/media/ /xyz/htdocs/var/
chown www-data. -R /xyz/

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 : openmage.xyz/admin - openmage.xyz/index.php/admin
- les adresses suivantes fonctionneront : openmage.xyz/admin/ - openmage.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 readme 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 OpenMage rencontre une erreur. Un rapport d'erreur est enregistré dans le dossier var/report.

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.

Fonctionnalités cachées

Ces paramètres GET peuvent être modifiés ou ajoutés pour filtrer les résultats des pages de différences et d'état :

Exemple : .../versioning_repository/status/from/xyz/to/xyz/key/.../?dir=../abc/ ../def/&excl=min,csv,gallery.phtml,copyright.

Pour activer le diff au niveau des caractères avec diff-highlight, avec Debian :

bashcd /usr/share/doc/git/contrib/diff-highlight/
sudo make

Événements

Trois événements sont disponibles :

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

Téléchargement du module

Installation avec composer : composer require luigifab/openmage-versioning

Téléchargement de la dernière version : openmage-versioning-4.6.0.tar.gz
Voir aussi : github - composer - geany - phpstorm

4.6.0
Testé avec Firefox 36/114, Chrome 32/109, Edge 109, Opera 19/95 sur OpenMage 21.3.0 avec PHP 7.2 - 8.3 et MariaDB 10.11.

Si vous aimez ce module, prenez un peu de votre temps pour améliorer les traductions.