Archive for janvier, 2007

chenpress et les feuilles de styles Mercredi, janvier 31st, 2007

On est pas perdu quand on a l’habitude de FCK avec chenpress …
Afin de laisser un peu de liberté à l’utilisateur, mais de ne pas lui laisser la possibilité de défigurer son site, j’ai opté pour la conf suivante :
dans wp-content/plugins/cchenpress/FCKeditor/fckconfig.js

FCKConfig.EditorAreaCSS = ‘/wp-content/themes/nom_du_theme/fckstyle.css’ ;
FCKConfig.DefaultLanguage    = ‘fr’ ;
FCKConfig.UseBROnCarriageReturn    = true ;
FCKConfig.ToolbarSets["WordPressTool"] = [
    [’Source’,'Templates’],
    [’Cut’,'Copy’,'Paste’,'PasteText’,'PasteWord’],
    [’Undo’,'Redo’,'-’,'Find’,'Replace’,'SpellCheck’],
    [’Link’,'Unlink’,'Anchor’],
    [’Image’,'Flash’,'Table’,'Rule’,'Smiley’,'SpecialChar’],
    [’PageBreak’,'UniversalKey’],
    [’OrderedList’,'UnorderedList’,'Outdent’,'Indent’],  
    [’JustifyLeft’,'JustifyCenter’,'JustifyRight’,'JustifyFull’],
    [’Bold’,'Italic’,'Underline’,'StrikeThrough’,'Subscript’],  
    [’Superscript’,'RemoveFormat’],
    [’Style’]
] ;
FCKConfig.StylesXmlPath        = ‘/wp-content/themes/nom_du_theme/fckstyles.xml’ ;

dans /wp-content/themes/nom_du_theme/fckstyles.css
Je copie la feuille de style style.css du thème, et j’y enlève ce qui pourrait parasiter le rendu dans FCKeditor et éventuellement, je rajoute une ou deux classes dont j’ai besoin du genre .code …

dans /wp-content/themes/nom_du_theme/fckstyles.xml, un xml qui mentionne les styles de la feuilles de styles que je veux mettre à dispo du user

<?xml version="1.0" encoding="utf-8" ?>
<Styles>
    <Style name="grand titre" element="h3" />
    <Style name="sous titre" element="h4" />
    <Style name="code" element="p">
      <Attribute name="class" value="code" />
   </Style>
</Styles>

Deux avantages à cette méthodes: le user à un vrai rendu de son post ou de sa page et il peut faire un semblant de mise en page sans pour autant avoir accès aux palettes de couleurs.

Voilà WordPress + chenpress = ma solution blog

chenpress et WordPress Mercredi, janvier 31st, 2007

J’ai pas mal galéré à trouver un éditeur WYSIWYG qui intègre l’upload de fichier. J’avais trouvé le plugins ImageManager, qui fonctionnait de manière trés satisafaisante dans sa version 2.3.7 couplé avec la version 2.1 de WordPress. Mais bon sitot à passer à WordPress2.1 il a refusé de fonctionner et je ne me suis pas amuser à un queconue Hack!!
Donc je suis revenu aux valeurs surs, FCKeditor, mon copain de toujours, packagé dans chenpress …
Pour l’upload d’image, j’ai beaucoup cherché sur le net avant de me rendre compte que tout était dans le readme.txt contenu dans l’archive de chen press

== Installation ==
1. Unzip the chenpress.zip file, and you will have a "chenpress" folder containing all the ChenPress files.
2. Upload the "chenpress" folder and its contents to your wp-content/plugins directory.
3. Move the folder "UserFiles" to your website’s root (http://www.example.com/UserFiles), and set the properties of the folder and its subfolder to 777.
4. Go to the Plugins page in your WordPress Administration area and click ‘Activate’ for ChenPress.

C’est du passé n’en parlons plus, regardons vers le futur et les feuilles de styles.

Le caractère ‘ dans les noms de fichiers pour un formulaire d’upload Mercredi, janvier 31st, 2007

J’ai écrit il y a quelques mois déjà une petite appli visant à aider le service des marchés publics dde l’Université d’Auvergne, dans son processus de dématèrialistaion des marchés. En gros Un outil en Intranet avec fonctionnalités CRUD (Create Read Update Delete) permettant de gérer des marchés et leur état (appel d’offres, en cours, terminé).
Pour un marché on peut attahcer des fichiers, via un formulaire d’upload HTML.
Du genre:

<form id="FileForm" action="MarcFileCopy.php" method="POST"  Enctype="multipart/form-data">
Titre : <input type="text" name="Titre" size="50" />
<input type="file" id="Fichier" name="Fichier" value="" size="80" />
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="hidden" name="SubFile" value="Soumettre" />
</form>      

Il se trouve que le service des marchés utilisent, de manière réccurrente, des caractères spéciaux dans leur nom de fichier, ce qui fait éventuellement des urls encodés d’une part pas belle te qui selon les caractères fonctionnent plus ou moins … Pour tout ce qui est caractère alphabétique et espacement, j’ai fait une fonction qui les chasses avant la copie du fichier sur le serveur du genre :

function antiSpecialChars($filename){
   $temp = $filename;
   $pattern = "[àâ]";
   $temp = eregi_replace($pattern,"a",$temp);
   $pattern = "[éèêë]";
   $temp = eregi_replace($pattern,"e",$temp);
   $pattern = "[î]";
   $temp = eregi_replace($pattern,"i",$temp);
   $pattern = "[ô]";
   $temp = eregi_replace($pattern,"o",$temp);
   $pattern = "[ ]";
   $temp = eregi_replace($pattern,"_",$temp);
   return $temp;
}

Jusque là tout va bien le problème est que parmis les caractère sspéciaux il en est qui est utilisé et qui pose plus problème que les autres c’est le ‘ (lire "prime"). L’utilisation de ce caractère dans un nom de fichier à uploader fait que la variable $_FILES[’Fichier’][’tmp_name’] qui contient normalement le nom du fichier à uploader est vide …
Il n’ya donc pas moyen d’utiliser la fonction antiSpecialChars() sus citée pour l’éliminer.
Donc il faut agir avant le traitement du fichier, donc juste avant la soumission du formulaire, donc c’est avec JavaScript que ca va se passer.
Il faut récupérer le nom du fichier

filename = document.getElementById(’Fichier’).value;

le traiter

tmp = filename.replace("’","_");

et réassigner avec un truc du genre

document.getElementById(’Fichier’).value = filename;

Mais ca évidemment ca ne marche pas. C’est du bon sens, puisque le formulaire ne serait plus capable de localiser le fichier à uploader, puiqu’il n’aurait plus le bon nom!!
Bref, la feinte que j’ai trouvé est de passer par une variable cachée

<input type="hidden" id="FichierNom" name="FichierNom" value="" />

qui me permettra de stocker le nom du fichier sans le ‘ et je pourrais ainsi m’en servir pour la copie physique du fichier sur le serveur, à la place de $_FILES[’Fichier’][’tmp_name’]  qui elle est toujours vide!
Le problème est que dans tp je n’ai pas le nom du fichier mais sont path entier, donc je récapitule tout dans une fonction, qu’il n’y a qu’à mettre sur un évènement JavaScript du genre le onSubmit du formulaire …

function checkChars(){
   filename = document.getElementById(’Fichier’).value;
   tmp = filename.replace("’","_");
   tmp2 = tmp.split("\");  
   tmp = tmp2.pop();
   document.getElementById(’FichierNom’).value = tmp;
}