Gestionnaire de média, renomer un fichier ou dossier

flipflipflipflip Member
février 2012 modifié dans Discussions générales
Bonjour,

Pour un client on me demande de pouvoir renommer un dossier ou fichier via le gestionnaire de média. Je m'apprétait à mettre les mains dans le core de pluxml mais je sens la 5.1.6 se rapprocher alors est-ce prévue dans cette version, si non est-ce envisagé/pre-codé/codé ? Si rien n'est fais je peux éventuellement me pencher sur le problème.

J'ai un string de l'array

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Non rien de prévu.
    Renommer un dossier, c'est dangereux, surtout en multi-user, le risque est de casser les liens si les fichiers dans ces dossiers sont utilisés dans des articles. Idem avec les fichiers.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • flipflipflipflip Member
    février 2012 modifié
    Renommer un dossier, c'est dangereux, surtout en multi-user, le risque est de casser les liens si les fichiers dans ces dossiers sont utilisés dans des articles. Idem avec les fichiers.
    Ça oui comme sur un OS quand on renomme un fichier ou dossier et qu'un raccourci y faisait appel mais il va être difficile/lourd de parcourir tout les xml à la recherche de ce dossier ou fichier modifié. Tout comme lorsqu'on supprime un fichier ou dossier.

    Intéressé pour une intégration ou core ou alors j'essaie de la faire en plugin ?

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Essaye de voir ce que ça peut donner au niveau du core.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Bonsoir, j'ai commencé à regarder mais je me pose une question sur l'intégration dans l'interface. Je vois deux possibilités :
    - Ajouter une option dans le champ selection qui aurait comme valeur 'rename' et une condition qui récupère la liste des fichiers à renommer, ensuite une petite interface sous forme de tableau contenant le nom du fichier actuel et un champ texte avec le nouveau nom à taper;
    - Autre possibilité, ajouter une option dans le champs selection qui aurait comme valeur 'rename', dans le tableau d'origine intégrer un champ qui reprend le nom du fichier actuel modifiable. La condition pour qu'un fichier soit renommé est que la checkbox du fichier à renommer soit cliqué, que selection soit égale à rename et que le nom du fichier soit différent de celui d'origine.

    A tu une préférence Stéphane ?
    Philippe.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Je privilégie d'abord l'interface: simple et intuitive pour l'utilisateur, avec un minimum d'actions.
    Le code doit être propre et pas tordu.
    ta 1ère proposition me semble la plus adaptée

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • ta 1ère proposition me semble la plus adaptée
    Mais nécessite un écran supplémentaire en comparaison des pages de gestion des pages statiques, catégories ou le "renommage" est accessible directement.

    J'ai un string de l'array

  • Il est possible de modifier le nom d'un dossier d'une manière assez simple sans toucher une ligne de code et en utilisant le gestionnaire de médias.
    Premièrement, créer un nouveau dossier avec le nouveau nom.
    Ensuite, ouvrir le dossier à renommer, sélectionner l'ensemble des médias qu'il contient (en cliquant dans la checkbox générale), sélectionner le nouveau dossier dans la liste de choix des dossiers mais sans appuyer sur ok.
    Sélectionner "déplacer" dans la liste déroulante des actions possibles sur les médias.
    Enfin, supprimer l'ancien dossier.
    Pour renommer une image, il existe déjà un plugin qui en plus permet de les redimensionner : ImagesManager de Thomas Morin et qui fonctionne très bien. Je pense qu'il serait bien de s'en inspirer pour renommer des fichiers.
    Mais comme l'a dit Stéphane, ce genre d'opération est assez délicate dans la mesure où cela peut entrainer des liens morts.
  • @Jerry Wham : Je l'avais pas vue celui la. Ce qui me dérange c'est la notion de passer par une nouvelle page et aussi dans ce cas la difficulté à gérer plusieurs renommage en même temps.

    Techniquement c'est assez simple à mettre en place, hormis le faite de créer un lien mort il y a pas d'autres contraintes. C'est surtout sur l'interface utilisateur que j'ai un doute. Donc si d'autres utilisateurs peuvent donner leur avis ça serait pas mal.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Pareil que toi Philippe, passer par une nouvelle page pour renommer, me gene un peu.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Stéphane a écrit:
    Pareil que toi Philippe, passer par une nouvelle page pour renommer, me gene un peu.
    Pourquoi, je ne vois pas ce qui est génant (mis à part de renommer un fichier...)?
  • flipflipflipflip Member
    février 2012 modifié
    Pourquoi, je ne vois pas ce qui est génant (mis à part de renommer un fichier...)?
    Je trouve que l'accumulation de pages pour faire une action est anti-ergonomique et déstabilisant pour une personne qui ne maitrise pas trop le surf.


    Voila comment j'imaginais la modification :
    projet_rename.png

    J'ai un string de l'array

  • bonsoir,

    Ton dessin m'aide à comprendre ta motivation :).
    Je pense que le renommage d'un fichier ne poserait pas de soucis de lien mort si le formulaire d'upload donné la possibilité de renommer le(s) fichier(s).

    cordialement,
    GC


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • StéphaneStéphane Member, Former PluXml Project Manager
    flipflip, plutôt que d'avoir une colonne supplémentaire, si le nom du fichier (au dessus du lien "miniature") était directement le champ pour renommer le fichier. Pour visualiser l'image on peut soit cliquer sur la miniature, soit cliquer sur le lien du nom de l'image. donc ça ne serait pas trop gênant de remplacer le nom du fichier par le champ input.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Stéphane a écrit:
    flipflip, plutôt que d'avoir une colonne supplémentaire, si le nom du fichier (au dessus du lien "miniature") était directement le champ pour renommer le fichier. Pour visualiser l'image on peut soit cliquer sur la miniature, soit cliquer sur le lien du nom de l'image. donc ça ne serait pas trop gênant de remplacer le nom du fichier par le champ input.
    + 1

    avec cette possibilité en amont de l'upload , la gestion des fichier serait plus flexible.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Pas mal ton idée Stéphane.

    Je vois pas l'intérêt de renommer a l'upload ?

    J'ai un string de l'array

  • je pense aussi qu'il vaut mieux changer le nom après l'upload afin de laisser libre choix de le changer à tout moment. Tant qu'à faire, on pourrait pas ajouter un champs alt pour les images ? Le référencement apprécierait également.
  • Et un champ "rel" ou "class" pour les diverses lightbox-like ?

    Ça va devenir un champ de mines, ce gestionnaire de média ! :D


    à plus,

    Gzyg
  • flipflip a écrit:
    Pas mal ton idée Stéphane.
    Je vois pas l'intérêt de renommer a l'upload ?

    Ne pas avoir a renommer dans un deuxième temps l'(es) image(s) que l'on vient d'envoyer à partir de son mobile par exemple ... ou après que celle-ci soit liées à un article.

    Personnellement je modifie systématiquement les formulaires d'upload en ajoutant un champs texte "description". J'ai donc après upload d'une image 3 fichiers avec le même nom générique. une miniature, une image et un fichier texte, donner un nom explicite dés le départ simplifie la gestion de l'image et sa miniature, simple et efficient a mon avis.

    C'est pourquoi j'y vois un intérêt.
    cordialement,
    GC


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • je pense aussi qu'il vaut mieux changer le nom après l'upload afin de laisser libre choix de le changer à tout moment. Tant qu'à faire, on pourrait pas ajouter un champs alt pour les images ? Le référencement apprécierait également.
    Ca veut dire qu'il faut stocker dans un fichier xml la liste des images/fichiers avec la valeur du champs rel, class, alt, title donc ça alourdi pas mal le fonctionnement.
    Ne pas avoir a renommer dans un deuxième temps l'(es) image(s) que l'on vient d'envoyer à partir de son mobile par exemple ... ou après que celle-ci soit liées à un article.
    Pour moi il est plus logique de nommer correctement l'image sur mon pc/téléphone/tablette et ensuite l'uploader.

    J'ai un string de l'array

  • flipflip a écrit:
    Pour moi il est plus logique de nommer correctement l'image sur mon pc/téléphone/tablette et ensuite l'uploader.

    ... et on se mord un peu la queue, car idéalement il faut aussi recalibrer et alléger les images pour un usage web optimal et adapté à un affichage dans un navigateur qui est limité ... :) (sur le mobile je ne m'impose pas ce genre de torture :) )

    Sinon, en fait je n’adhère pas du tout à la dernière interface d’édition des articles dans PluXml où l'insertion de document ou images est devenu mission impossible pour un néophyte par exemple ... j'ai délaissé Pluxml depuis fin 2010 et j'avoue que sur l’édition j'ai l'impression que la marche arriére s'est enclenché en éliminant le JS, quand par ailleurs avec Html5 il devient indispensable avec canvas ou dragable !?

    ... Et pis, si je veut que ce ne soit que l'image en ligne qui soit renommée et pas redimensionnée ? :)

    J'ai l'impression que doucement ça glisse vers des détails et que l'essentiel se perde dans une complexité inutile .

    Cordialement, GC


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Sinon, en fait je n’adhère pas du tout à la dernière interface d’édition des articles dans PluXml où l'insertion de document ou images est devenu mission impossible pour un néophyte par exemple ... j'ai délaissé Pluxml depuis fin 2010 et j'avoue que sur l’édition j'ai l'impression que la marche arriére s'est enclenché en éliminant le JS, quand par ailleurs avec Html5 il devient indispensable avec canvas ou dragable !?
    J'avoue ne pas comprendre ou est la difficulté, surtout si tu a activé plxEditor, tu clic sur le bouton image un popup s'ouvre avec le gestionnaire de média et tu a juste à sélectionner l'image ou la vignette que tu veux ajouter. La ou je te re-joins est que je trouve le gestionnaire de média difficile à comprendre.


    A tu tester la dernière version de l'interface admin ?

    Et pis, si je veut que ce ne soit que l'image en ligne qui soit renommée et pas redimensionnée ?
    Après c'est des méthodes de travail et c'est à chacun de trouver la sienne.


    Dans tout les cas une fois le renommage possible dans le gestionnaire de média il sera très facile de l'intégrer à l'upload.

    J'ai un string de l'array

  • flipflip a écrit:
    J'avoue ne pas comprendre ou est la difficulté, surtout si tu a activé plxEditor, tu clic sur le bouton image un popup s'ouvre avec le gestionnaire de média et tu a juste à sélectionner l'image ou la vignette que tu veux ajouter. La ou je te re-joins est que je trouve le gestionnaire de média difficile à comprendre.

    C'est justement le petit reproche que j'ai, sans plugin l'edition et en particulier l’insertion de document ou image n'est pas opérationnel (ou bien j'ai rien compris/vu).

    Mais peut-etre comme tu le dis aussi, c'est que je n'ai pas bien saisie comment fonctionner le gestionnaire de médias, lorsque sur les versions antérieur un clic sur une icône assez compréhensible rendait la chose aisée.

    Sur le fond , oui , renommer les fichiers est une options que je trouve très intéressante et utile.

    ++ :)


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • flipflipflipflip Member
    février 2012 modifié
    Bonjour, hier soir j'ai un peu avancé sur le renommage mais je rencontre un problème de fonctionnement. J'ai retenu l'idée de Stéphane que le nom s'affiche dans un champ nommé nameFile[ ], ensuite il faut cocher la ou les cases des fichiers à renommer et choisir dans le liste déroulante "renommer".

    Voila le code :
    116:$selectionList = array('' =>L_FOR_SELECTION, 'move'=>L_PLXMEDIAS_MOVE_FOLDER, 'rename'=>L_PLXMEDIAS_RENAME, 'thumbs'=>L_MEDIAS_RECREATE_THUMB, '-'=>'-----', 'delete' =>L_DELETE);
    
    259: echo '<input type="text" name="nameFile[]" value="'.plxUtils::strCheck($v['name']).'"><br />';
    
    74:elseif(isset($_POST['selection']) AND ($_POST['selection'][0] == 'rename' OR $_POST['selection'][1] == 'rename') AND isset($_POST['idFile'])) {
    75:	$plxMedias->renameFiles($_POST['nameFile'], $_POST['idFile'], $_SESSION['currentfolder']);
    76:	he;der('Location: medias.php');
    77	exit;
    78:}
    


    Ensuite une petite fonction dans class.plx.media.php:
    public function renameFiles($files, $idFiles, $src_folder) {
    		echo '<pre>';
    		print_r($files);
    		echo '</pre>';
    
    		echo '<pre>';
    		print_r($idFiles);
    		echo '</pre>';
    
    		foreach($idFiles as $id => $value) {
    			echo $this->path.$src_folder.$files[ $id ].'<br />';
    			//$file = basename($files[ $id ]);
    		}
    	}
    

    Ce qui me pose problème c'est pour faire correspondre la/les cases cochés avec le nouveau nom de fichier sans chambouler complètement le formulaire.

    J'ai un string de l'array

  • février 2012 modifié
    Bonsoir,

    <EDIT> au temps pour moi, aprés test, il y a en effet un soucis , tout les elements du formulaires sont passé a la moulinette :) ... et du coup , no match ! </EDIT>

    Tu n'as pas a t'en soucier, le formulaire gère deja tout ça :) .
    <edit> valeurs $_POST envoyé comme tableau(array) et elles ne se melangent pas que tu coches un ou plusieurs checkbox. Les valeurs sont traitées en boucle</edit>

    tu peut reduire ta fonctionn a ça :
    public function renameFiles($files, $idFiles, $src_folder) {
    		foreach($idFiles as $id => $value) {		
    			rename($this->path.$src_folder.$idFiles[$id],$this->path.$src_folder.$files[ $id ]);		
    		}
    	}
    

    Selon les hebergement, il y aura peut-être besoin d'etre plus subtil pour la gestion des droits.

    ++


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • J'ai pas testé mais comme ça je dirais qu'il va avoir un problème. Par exemple j'ai trois photos P1, P2, P3, dans le formulaire je sélectionne P1 et P3 donc $_POST devrait ressemblé à ça :
    Array ( 0 => P1, 1 => P3)
    


    Ensuite $_POST devrait ressemblé à ça :
    Array ( 0 => P1, 1 => P2, 2 => P3)
    


    Donc il va avoir une erreur dans la correspondance des index du tableau puisque index 1 ne correspond pas à la bonne image dans $_POST. C'est la qu'est mon problème.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Voilà la solution que je propose

    dans le fichier core/admin/medias.php

    1) en dessous de
    elseif(isset($_POST['selection']) AND ($_POST['selection'][0] == 'move' OR $_POST['selection'][1] == 'move') AND isset($_POST['idFile'])) {
    	$plxMedias->moveFiles($_POST['idFile'], $_SESSION['currentfolder'], $_POST['folder']);
    	header('Location: medias.php');
    	exit;
    }
    

    ajouter les lignes suivantes
    elseif(isset($_POST['selection']) AND ($_POST['selection'][0] == 'rename' OR $_POST['selection'][1] == 'rename') AND isset($_POST['idFile'])) {
    	$plxMedias->renameFiles($_POST['idFile'], $_POST['newName'], $_POST['oldName']);
    	header('Location: medias.php');
    	exit;
    }
    

    2) remplacer la ligne
    $selectionList = array('' =>L_FOR_SELECTION, 'move'=>L_PLXMEDIAS_MOVE_FOLDER, 'thumbs'=>L_MEDIAS_RECREATE_THUMB, '-'=>'-----', 'delete' =>L_DELETE);
    

    par
    $selectionList = array('' =>L_FOR_SELECTION, 'rename'=>L_MEDIAS_RENAME_FILE, 'move'=>L_PLXMEDIAS_MOVE_FOLDER, 'thumbs'=>L_MEDIAS_RECREATE_THUMB, '-'=>'-----', 'delete' =>L_DELETE);
    

    3) remplacer la ligne
    echo '<a onclick="this.target=\'_blank\';return true;" title="'.plxUtils::strCheck($v['name']).'" href="'.$v['path'].'">'.plxUtils::strCheck($v['name']).'</a><br />';
    

    par
    echo '<input type="hidden" name="oldName[]" value="'.plxUtils::strCheck($v['name']).'" /><input type="text" name="newName[]" style="width:95%" value="'.plxUtils::strCheck($v['name']).'" /><br />';
    


    dans le fichier core/lib/class.plx.medias.php

    ajouter la fonction suivante
    	/**
    	 * Méthode qui renomme des fichiers
    	 *
    	 * @param	selFiles	liste des fichier sélectionnés à renommer
    	 * @param	newNames	liste des nouveaux fichiers
    	 * @param	oldNames	liste des anciens fichiers
    	 * @return  boolean		faux si erreur sinon vrai
    	 * @author	Stephane F
    	 **/
    	public function renameFiles($selFiles, $newNames, $oldNames) {
    
    		$count = 0;
    		foreach($selFiles as $file) {
    			# protection pour ne pas supprimer un fichier en dehors de $this->path.$this->dir
    			$file=basename($file);
    			$key = array_search($file, $oldNames); 
    			$oldName = basename(plxUtils::getValue($oldNames[$key]));
    			$newName = basename(plxUtils::getValue($newNames[$key]));
    		
    			if(!@rename($this->path.$this->dir.$oldName, $this->path.$this->dir.$newName)) {
    				$count++; // pour compter les erreurs
    			} else {
    				# Renommage de la vignette
    				if(is_file($this->path.'.thumbs/'.$this->dir.$oldName))
    					@rename($this->path.'.thumbs/'.$this->dir.$oldName, $this->path.'.thumbs/'.$this->dir.$newName);
    				# Renommage de la miniature
    				$thumbOldName = plxUtils::thumbName($oldName);
    				$thumbNewName = plxUtils::thumbName($newName);
    				if(is_file($this->path.$this->dir.$thumbOldName))
    					@rename($this->path.$this->dir.$thumbOldName, $this->path.$this->dir.$thumbNewName);
    			}
    	
    		}
    
    		if(sizeof($selFiles)==1) {
    			if($count==0)
    				return plxMsg::Info(L_PLXMEDIAS_RENAME_FILE_SUCCESSFUL);
    			else
    				return plxMsg::Error(L_PLXMEDIAS_RENAME_FILE_ERR);
    		}
    		else {
    			if($count==0)
    				return plxMsg::Info(L_PLXMEDIAS_RENAME_FILES_SUCCESSFUL);
    			else
    				return plxMsg::Error(L_PLXMEDIAS_RENAME_FILES_ERR);
    		}
    		
    	}
    

    dans le fichier core/lang/fr/admin.php

    ajouter les lignes suivantes
    'L_PLXMEDIAS_RENAME_FILES_SUCCESSFUL'=> 'Fichiers renommés avec succès',
    'L_PLXMEDIAS_RENAME_FILES_ERR'		=> 'Erreur pendant le renommage d\'un fichier',
    'L_PLXMEDIAS_RENAME_FILE_SUCCESSFUL'=> 'Fichier renommé avec succès',
    'L_PLXMEDIAS_RENAME_FILE_ERR'		=> 'Erreur pendant le renommage du fichier',
    'L_MEDIAS_RENAME_FILE'				=> 'Renommer',
    

    Merci de me faire un retour sur le fonctionnement et aussi de la solution proposée (interface, ergonomie, etc...)


    EDIT: un complément pour que ce soit plus beau... :p

    dans le fichier core/admin/medias.php

    remplacer la ligne (celle avant la modif donnée plus haut)
    echo '<a onclick="this.target=\'_blank\';return true;" title="'.plxUtils::strCheck($v['name']).'" href="'.$v['path'].'">'.plxUtils::strCheck($v['name']).'</a><br />';
    

    par
    echo '<input type="hidden" name="oldName[]" value="'.plxUtils::strCheck($v['name']).'" /><input onchange="this.className=\'filename_focus\'" class="filename" type="text" name="newName[]" value="'.plxUtils::strCheck($v['name']).'" /><br />';
    
    
    

    dans le fichier core/admin/theme/style.css

    ajouter les lignes suivantes
    input[type=text].filename {
    	width:95% !important;
    	border:0;
    	background:transparent;
    }
    input[type=text].filename:focus {
    	border:1px solid #77BACE;
    	background:#fff;
    }
    input[type=text].filename_focus {
    	width:95% !important;
    	border:1px solid #77BACE;
    	background:#fff;
    }
    

    Est-ce que c'est suffisamment intuitif ?

    EDIT: un petit patch supplémentaire pour avoir le meme effet sous IE

    1) télécharger le fichier suivant:
    http://peterned.home.xs4all.nl/htc/csshover3.htc

    2) copier le fichier dans core\admin\theme

    3) editer le fichier core\admin\theme\style.css et au debut du fichier

    ajouter en dessous de
    body {
    

    les ligne suivantes
    /* IE patches (focus, hover, ...) */
    /* http://peterned.home.xs4all.nl/csshover.html */
    /* behavior URLs are relative to the html file, not to the CSS file like a background image URL would be */
    behavior: url("./theme/csshover3.htc"); 
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.