Gestion des types MIME MS Office 2007
Publié : 17 févr. 2013, 21:47
Bonjour, tout d'abord je tiens à féliciter tous les collaborateurs du projet pour le travail remarquable qui a été effectué avec Agora-Project, ENT que j'ai découvert il y a quelques jours seulement et dont j'admire la simplicité et l'ergonomie.
Nous étions en train de tester la gestion des fichiers de l'ENT lorsque mon collègue m'a fait part d'une erreur sur les fichiers MS Office Excel de version postérieur à l'Office 2003. En effet, lorsque nous mettions un fichier xlsx en ligne, MS Office nous renvoyait le message d'erreur :
Le problème ne se pose pas avec Internet Explorer, ni avec Google Chrome et pas plus avec Safari. Nous ne le rencontrions qu'avec Firefox (actuellement la version 18.0.2) et si le document était enregistré au préalable sur le disque dur puis ouvert, il n'y avait pas d'erreur non plus. J'en ai donc conclu que cela venait de la gestion des types MIME MS Office.
En regardant le code d’Agora-Project, j'ai conclu que les fonctions de traitement des types MIME des fichiers se trouvaient dans le fichier ./fonctions/fichier.inc.php
Pour corriger l'erreur, j’ai donc modifié ce fichier en me basant sur ce document :
http://blogs.msdn.com/b/vsofficedevelop ... types.aspx
J’ai remplacé les lignes 9, 10 et 11 :
Par :
Ensuite, les lignes 275, 276 et 277 :
Par :
Avec ces lignes, nous n’avions plus d’erreur lors de l’ouverture des fichiers xlsx ou docx sous Firefox. Je précise toutefois que j’ai testé avec d’autres formats postérieurs à MS Office 2003, mais pas avec tous les formats que j’ai inclus dans le code et surtout je n'ai fait ces quelques tests que sur un MS Office 2007 que j'avais sous la main.
Afin d’avoir l’icône correspondante aux documents de type texte, tableur ou présentation sous le gestionnaire de fichiers, j’ai également modifié le fichier ./module_fichier/commun.inc.php.
J’ai remplacé les lignes 185 et 186 :
Par:
Voilà, le problème est mineur mais de cette manière, il n’est plus du tout. J'espère que cette petite modification pourra être utile à d'autres, je joins les deux fichiers modifié pour la version 2.16.1 d'Agora-Project :
Nous étions en train de tester la gestion des fichiers de l'ENT lorsque mon collègue m'a fait part d'une erreur sur les fichiers MS Office Excel de version postérieur à l'Office 2003. En effet, lorsque nous mettions un fichier xlsx en ligne, MS Office nous renvoyait le message d'erreur :
The file you are trying to open, MonFichier.xlsx.xls, is in a different format than specified by the file extension. Verify the file is not corrupted and is from trusted source before opening the file. Do you want to open the file now?
Le problème ne se pose pas avec Internet Explorer, ni avec Google Chrome et pas plus avec Safari. Nous ne le rencontrions qu'avec Firefox (actuellement la version 18.0.2) et si le document était enregistré au préalable sur le disque dur puis ouvert, il n'y avait pas d'erreur non plus. J'en ai donc conclu que cela venait de la gestion des types MIME MS Office.
En regardant le code d’Agora-Project, j'ai conclu que les fonctions de traitement des types MIME des fichiers se trouvaient dans le fichier ./fonctions/fichier.inc.php
Pour corriger l'erreur, j’ai donc modifié ce fichier en me basant sur ce document :
http://blogs.msdn.com/b/vsofficedevelop ... types.aspx
J’ai remplacé les lignes 9, 10 et 11 :
Code : Tout sélectionner
($type=="word" && preg_match("/(\.doc|\.docx|\.docm|\.dotx|\.dotm)$/i",$nom_fichier)) ||
($type=="excel" && preg_match("/(\.xls|\.xlsx|\.xlsm|\.xltx|\.xltm)$/i",$nom_fichier)) ||
($type=="powerpoint" && preg_match("/(\.ppt|\.pptx|\.pptm|\.potx|\.potm|\.pps|\.ppsx)$/i",$nom_fichier)) ||
Code : Tout sélectionner
($type=="word" && preg_match("/(\.doc|\.dot)$/i",$nom_fichier)) ||
($type=="word2007" && preg_match("/(\.docx)$/i",$nom_fichier)) ||
($type=="word2007t" && preg_match("/(\.dotx)$/i",$nom_fichier)) ||
($type=="word2007m" && preg_match("/(\.docm)$/i",$nom_fichier)) ||
($type=="word2007tm" && preg_match("/(\.dotm)$/i",$nom_fichier)) ||
($type=="excel" && preg_match("/(\.xls|\.xlt|\.xla)$/i",$nom_fichier)) ||
($type=="excel2007" && preg_match("/(\.xlsx)$/i",$nom_fichier)) ||
($type=="excel2007t" && preg_match("/(\.xltx)$/i",$nom_fichier)) ||
($type=="excel2007m" && preg_match("/(\.xlsm)$/i",$nom_fichier)) ||
($type=="excel2007tm" && preg_match("/(\.xltm)$/i",$nom_fichier)) ||
($type=="excel2007am" && preg_match("/(\.xlam)$/i",$nom_fichier)) ||
($type=="excel2007b" && preg_match("/(\.xlsb)$/i",$nom_fichier)) ||
($type=="powerpoint" && preg_match("/(\.ppt|\.pot|\.pps|\.ppa)$/i",$nom_fichier)) ||
($type=="powerpoint2007" && preg_match("/(\.pptx)$/i",$nom_fichier)) ||
($type=="powerpoint2007t" && preg_match("/(\.potx)$/i",$nom_fichier)) ||
($type=="powerpoint2007s" && preg_match("/(\.ppsx)$/i",$nom_fichier)) ||
($type=="powerpoint2007am" && preg_match("/(\.ppam)$/i",$nom_fichier)) ||
($type=="powerpoint2007tm" && preg_match("/(\.pptm|\.potm)$/i",$nom_fichier)) ||
($type=="powerpoint2007sm" && preg_match("/(\.ppsm)$/i",$nom_fichier)) ||
Code : Tout sélectionner
if(controle_fichier("word",$nom_fichier)) { $content_type = "application/msword"; }
elseif(controle_fichier("excel",$nom_fichier)) { $content_type = "application/vnd.ms-excel"; }
elseif(controle_fichier("powerpoint",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint"; }
Code : Tout sélectionner
if(controle_fichier("word",$nom_fichier)) { $content_type = "application/msword"; }
elseif(controle_fichier("word2007",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; }
elseif(controle_fichier("word2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; }
elseif(controle_fichier("word2007m",$nom_fichier)) { $content_type = "application/vnd.ms-word.document.macroEnabled.12"; }
elseif(controle_fichier("word2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-word.template.macroEnabled.12"; }
elseif(controle_fichier("excel",$nom_fichier)) { $content_type = "application/vnd.ms-excel"; }
elseif(controle_fichier("excel2007",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; }
elseif(controle_fichier("excel2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; }
elseif(controle_fichier("excel2007m",$nom_fichier)) { $content_type = "application/vnd.ms-excel.sheet.macroEnabled.12"; }
elseif(controle_fichier("excel2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-excel.template.macroEnabled.12"; }
elseif(controle_fichier("excel2007am",$nom_fichier)) { $content_type = "application/vnd.ms-excel.addin.macroEnabled.12"; }
elseif(controle_fichier("excel2007b",$nom_fichier)) { $content_type = "application/vnd.ms-excel.sheet.binary.macroEnabled.12"; }
elseif(controle_fichier("powerpoint",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint"; }
elseif(controle_fichier("powerpoint2007",$nom_fichier)) { $content_type = "application/application/vnd.openxmlformats-officedocument.presentationml.presentation"; }
elseif(controle_fichier("powerpoint2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.presentationml.template"; }
elseif(controle_fichier("powerpoint2007s",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.presentationml.slideshow"; }
elseif(controle_fichier("powerpoint2007am",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.addin.macroEnabled.12"; }
elseif(controle_fichier("powerpoint2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.presentation.macroEnabled.12"; }
elseif(controle_fichier("powerpoint2007sm",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"; }
Afin d’avoir l’icône correspondante aux documents de type texte, tableur ou présentation sous le gestionnaire de fichiers, j’ai également modifié le fichier ./module_fichier/commun.inc.php.
J’ai remplacé les lignes 185 et 186 :
Code : Tout sélectionner
elseif(controle_fichier("word",$fichier_nom) || controle_fichier("ootext",$fichier_nom) || controle_fichier("text",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("excel",$fichier_nom) || controle_fichier("oocalc",$fichier_nom)) { return "tableur"; }
Code : Tout sélectionner
elseif(controle_fichier("word",$fichier_nom) || controle_fichier("ootext",$fichier_nom) || controle_fichier("text",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("word2007",$fichier_nom) || controle_fichier("word2007t",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("word2007m",$fichier_nom) || controle_fichier("word2007tm",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("excel",$fichier_nom) || controle_fichier("oocalc",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007",$fichier_nom) || controle_fichier("excel2007t",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007m",$fichier_nom) || controle_fichier("excel2007tm",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007am",$fichier_nom) || controle_fichier("excel2007b",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("powerpoint",$fichier_nom) || controle_fichier("oopresent",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007",$fichier_nom) || controle_fichier("powerpoint2007t",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007s",$fichier_nom) || controle_fichier("powerpoint2007am",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007tm",$fichier_nom) || controle_fichier("powerpoint2007sm",$fichier_nom)) { return "presentation"; }