changes.ctp 4.84 KB
<?php

// Parameters passed by controller
// ???...


// On lit le fichier /WWWROOT/../CHANGES.txt
const EMPTY_LINE = "\n"; // Attention, '\n' ne marche pas... seulement "\n"
const NEW_SECTION = "======= ";
const NEW_BLOCK = "-------\n";
const SECTION_NEWS = "======= NEWS =======\n";
const SECTION_CHANGES = "======= CHANGES =======\n";

/*
 const IMPORTANT1 = '- (e)';
 const IMPORTANT2 = '- (i)';
 const IMPORTANT3 = '- (b)';
 */
const IMPORTANT = [
    '- (e)' => 'green',
    //'- (i)' => 'orange',
    '- (i)' => 'black',
    '- (b)' => 'red'
];


function is_new_section($line) {
    return strpos($line, NEW_SECTION) === 0;
}



$wwwroot_dir = new Cake\Filesystem\Folder(WWW_ROOT);
//$fname = 'CHANGES.txt';
$fname = 'CHANGELOG';
$fpath = $wwwroot_dir->pwd() . DS . '..' . DS . $fname;
$nblines_to_read = 5000;

$f = fopen($fpath, "r") or die("Le fichier /$fname n'existe pas... !");


?>






<!-- 
----------------------------------------
-------------- PAGE WEB HTML ----------- 
----------------------------------------
-->

<h2>
	<!-- 
	<i class="icon-print"></i> 
	 -->
	<center>CHANGEMENTS FAITS SUR LE LOGICIEL</center>
</h2>

<hr />

<p>
<ul>
<li><a href='#news'>LES GRANDS CHANGEMENTS (NEWS)</a></li>
<li><a href='#changes'>TOUS LES CHANGEMENTS (plus de détail)</a></li>
</ul> 
</p>

<hr />


<?php

// 1) On zappe jqa début de la première section (NEWS)
$line = ''; while ($line != SECTION_NEWS) $line = fgets($f);


// 2) Lecture et affichage section NEWS (les grandes nouveautés)
echo '<a id="news">';
echo "<h3>LES GRANDS CHANGEMENTS (NEWS)</h3>";
echo '</a>';
// On zappe jqa la première section
$line = ''; while ($line != NEW_BLOCK) $line = fgets($f);
while(!feof($f)) {
    if (is_new_section($line)) break;
    // Traitement d'une section : on lit jqa ligne vide
    $title = fgets($f);
    echo "<b><u>$title</u></b><br>";
    //if ($line == NEW_BLOCK) echo "OUI";
    //while (!feof($f) && $line!=NEW_BLOCK) {
    // Afficher chaque ligne du bloc
    while (true) {
        $line = fgets($f);
        if ( feof($f) || is_new_section($line) || $line==NEW_BLOCK ) break;
        echo $line;
        echo "<br>";
    }
}
echo '<hr />';


// 3) Lecture et affichage section CHANGES (changements plus détaillés)
echo '<a id="changes">';
echo "<h3>TOUS LES CHANGEMENTS</h3>";
echo '</a>';
echo "<i>Liste encore plus détaillée des évolutions : <a href='https://gitlab.irap.omp.eu/epallier/labinvent/commits/master'>GITLAB</a></i>";
echo '<br />';
echo '<br />';
?>
<p>
<u><b>Légende</b></u>:
<ul>
<li>En <span style='color:red'>rouge</span>, les corrections de bug (bugfixes)</li>
<li>En <span style='color:green'>vert</span>, les changements visibles</li>
<li>En <span style='color:black'>noir (normal)</span>, les changements internes (non visibles, souvent techniques)</li>
</ul>
</p>
<br />
<br />
<?php

// On zappe jqa la première section
$line = ''; while ($line != NEW_BLOCK) $line = fgets($f);
while(!feof($f)) {
    if (is_new_section($line)) break;
    // Traitement d'une section : on lit jqa ligne vide
    $title = fgets($f);
    echo "<b>$title</b><br>";
    //if ($line == NEW_BLOCK) echo "OUI";
    //while (!feof($f) && $line!=NEW_BLOCK) {
    // Afficher chaque ligne du bloc
    while (true) {
        $line = fgets($f);
        if ( feof($f) || is_new_section($line) || $line==NEW_BLOCK ) break;
        if (feof($f) || $line==NEW_BLOCK) break;
        foreach (array_keys(IMPORTANT) as $code) {
            $pos = strpos($line, $code);
            if ($pos) break;
        }
        if ($pos) {
            $color = IMPORTANT[$code];
            //echo "<b style='color:$color'> - ".substr($line,$pos+strlen($code))."</b>";
            echo "<span style='color:$color'> - ".substr($line,$pos+strlen($code))."</span>";
        }
        else echo $line; 
        echo "<br>";
    }
}


// END
fclose($f);


/* Autre methode de lecture, avec iterateur

// On va direct à la fin du fichier
try {
    $f = new SplFileObject($fpath, "r"); 
} catch (Exception $e) {
    echo("Le fichier /$fname n'existe pas...");
    return;
}
$f->seek(PHP_INT_MAX);
$last_line = $f->key();

// Lire TOUT le fichier
//$lines = new LimitIterator($f, 0, $last_line);
// Lire seulement les $nblines_to_read dernières lignes
//$line_num_from = max(0,$last_line-$nblines_to_read);
$line_num_from = 0;
$lines = new LimitIterator($f, $line_num_from);
//$lines = new LimitIterator($f, $last_line-$nblines_to_read, $last_line);
//print_r(iterator_to_array($lines));

// Inversion des lignes pour affichage anti-chrono
//$lines_reversed = array_reverse(iterator_to_array($lines));
$lines = iterator_to_array($lines);
foreach ($lines as $line) {
    echo $line.'<br>';
    //if (mb_strpos($line, "$level: ") !== FALSE) echo $line.'<br><br>';
    //if (mb_strpos($line, 'Info: ') !== FALSE) echo $line.'<br><br>';
    //if (mb_strpos($line, '/materiels/edit/') !== FALSE) echo $line.'<br><br>';
}

// Close file
$f=null;

*/

?>