Sysix / dynao-CMS

CM-System
GNU General Public License v3.0
5 stars 1 forks source link

dyn::checkVersion NEW #19

Open Sysix opened 10 years ago

Sysix commented 10 years ago

Hab endlich den Code richtig zum laufen bekommen:

static public function checkVersion($version1, $version2) {

        $version1 = str_replace(' ', '.', $version1);
        $version2 = str_replace(' ', '.', $version2);

        $version1 = explode('.', $version1);
        $version2 = explode('.', $version2);

        $depth = [
            lang::get('version_fail_version1'),
            lang::get('version_fail_version2'),
            lang::get('version_fail_version3'),
            'You have a Old Version',
        ];

        $versionArray = array_flip(['RC1', 'RC', 'RC2', 'RC3', 'b', 'beta', 'a', 'alpha', 'dev']);

        foreach($version1 as $i => $version) {

            if(isset($version2[$i])) {

                if(is_numeric($version) && is_numeric($version2[$i])) {

                    if($version2[$i] > $version) {
                        return $depth[$i];
                    }

                } else {

                    // 1.1.1 > 1.1 RC
                    if(is_int($version2[$i])) {
                        return $depth[4];
                    }

                    if(isset($versionArray[$version])) {
                        $version = $versionArray[$version];
                    }

                    if(isset($versionArray[$version2[$i]])) {
                        $version2[$i] = $versionArray[$version2[$i]];
                    }

                    //var_dump($version, $version2[$i]);

                    if($version2[$i] < $version) {
                        return $depth[3];
                    }

                }

            } else {
            // 1.1.1 > 1.1
               return !isset($versionArray[$version]);
            }

        }

        $count1 = count($version1);
        $count2 = count($version2);

        if($count1 < $count2) {

            $diff = $count2 - $count1;

            if($diff == 1) {

                return isset($versionArray[$version2[$count2-1]]);

            }

        }

        return true;

    }

Vergleiche "1.0.3" mit "1.0.2" :true Vergleiche "1.0.1" mit "1.0" :true Vergleiche "1.0.2 RC" mit "1.0.2 RC3" :true Vergleiche "1.2" mit "1.1" :true Vergleiche "1.0" mit "1.0 b" :true

Vergleiche "1.0.2" mit "1.0.3" :false Vergleiche "1.0" mit "1.0.1" :false Vergleiche "1.0.2 RC3" mit "1.0.2 RC" :false Vergleiche "1.1" mit "1.2" :false Vergleiche "1.0 b" mit "1.0" :false

Vielleicht fällt dir noch nen komplizierten Fall ein? Noch ein bisschen ausfeilen und ihc würd gern die Methode so übernehmen. Deine Meinung?

jkoan commented 10 years ago

Wieso nicht einfach eine PHP Funktion dafür nehmen??

http://www.php.net/manual/de/function.version-compare.php

Sysix commented 10 years ago

die Funktion gibt leider nur aus, ob sie neuer/älter/gleich ist. Ich möchte gerne wissen was da anders ist. Um so von z.B. 0.2.1 auf 0.2.2 automatisch zu updaten :) ein Update von 0.2 auf 0.3 wäre z.B. zu riskant. Den gleichen gedanken hat ja WP auch :)

aaroniker commented 6 years ago

@Sysix :star2: :grin:

Sysix commented 6 years ago

@aaroniker ?