Fonction custom php sur commande info autres dans un virtuel?

Bonjour,

je cherche a traiter une commande info autres venant du plugin iCalendar par une fonction php directement dans le champs info autres d’un virtuel : le champs calcul est celui-ci, parseICS etant une fonction php custom :

parseICS(#[Calendrier][TIBI - outlook][Collectes Tibi]#)

@Salviaff avait repondu a ce post : « le plugin virtuel permet d’effectuer différentes fonction php directement dans le champs calcul d’une commande info dont un substr par exemple. »

c’est exactement ce que je cherche a faire,

Quelles sont les fonctions php autorisées (la reponse de salviaff semble indiquer que seules certaines fonction php fonctionneraient) ?
la fonction PHP custom parseICS definie dans user.class.php traite un string et retourne le resultat formaté, marche tres bien en test avec un string defini dans le fichier user.class.php, mais quand je passe en parametre la commande info autres de mon plugin iCalendar, cela ne fonctionne pas.
par exemple :

  • si je decommente la seconde ligne return strlen ($str), la reponse est toujours 7, quelque soit le paramètre passé.

  • si je decommente la première ligne $str=…, la reponse recue est celle attendue, donc avec in string localement defini la fonction fonctionne :wink:

que manque t’il ?

Merci


	public static function parseICS($str, $delimiter1 = '||', $delimiter2 = ';', $default='Aucun' ) {
		$result = '';
//        $str = "00:00;23:59;;gris, vert;040000008200E00074C5B7101A82E0080000000030F4D0558A30D90100000000000000001000000076077D987B4EC04581034A62B3DD9240;;0;"
//        return = strlen($str);
        
		if (!(strpos($str,$default) !== false ) && (strpos($str,$default)==0) ) {  // not the $default content returned when no active event
    		$events = explode($delimiter1,$str);
    		$firstLoop = true;
      		foreach ($events as $event) {
        		$fields = explode($delimiter2, $event);
        		if (!$firstLoop) {$result = $result . ' | '; }
        		$firstLoop = false;
        		if ((strpos($fields[0],"00:00")===false) || (strpos($fields[1],"23:59")===false)) { $result = $result . "[" . $fields[0] . "-" . $fields[1] . "] "; }
        		$result = $result . $fields[3];
        		if (strlen($fields[7])>1 ) {$result = $result . " (" . $fields[7] . ")"; }
			//$result=$fields[0] .  "_" .  strlen(fields[0]);
    		}
		}
    	return $result;
	}

Bonjour
Le plugin virtuel ne permet pas de faire ça c’est pas le but. Là pour ton cas bien particulier le mieux est d’utiliser un scénario avec un bloc code puis envoyer le résultat en évent dans la commande voulue

merci Loïc de ta réaction

mais je crois que j’y suis parvenu, enfin jusque maintenant cela fonctionne.

j’ai défini mes fonctions php dans le fichier user.class.php, et je peux les utiliser dans le champs calcul d’une commande info autre d’un virtuel, le parametre de la fonction etant lui meme une commande info autre d’un device iCalendar :

parseICS(#[Calendrier][annif - outlook][annif_full]#)

l’astuce, c’est ceci dans la definition de la fonction concernant l’utilisation de la commande info passee en parametre :

        $str=trim(str_replace('#', '', $str));     
      	$str = cmd::byId($str)->execCmd();

avec la definiton de parseICS dans user.clas.php :

public static function parseICS($str, $delimiter1 = '||', $delimiter2 = ';', $default='Aucun' ) {

	$result = '';

       	$str=trim(str_replace('#', '', $str));     
      	$str = cmd::byId($str)->execCmd();
      
		if (!(strpos($str,$default) !== false ) && (strpos($str,$default)==0) ) {  // not the $default content returned when no active event
    		
            $events = explode($delimiter1,$str);
    		$firstLoop = true;
      		foreach ($events as $event) {
        		$fields = explode($delimiter2, $event);
        		if (!$firstLoop) {$result = $result . ' | '; }
        		$firstLoop = false;
        		if ((strpos($fields[0],"00:00")===false) || (strpos($fields[1],"23:59")===false)) { $result = $result . "[" . $fields[0] . "-" . $fields[1] . "] "; }
        		$result = $result . $fields[3];
        		if (strlen($fields[7])>1 ) {$result = $result . " (" . $fields[7] . ")"; }
    		}
		}
    	return $result;
	}
  
  	public static function checkICS($str, $needle, $delimiter1 = '||', $delimiter2 = ';', $default='Aucun' ) {
      
      $eventName=userFunction::parseICS($str, $delimiter1 , $delimiter2, $default) ;
      if (preg_match($needle,$eventName)) { return 1;}
      else {return 0;}
    }

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.