Categories > TinyButStrong general (FR) >

toute petite modif perso dans tbs

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: ioguix
Date: 2006-01-07
Time: 12:54

toute petite modif perso dans tbs

Bonjour,

J'ai été amené à ajouter quelques lignes de code dans votre classe tbs_class, je voulais donc vous en faire part, cela pourrait être utile à d'autre.

Mon problème était de pouvoir tester la valeur d'une variable grace aux expression régulière. j'ai donc ajouter l'opérateur '~=' qui prend en première opérande la variable a tester et en seconde l'expression réglière. Comme un exemple est toujours plus parlant : [Variable.valeur;if [val] ~= '/(toto)|(titi)$/'; then 'ok';else 'nok'] affichera ok si la variable fini par titi ou toto, nok dans les autres cas.

La fonction que j'ai modifiée pour cela :
function tbs_Misc_CheckCondition($Str) {
// Check if an expression like "exrp1=expr2" is true or false.

        // Find operator and position
        $Ope = '=';
        $Len = 1;
        $Max = strlen($Str)-1;
        $Pos = strpos($Str,$Ope);
        if ($Pos===false) {
                $Ope = '+';
                $Pos = strpos($Str,$Ope);
                if ($Pos===false) return false;
                if (($Pos>0) and ($Str[$Pos-1]==='-')) {
                        $Ope = '-+'; $Pos--; $Len=2;
                } elseif (($Pos<$Max) and ($Str[$Pos+1]==='-')) {
                        $Ope = '+-'; $Len=2;
                } else {
                        return false;
                }
        } else {
                if ($Pos>0) {
                        $x = $Str[$Pos-1];
                        if ($x==='!') {
                                $Ope = '!='; $Pos--; $Len=2;
                        } elseif ($x==='~') {
                                $Ope = '~='; $Pos--; $Len=2;
                        } elseif ($Pos<$Max) {
                                $y = $Str[$Pos+1];
                                if ($y==='=') {
                                        $Len=2;
                                } elseif (($x==='+') and ($y==='-')) {
                                        $Ope = '+=-'; $Pos--; $Len=3;
                                } elseif (($x==='-') and ($y==='+')) {
                                        $Ope = '-=+'; $Pos--; $Len=3;
                                }
                        } else {
                        }
                }
        }

        // Read values
        $Val1  = trim(substr($Str,0,$Pos));
        $Nude1 = tbs_Misc_DelDelimiter($Val1,'\'');
        $Val2  = trim(substr($Str,$Pos+$Len));
        $Nude2 = tbs_Misc_DelDelimiter($Val2,'\'');

        // Compare values
        if ($Ope==='=') {
                return (strcasecmp($Val1,$Val2)==0);
        } elseif ($Ope==='!=') {
                return (strcasecmp($Val1,$Val2)!=0);
        } elseif ($Ope==='~=') {
                return ( preg_match ( $Val2, $Val1 ) );
        } else {
                if ($Nude1) $Val1 = (float) $Val1;
                if ($Nude2) $Val2 = (float) $Val2;
                if ($Ope==='+-') {
                        return ($Val1>$Val2);
                } elseif ($Ope==='-+') {
                        return ($Val1 < $Val2);
                } elseif ($Ope==='+=-') {
                        return ($Val1 >= $Val2);
                } elseif ($Ope==='-=+') {
                        return ($Val1<=$Val2);
                } else {
                        return false;
                }
        }

}

Voilà, pour finir merci pour cette classe vraiment trés pratique !

++
By: Skrol29
Date: 2006-01-09
Time: 10:18

Re: toute petite modif perso dans tbs

Salut,

Merci pour nous faire part de ton code.
Je vais regarder ça et voir dans quelle mesure ça peut être intéressant pour les prochaines versions.
By: ioguix
Date: 2006-01-10
Time: 09:40

Re: toute petite modif perso dans tbs

Bof, tu sais, j'ai ajouté que 4 lignes hein, le reste, c'est ton code ;)

En tout cas, merci pour cette classe, maintenant que j'ai commencé à l'utilisé, je la lacherais plus !

Une petite remarque sur le forum cependant, il m'est impossible de poster depuis le travail, certainement à cause de provoxy et autres filtres anti-pollution d'internet :/

++