# Retour complexe dans les aides à la saisie

# Spécification de l'aide à la saisie complexe

Les retours des aides à la saisie peuvent juste être des valeurs, mais l'interface web des Smart Elements retourne des informations plus détaillées.

Une valeur retournée complexe a la forme d'un tableau indexé avec les index suivants :

  • value : Valeur brute qui sera affectée dans le formulaire
  • displayValue : Texte affiché dans le formulaire

Ces valeurs sont interprétées différemment suivant les types de champs. Un champ de type file peut avoir en plus les index suivants :

  • mime : type mime ("application/pdf" par exemple)
  • size : taille du fichier (en octets)
  • creationDate : date de création du fichier
  • icon: url correspondant au type mime du fichier
  • url: url de téléchargement du fichier.

Les image ont les mêmes index que les file avec en plus l'index thumbnail qui permet d'indiquer en plus l'url de la miniature à afficher.

Pour les types docid :

  • icon: url de l'icone du Smart Element
  • url: url de consultation du Smart Element.

Exemple d'une aide à la saisie sur les images. Les retours sont les fichiers enregistrés dans les Smart Element de type IMAGE.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:structure-configuration name="MYIMAGES" label="Location">
        <smart:fields>
            <smart:field-set name="note_fr_ident" type="frame" access="ReadWrite" label="Identification">
                <smart:field-text name="note_title" is-title="true" access="ReadWrite" label="Title"/>
                <smart:field-image name="note_image" access="ReadWrite"/>
            </smart:field-set>
        </smart:fields>

        <smart:autocompletion>
            <smart:field-autocomplete field="note_image">
                <smart:field-callable function="Anakeen\SmartStructures\Myimages\ImagesCompletion"/>
                <smart:field-returns>
                    <smart:field-return field="note_image"/>
                </smart:field-returns>
            </smart:field-autocomplete>
        </smart:autocompletion>
    </smart:structure-configuration>

</smart:config>

# Traitement de l'aide à la saisie complexe

Fichier "vendor/Anakeen/SmartStructures/Myimage/ImagesCompletion.php" :

Il retourne la valeur complète d'un champ image, le label affiché dans la liste affiche le titre et la miniature de l'image. L'ensemble complet des valeurs permet d'avoir directement la miniature de l'image dans le formulaire ainsi que toutes ces informations spécifiques.

<?php
namespace Anakeen\SmartStructures\Myimages;

use Anakeen\Core\Utils\FileMime;
use Anakeen\Core\Utils\Strings;
use Anakeen\Search\Filters\TitleContains;
use Anakeen\Search\SearchElements;
use Anakeen\SmartAutocompleteRequest;
use Anakeen\SmartAutocompleteResponse;
use Anakeen\Vault\FileInfo;

class ImagesCompletion
{
  public function __invoke(
    SmartAutocompleteRequest $request,
    SmartAutocompleteResponse $response,
    $args
  ): SmartAutocompleteResponse {
    $filter = $request->getFilterValue();
    $s = new SearchElements("IMAGE");
    $s->setSlice(20);
    if ($filter) {
      $s->addFilter(new TitleContains($filter));
    }
    $results = $s->search()->getResults();
    foreach ($results as $image) {
      $fileValue = $image->getRawValue("img_file");
      /** @var FileInfo $fileInfo */
      $fileInfo = $image->getFileInfo($fileValue, "", "object");
      $fileLink = $image->getFileLink("img_file", -1, false, true);
      $thumbLink = "";
      if ($fileLink) {
        // Miniature de 48px
        $thumbLink = sprintf("/api/v2/smart-elements/%d/images/%s/-1/sizes/%sx%sc.png", $image->id, "img_file", 48, 48);
      }

      $v = [
        "value" => $fileValue,
        "displayValue" => $fileInfo->name,
        "mime" => $fileInfo->mime_s,
        "size" => $fileInfo->size,
        "url" => $fileLink,
        "creationDate" => $fileInfo->cdate,
        "icon" => $image->getIcon(FileMime::getIconMimeFile($fileInfo->mime_s), 20),
        "thumbnail" => $thumbLink
      ];
      $label = sprintf('<p><img src="%s"/> %s </p>', $thumbLink, Strings::xmlEncode($image->getTitle()));
      $response->appendEntry($label, [$v]);
    }

    return $response;
  }
}