Script de migration d'un vieux code Zend Framework
Posté : 25 août 2009, 07:03
Cette nuit je me suis trouvé à devoir passer un code basé sur Zend Framework < 1.0 vers la version 1.9.1, c'était assez facile comparativement à ce que j'ai pu voir sur d'autres frameworks (pear pour ne pas le citer) un seul soucis majeur, il a fallu renomer toutes les actions des controllers en lower case pour qu'elle marchent à nouveau, et comme je suis un gros fainéant j'ai préféré me faire un petit script de migration (donc de transformation de code php en php) que je vous soumet, si ça peut servir à quelqu'un tant mieux 
Il nécessite php-cli et readline, je l'ai utilisé avec mon php 5.3 mais je ne vois pas pourquoi un php 5 quelconque aurait un soucis à l'exécuter.
Il nécessite php-cli et readline, je l'ai utilisé avec mon php 5.3 mais je ne vois pas pourquoi un php 5 quelconque aurait un soucis à l'exécuter.
#! /usr/bin/php -q
<?php
error_reporting(E_ALL | E_STRICT);
$curdir = dirname(__FILE__);
//it will scan the files in /application/controllers/ so please check that is the directoy you want to look into
$files = glob($curdir . '/application/controllers/*.php');
for($i=0; $i<count($files); $i++) {
$error_state = false;
$text = '';
$content = file_get_contents($files[$i]);
$lines = explode("\n", $content);
$patterns = array();
$replaces = array();
foreach($lines as $numl=>$l) {
//This is the magic line, it will match for any occurence of something containing asciis with upper case letters and finishing with Action
//it will also ignore the class definition since in my case it was containing the word Action
if(!preg_match('`^class`', $l) && preg_match('`([a-z]+[A-Z].*)Action`', $l, $reg)) {
$error_state = true;
$text .= str_replace($curdir, '', $files[$i]) . ' contains an uppercase function here: '. $reg[1].'Action (line '.($numl+1).').' . "\n";
if(!in_array('`'.$reg[1].'Action`', $patterns)) {
array_push($patterns, '`'.$reg[1].'Action`');
array_push($replaces, strtolower($reg[1]) . 'Action');
}
}
}
if($error_state) {
echo $text;
$input = strtolower(substr(readline('Fix? YES/no: '), 0, 1));
if($input == 'y' || $input == '') {
file_put_contents($files[$i], preg_replace($patterns, $replaces, $content));
echo 'Fixing...' . "\n";
$i--;
} else {
die('GoodBye!' . "\n");
}
}
}
die('This is clean :)' . "\n");