17.8.1.9 Callback et itérateur

17.8.1.9.1 Callback sur un itérateur

Il est possible d'appliquer une fonction sur chacun des documents d'une liste de documents provenant d'un itérateur.

$s=new SearchDoc("","IUSER");
$s->setObjectReturn(); // retour d'objets documentaires
$s->addFilter('us_extmail is not null'); 
$s->search(); // déclenchement de la recherche
$dl=$s->getDocumentList();
$test=1;
$callback=function (&$doc) use ($test) {
    if ($test) { // test for fun
        $doc->lock();  // lock document
    }
};
$dl->listMap($callback);
foreach ($dl as $docid=>$doc) {
    print "$docid)".$doc->getTitle()."(".$doc->getProperty("locked").")\n";
}

Dans cet exemple l'ensemble des documents sera verrouillé. Attention : La fonction de mapping est appelée sur chacun des documents lors de l'itération. S'il n'y a pas d'itération la fonction de mapping ne sera pas appelée.

17.8.1.9.2 Callback sur un itérateur avec filtrage

La fonction de callback permet aussi d'exclure des documents de l'itérateur. Si la méthode retourne le booléen false alors le document sera exclu de la liste. Tout autre retour que le booléen false, retournera le document, même s'il n'y a pas de retour explicite.

$s=new SearchDoc("","MY_DOCS");
$s->setObjectReturn(); // retour d'objets documentaires
$s->search(); // déclenchement de la recherche
$dl=$s->getDocumentList();
 
$callback=function (&$doc) {
    if (! $doc->isLocked()) {
        $doc->lock();
        return true;
    }
    return false;
};
$dl->listMap($callback);
foreach ($dl as $docid=>$doc) {
    print "$docid)".$doc->getTitle()."(".$doc->getProperty("locked").")\n";
}

Cet exemple ne verrouillera que les document non verrouillés et ne retournera que les documents venant d'être verrouillés.

×