Développer avec RBS Change : Format des fichiers supportés par VirtualProduct

  • 46404.1

    08/11/2011 19:06


    guiom
    Rang : Expert
    Bonjour,

    Je viens de m’apercevoir qu'il n'est pas possible de mettre un fichier de type EPUB ou MOBI dans un produit virtuel.
    Pouvez-vous m'indiquer s'il est possible d'autoriser ces formats ?Plus généralement, comment ajouter le support d'un format ainsi que son icône ?

    Merci
  • 46404.2

    09/11/2011 09:48


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Je viens de tester la chose et j'ai pu uploader un fichier epub, que ce soit directement par drag & drop dans le produit virtuel ou par upload dans la médiathèque et je n'ai eu aucun problème.

    J'ai également testé une commande de bout en bout avec ce fichier et j'ai bien pu le télécharger à la fin...

    Pouvez-vous préciser ce qui vous a posé problème précisément ?
  • 46404.3 en réponse à 46404.2 écrit par Gaël Port

    09/11/2011 10:04


    guiom
    Rang : Expert
    Bonjour,

    J'ai trouvé l'explication. J'avais uploadé les fichiers en drag&drop dans un dossier puis j'avais modifier un produit existant. Le sélecteur de ressource ne me proposait pas ces nouveaux fichiers.
    Je n'avais pas remarqué le cadenas sur mes autres fichiers de test (uploadé directement depuis un produit).
    Il faut en fait convertir les fichiers en média sécurisé par un clique droit.

    Par contre, est-il possible de changer l’icône dans le backoffice ?
  • 46404.4

    09/11/2011 12:08


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Alors le changement d'icône, c'est faisable mais ça demande un peu de code, ce n'est pas immédiat.

    Il y a trois choses à faire :

    1) ajouter l'icône : pour cela, dans un module spécifique, placer l'icône dans le dossier webapp/changeicons/small et exécuter la commande init-webapp.


    2) déclarer le style associé : dans le fichier backoffice.css du module spécifique, ajouter la déclaration suivante (en ayant remplacé les trois portions entre chevrons) :
    treechildren::-moz-tree-image(modules_media_media modules_media_<votreType>),treechildren::-moz-tree-image(modules_media_securemedia modules_media_<votreType>){
    	list-style-image: url(/changeicons/small/<votreIcône>.png) !important;
    }

    3) la dernière partie est un poil plus compliquée : il vous faudra surcharger (par exemple par remplacement de classe via l'AOP) la méthode addTreeAttributes du service media_MediaService pour gérer votre cas particulier en settant pour les médias correspondant à votre cas la valeur suivante :
    $nodeAttributes['actualtype'] = 'modules_media_<votreType>';
    Exemple complet de classe (mon module spécifique étant nommé "abc") :
    <?php
    /**
     * abc_aop_media_MediaService
     * @package modules.abc
     */
    class abc_aop_media_MediaService extends media_MediaService
    {
    	/**
    	 * @var media_MediaService
    	 */
    	private static $instance;
    
    	/**
    	 * @return media_MediaService
    	 */
    	public static function getInstance()
    	{
    		if (self::$instance === null)
    		{
    			self::$instance = self::getServiceClassInstance(get_class());
    		}
    		return self::$instance;
    	}
    	
    	/**
    	 * @param media_persistentdocument_media $document
    	 * @param string $moduleName
    	 * @param string $treeType
    	 * @param array<string, string> $nodeAttributes
    	 */
    	public function addTreeAttributes($document, $moduleName, $treeType, &$nodeAttributes)
    	{
    		parent::addTreeAttributes($document, $moduleName, $treeType, $nodeAttributes);
    		
    		$infos = $document->getInfo();
    		if ($infos['extension'] == 'epub')
    		{
    			$nodeAttributes['actualtype'] = 'modules_media_epub';
    		}
    	}
    }
    Et le fichier aop.xml à placer dans le dossier config du projet pour activer le remplacement de la classe :
    <?xml version="1.0" encoding="utf-8"?>
    <aop>
    	<replace pointcut="media_MediaService" class="abc_aop_media_MediaService" />
    </aop>

    Édité par Gaël Port 09/11/2011 12:08

  • 46404.5 en réponse à 46404.4 écrit par Gaël Port

    21/11/2011 19:43


    guiom
    Rang : Expert
    Merci pour ces explications, j'ai réussit à mettre en œuvre ce que vous avez indiqué. Une précision tout de même, le fichier MediaService.class.php utilisé pour surcharger la classe doit être mis dans le dossier abc/lib/aop/media/ et il faut exécuter la commande update-autoload pour que la classe soit résolut.

    Pour aller plus loin, est-il possible de redéfinir l’icône utilisé dans les zones de sélection d'un média ? Par exemple, dans un produit virtuel, le fichier joint à toujours l'icône "document". Le but étant d'afficher l'icône du média.

    Merci
  • 46404.6 en réponse à 46404.5 écrit par guiom

    22/11/2011 10:15


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    A priori l'emplacement du fichier n'a pas vraiment d'importance du moment qu'il est quelque part dans le dossier lib d'un module (les autres dossiers des modules ne sont pas tous parcouru par l'autoload : pour réduire les temps de calcul de l'autoload, on ne parcourt que les dossiers censés contenir du PHP).


    Sinon, concernant le fait d'afficher l'icône dans un picker là je ne pense pas que ce soit possible en l'état : il ne passe pas par addTreeAttribute pour générer sa liste et globalement passe par d'autres parties du code et un autre nommage des attributs retournés par le serveur.

    En gros il passe par generic_InfoAction qui lui calcule l'icône. Alors que dans le cas de la liste principale, c'est une déclaration CSS (un peu spécifique aux arbres XUL en plus) qui va affecter l'icône en fonction d'attributs placés sur la cellule.


    Ça peut faire l'objet d'une demande d'évolution par contre. Mais quoiqu'il en soit ça ne sera probablement pas fait pour la version 3.5.


    Si vraiment c'est important dans votre cas vous pouvez toujours faire un remplacement de la classe sur l'action par AOP mais il faut être conscient que tout remplacement de classe est à revalider à chaque mise à jour en vérifiant ce qui a pu bouger sur le fichier parce que sinon potentiellement vous raterez des correctifs voire vous obtiendrez des erreurs parce que votre remplacement ne sera plus compatible.

    Donc il vaut mieux ne pas abuser de cette méthode même si elle est pratique et reste bien plus maintenable qu'une modification en dur d'un module standard.
  • 46404.7 en réponse à 46404.6 écrit par Gaël Port

    22/11/2011 10:45


    guiom
    Rang : Expert
    Merci pour ces explications. L'affichage de l'icône dans un picker n'est pas une priorité mais cette fonction harmoniserait l'identification visuel des médias.
    De plus, dans les produits virtuels, il n'est pas facile de savoir si l'on ne s'est pas trompé de fichier (la zone de texte est généralement tronqué pour peu que le nom du fichier est long) lorsque l'on propose plusieurs formats d'un même fichier.

    J'ai ajouté une demande d'évolution sous le numéro 46950
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1453 membres
Aucun membre connecté