1 User liest/lesen diesen Beitrag: (0 Mitglieder, und 1 Gast).

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Versionsnummern in WB (2.7.x)
12.08.2008, 10:56
Beitrag: #1
Versionsnummern in WB (2.7.x)
Ich weis: es ist kein Bug, es ist auch nichts schlimmes, aber es nervt auf die Dauer doch
ein wenig: Websitebaker und die Versionsnummern der AddOns, Module oder Code-Schnipsel.

Bei WB werden die Versionen als Floats angegeben: 1.2, oder 1.74, und nicht (wie eigentlich
üblich) mit drei Stellen, wie 1.2.0 und/oder 1.7.4.

Der Grund dafür liegt in der Installationsroutine an der Stelle (Zeile 84 ... o.g.)

PHP-Code:
if ($module_version>=$new_module_version) { 

werden einfach die Versionen als Floats miteinander verglichen. Einfach "ist größer oder gleich".

Das Problem: wenn nun ein Autor aus Gewohnheit oder Vorsicht, warum auch immer, in der Versionsangabe
"1.2.0 Alpha" oder "1.2b" hereinschreibt - kommen wir zu unerwarteten Ergebnissen.

Daher die Überlegung, was man tun könnte, damit sowohl "1.23" (im Sinne von 1.2.3) als auch "1.2.3"
verwendet werden können. Die bisherigen Module/Codes könnten bleiben wie sie sind, und wenn
ein neueres Modul käme könnte man auch mit der anderen Schreibweise anfangen: "0.1.0".

Und weil man das nicht nur in WB gebrauchen kann: halt als Klasse (class):
PHP-Code:
<?php

/**
*    @version    0.2.0 - dev
*    @date        2008-08-12
*    @author        Dietrich Roland Pehlke
*    @state        @dev, private - none public
*    @package    black hawk
*
*    @notice        Supported forms are:
*                2            single (main) values
*                1.0            main and subversion
*                1.2.3        main, subversion and bugfixes
*
*    @todo        more supported types like "1.2.3 RC1" and/or "1.2.3 alpha 6"
*
*
*    0.2.0    2008-08-12    Additional function to "clean" a given string
*
*    0.1.0    2008-06-13    First alpha private run
*
*/

class c_version 
{

    public 
$types = Array ("dev""alpha""rc");
    
    public function 
__construct() {
    
    }
    
    public function 
__destruct () {
    
    }
    
    public function 
test_version ($oldVersion "0.0.0"$newVersion "0.0.0") {
    
        
$ov explode("."$oldVersion);
        
$nv explode("."$newVersion);
    
        
$this->__fill($ov3);
        
$this->__fill($nv3);
        
        
$a $this->__compare ($ov[0], $nv[0]);
        
$b $this->__compare ($ov[1], $nv[1]);
        
$c $this->__compare ($ov[2], $nv[2]);
        
        return (
$a AND $b AND $c);
    }
    
    private function 
__compare ($a=0$b=0) {
        return (integer) 
$a >= (integer) $b;
    }
    
    private function 
__fill ( &$aArray= array(), $aNum=3$aValue=0) {
        while (
count($aArray) < $aNum$aArray[] = $aValue;
    }
    
    
    
/**
    *    @since 0.2.0
    */
    
private function __cleanUp ( &$aString) {
        
$pattern = Array("*[\t|\n]{1,}]*""*[ ]{2,}*");
        
$replace = Array(""" ");
        
$aString preg_replace($pattern$replace$aString);
    }
}
?>
Es ist eigentlich ganz einfach: mit "explode" die Versionsangabe in ein Array umwandeln, ggf. auf drei Stellen mit 0 auffüllen, und dann alle drei Stellen vergleichen.

Und in der Modul-Installation dann an der entsprechenden Stelle die Anpassungen:
PHP-Code:
/**
*    Check if this module is already installed
*    and compare versions if so
*/

$new_module_version=$module_version;
$action="install";
if ( 
is_dir(WB_PATH.'/modules/'.$module_directory) ) {
    if ( 
file_exists(WB_PATH.'/modules/'.$module_directory.'/info.php' ) ) {
        require ( 
WB_PATH.'/modules/'.$module_directory.'/info.php' );
        
        
/**
        *    Version to be installed is older than currently installed version
        *
        *    Note: you will have to modify the path to the class-file
        *    as you need it!
        */
        
require ("../../engines/black_hawk/classes/c_version.php");
        
$test = new c_version();
        
        if ( 
$test->test_version$modul_version,  $new_module_version ) ) {
            
/**
            *    Remove temp file
            */
            
if ( file_exists($temp_file) ) unlink($temp_file);  
            
            
$admin->print_error($MESSAGE['GENERIC']['ALREADY_INSTALLED']);
        }
        
        
/**
        *    Modul exists - so we try to upgrade it.
        */
        
$action="upgrade";
    }



Und fertig.

Gruß
Aldus

[Bild: aldus_01.gif]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Kontakt | Websitebaker Hilfe | Nach oben | Zum Inhalt | Archiv-Modus | RSS-Synchronisation