Vous êtes sur la page 1sur 32

Rapport de stage à Intuilab

Du 19mai au 28juin

Année 2008-2009
BTS - IRIS
Page 2 sur 32
SOMMAIRE
REMERCIEMENTS.............................................................................................................................4

INTRODUCTION................................................................................................................................5

I INTUILAB.............................................................................................................................................5
1.1.1 INTRODUCTION............................................................................................................................5
1.1 RAISON SOCIAL, STATUT JURIDIQUE ET ACTIONNARIAT............................................................6
1.2 SOCIÉTÉS APPARENTÉES.................................................................................................................6
1.3 ACTIVITÉS........................................................................................................................................6
1.4 MARCHÉ ET CHIFFRE D'AFFAIRES..................................................................................................6
1.5 CONCURRENCE................................................................................................................................7
1.6 ORGANISATION................................................................................................................................7
1.7 RESSOURCES HUMAINES..................................................................................................................7
1.8 RECHERCHE ET DÉVELOPPEMENT..................................................................................................8
1.9 SYSTÈME DE PRODUCTION..............................................................................................................8
1.10 LOGICIELLES DE DÉVELOPPEMENTS............................................................................................8
1.11 POLITIQUE DE SOUS-TRAITANCE ET D'ACHAT..............................................................................9
1.12 DIRECTION DE L’ENTREPRISE INTUILAB......................................................................................9
1.12.1 DIRECTION GÉNÉRALE.................................................................................................................9
1.12.2 DIRECTION TECHNIQUE................................................................................................................9
1.12.4 DIRECTEUR COMMERCIAL..........................................................................................................10
1.13 LES MÉTIERS DU TECHNICIEN AU SEIN DE L’ENTREPRISE INTUILAB........................................10
1.13.1 CONCEPTEUR IHM.....................................................................................................................10
1.13.2 CHEF DE PROJET.........................................................................................................................10
1.13.3 GRAPHISTE.................................................................................................................................10
1.13.4 ERGONOME IHM........................................................................................................................10
1.13.5 TECHNICIEN COMMERCIAL........................................................................................................11
1.14 FORMATION DES CONCEPTEURS IHM........................................................................................11
1.15 PROJET ACTUELLE......................................................................................................................11

2 OBJECTIFS DE LA MISSION TECHNIQUE.............................................................................12

2.1 SUJET DE STAGE............................................................................................................................12


2.4 MOYENS MIS À DISPOSITION DU STAGIAIRE.................................................................................12
2.5 PLANIFICATION DU PROJET...........................................................................................................13

3 RÉALISATION DU PROJET........................................................................................................13

3.1 MODIFICATION DU TWIKI............................................................................................................13


3.1.1 QU’EST-CE QUE LE TWIKI............................................................................................................13
3.1.2 LES GRANDES FONCTIONNALITÉS DU TWIKI................................................................................13
3.2 GESTION DU TWIKI.......................................................................................................................14
3.2.1 CONVERSION/FINALISATION DES PAGES DU TWIKI......................................................................14
3.2.2 PARENTAGE DES GUIDES............................................................................................................16
3.2.3 MODIFICATION DE LA SIDE BAR..................................................................................................17
3.2.4 CRÉATION D’UN SCRIPT DE MULTI-UPLOAD.................................................................................18
3.3 L’INTRANET...................................................................................................................................19
3.4 QU'EST CE QUE PERL ?................................................................................................................19

Page 3 sur 32
3.5 UTILISATION DU LOGICIEL PUTTY....................................................................................20

4 CONCLUSION................................................................................................................................21

5 GLOSSAIRE....................................................................................................................................22

5.1 BALISES JAVASCRIPT....................................................................................................................24


5.2 BALISES CGI.................................................................................................................................24
5.3 BALISES PERL..............................................................................................................................24

6 BIBLIOGRAPHIE..........................................................................................................................25

7 ANNEXES........................................................................................................................................25

7.1 PROGRAMME MULTI-UPLOAD.......................................................................................................25


7.2 TRAITEMENT DE LA FONCTION ATTACH......................................................................................26
7.3 PROGRAMME PERL DE GESTION DES UPLOADS..........................................................................26
7.4 PROGRAMME DE LA SIDEBAR.......................................................................................................30

Page 4 sur 32
Remerciements
Je tiens à remercier l’ensemble de l’équipe d’Intuilab pour son soutien pendant ce stage.
Ceux-ci ont bien voulu répondre à toutes mes questions, et particulièrement Christophe Mertz
qui m’a aidé et encadré pendant toute la durée du stage.

Page 5 sur 32
Introduction
Ce rapport de stage constitue une trace écrite des connaissances pratiques obtenues.
Ce rapport se divisera en trois parties : tout d'abord, je vous présenterai l’entreprise Intuilab,
ensuite une brève présentation de l’intranet et enfin les différents travaux que j'ai réalisés.

Dans le cadre de ma préparation aux BTS IRIS, j'ai été amené à effectuer ce stage. Il a pour
but de mettre en pratique les connaissances théoriques offertes par cette année d’études, mais
aussi d'avoir une approche du monde du travail et de son fonctionnement.
Du 19 mai au 28 juin, j’ai effectué un stage au sein de l’entreprise Intuilab (située à Labège).

Plus largement, ce stage a été l’opportunité pour moi d’appréhender les métiers de
l’informatique tel que développeur, chef de projet et plus directement le métier de technicien
réseaux.

Au-delà d’enrichir mes connaissances dans le domaine de l’informatique, ce stage m’a permis
de comprendre le rôle et l’importance du technicien réseaux au sein d’une entreprise.

A travers ce stage j’ai pu voir comment une entreprise, dans le secteur innovant des IHM,
réagissait face à la concurrence.

L’élaboration de ce rapport a pour principale source les différents enseignements tirés de la


pratique journalière des tâches auxquelles j’ai été affecté. Enfin, les nombreux entretiens que
j’ai pu avoir avec les employés des différents services de la société, m’ont permis de donner
une cohérence à ce rapport.

En vue de rendre compte de manière fidèle et analytique des six semaines passées au sein de
la société Intuilab, il apparaît logique de présenter à titre préalable l’environnement
économique du stage, à savoir le secteur de l’informatique plus précisément celui des IHM.
Enfin, il sera précisé les différentes missions et tâches que j’ai pu effectuer au sein du service,
et les nombreux apports que j’ai pu en tirer.

I Intuilab
1.1.1 Introduction
Intuilab est une entreprise travaillant dans le domaine de l’Interaction Homme Machine
(IHM). Sa spécialité, la conception et la réalisation d’interfaces homme machine est basée sur
une méthode faisant intervenir plusieurs concepts. Tout d’abord qui va utiliser l’interface et
quels sont les besoins de cet utilisateur? En effet une interface doit être avant tout utilisable ;
sans cela, elle n’a pas raison d’être.
Ensuite quelle technologie va être utilisée, comme support de l’interface ? Est-ce un PDA, un
écran tactile, un téléphone portable ? Quelles modalités vont être utilisées : est-ce la voix (je
parle à l’interface), le geste (j’interagis sur l’interface avec le doigt) ?
Pour réaliser ceci, le contexte socioprofessionnel d’Intuilab est pluridisciplinaire, et peut faire
intervenir toute sorte d’acteurs, comme les programmeurs, les ergonomes, les graphistes, les
concepteurs… Chacun apportant ses compétences afin de concevoir et de réaliser l’interface
la plus adaptée aux besoins des utilisateurs. Il faut aussi préciser que tous ces acteurs
n’interviennent pas, sur tous les projets.

Page 6 sur 32
1.1 Raison social, statut juridique et actionnariat
Avec prêt de 22 employés, Intuilab est spécialisé dans la conception et le développement
d’interactivité et multimodales (tactile, vocale, etc.). Le capital propre de cette société s’élève
a 400K€. Elle est basée sur la recherche et le développement(R&D) des IHMs et sur
l’interaction et l'expérience d’utilisateur dans le domaine professionnel et grand public.

Les trois principaux fondateurs d’Intuilab étaient Laurent Karsenty, Stephane Chatty, Damien
Figarol. Ils possédaient la majorité de la société avec près de 60% des actions. Aujourd’hui
après le départ de Damien Figarol les parts ont été redistribuées aux employés de la société.

1.2 Sociétés Apparentées.


La maison mère d’Intuilab se situe à Labège et n’a pas d’autres bâtiments, car la société est
récente même si elle est en pleine évolution. Les sociétés apparentées à Intuilab sont
principalement le CENA (Centre d’Etude National de l’Aviation). Intuilab travaille en étroite
collaboration avec le CENA de plus les deux principaux fondateurs de la société Intuilab
proviennent du CENA (aujourd’hui appelé DGAC).

1.3 Activités
Intuilab est une Société Anonyme spécialisée dans la conception et le développement
d’Interface Homme Machine intuitives (IHM) depuis Juin 2002.
Avec 22 salariés, Intuilab à une croissance de son chiffre d’affaires de plus de 50% en 2006,
elle est le leader dans le domaine de la conception d’IHM interactives, intuitives et
innovantes.

1.4 Marché et chiffre d'affaires.


Le Marché d’Intuilab depuis sa création :
Navigation Aérienne nne Aéronautique Automobile et Transport

Défense et sécurité Télécoms Autres

Startups

R&D Membre de : Partenariats

On peut voir qu’Intuilab est une entreprise polyvalente car elle opère dans de nombreux

Page 7 sur 32
domaines : défense, aéronautique, navigation aérienne… Elle n’hésite pas a collaborer avec
de bien plus grande entreprise tel que : Thalès, Airbus,…
Depuis près de 6ans, Intuilab n’a cessé de s’agrandir, aujourd’hui elle compte une vingtaine
d’employés et elle a un chiffre d’affaire qui dépasse les 1 million d’euros. Elle prévoit un
chiffre d’affaire de près de 2 millions d’euros pour l’année 2008

1.5 Concurrence

Les principaux concurrents d’Intuilab sont étrangers et ils sont les leaders et ont le monopole
pour le produit IntuiFace (principal projet actuel voir page12) tel que : Microsoft, Immersion
(même s’ils sont plutôt orientés Hardware contrairement à Intuilab : Software), Visyo.
On peut en trouver d’autres mais pour l’instant ce ne sont pas de réel concurrent a Intuilab. Ils
pourraient même devenir des partenaires.

1.6 Organisation

1.7 Ressources humaines


Intuilab compte près de vingt-deux employés pour la plupart ayant suivie une formation de
Master IHM, ceux-ci ont en plus une fonction de chef de projet c'est-à-dire qu’ils peuvent tout
aussi bien diriger un projet. L’entreprise possède une graphiste, une ergonome. Régulièrement
les stagiaires viennent, pour la plupart du master IHM. Lors de mon stage il y avait prés de six
stagiaires.

Page 8 sur 32
1.8 Recherche et développement.
Aujourd’hui Intuilab est principalement orienté dans la R&D (Recherche & Développement),
de nombreux sous projet sont consacrés a la recherche telle que l’utilisation de la ZCam
(WebCam 3D) interactive,…

1.9 Système de production


Lorsqu’il y a un projet en cours, la société respecte le cycle de vie en V mais elle a aussi un
cycle bien précis qu’elle appelle IntuiSign.
IntuiSign aboutit à la constitution d'un dossier de conception détaillée (document +
maquette/prototype) permettant au client ou à Intuilab de développer l'application finale selon
ses processus de développement traditionnels.

• Datalyse : collecte et analyse de données (activité des utilisateurs, systèmes existants,


possibilités technologiques, ...) permettant de constituer la matière première pour la
conception (besoins, points clés de conception, profils utilisateurs, scénarios d'usage...).
• Maquettage : exploration, illustration et comparaison/évaluation de solutions d'interface à
l'aide de maquettes papiers, croquis ou storyboard ; définition de la composition de l'interface,
de la présentation des éléments graphiques et des dispositifs/techniques d'interaction.
• Prototypage : implémentation avec IntuiKit des solutions maquettées ; le prototype
interactif permet d'affiner et d'illustrer les solutions, et d'évaluer en situation ce que sera le
futur système. Cette phase comporte potentiellement plusieurs méthodes itératives qui
permettent un passage progressif vers une première version du produit.

1.10 Logicielles de développements


Le principal logiciel de développement, utilisé par l’entreprise est IntuiKit, il a été développé
par le fondateur d’Intuilab ainsi que mon tuteur de stage. Il permet de développer différents
langages tel que le PERL, JavaScript.

IntuiKit : IntuiKit est la plate-forme de prototypage et de développement multi-framework


d’Intuilab. Elle permet de réaliser des IHM’s (prototype et application finale) riches
(graphisme, interactivité, etc.) et multimodales (tactile, vocale, etc.).
Elle rassemble l'ensemble des technologies et méthodes de conception d'interfaces visuelles,
multimodales et mobiles, et ouvre ainsi de nouveaux champs d'innovation aux clients. IntuiKit

Page 9 sur 32
supporte le cycle de développement d'IHM du prototype initial à l'intégration dans vos
applications qu'elles soient des simulateurs existants ou des systèmes opérationnels,
garantissant ainsi une réduction importante des coûts.
Suivant les objectifs de la prestation ou les besoins technologiques des clients, ils utilisent
une des trois déclinaisons possibles de la plateforme IntuiKit selon le framework retenu :
• IntuiKit for WPF : WPF (Windows Presentation Foundation) est le nouveau
framework graphique de Microsoft développé pour .NET dans le cadre de Vista.
• IntuiKit for AIR : AIR (Adobe Integrated Runtime) est le nouveau framework
graphique de Adobe pour le développement de RDA et qui intègre, entre autre, les
technologies Flash et Flex d'Adobe.
• IntuiKit for Perl : Intuilab a assemblé, dès 2003, l'environnement de programmation
Perl (un langage interprété très puissant).

Visual Studio : Utilisé assez rarement ; il peut arriver que lors de projets, et sous la demande
d’un client, les développeurs utilisent un langage spécifique tel que le C++.

1.11 Politique de sous-traitance et d'achat.


Intuilab est une société de développement d’IHM, plutôt orientée en Software (Logiciel) donc
pour la partie hardware de ses produits elle est obligée de passer par un sous traitant. Pour le
projet IntuiFace, son principal fournisseur est la société Panasonic.
Elle a aussi d’autres fournisseurs pour toute la partie hardware : LED, Structure,…

1.12 Direction de l’entreprise Intuilab


Pour les noms voir l’organigramme.

1.12.1 Direction Générale


Vincent Encontre dirige, plus particulièrement à courts et moyens termes,
les opérations de l’entreprise dans le cadre d’une stratégie définie par le Chef d’entreprise et
le conseil d’administration. Il participe à la définition de la stratégie de l’entreprise et il a sous
sa responsabilité une partie des fonctions de l’entreprise.
Il lui est délégué des pouvoirs qui sont strictement définis par le conseil d’administration.

Cependant, sa fonction est articulée autour de deux axes : la direction et la coordination de


toutes les activités de l’entreprise ainsi que la définition et la mise en œuvre de stratégies
d’adaptation, de développement et de modernisation face aux changements.

1.12.2 Direction Technique


Christophe Mertz décide de l'architecture du produit à développer, il peut être assimilé à la
fonction d’ un Architecte logiciel.
Le Chef de Projet sera un "simple" gestionnaire du processus de développement décidé par le
Directeur technique. Mais il devra toujours conserver ses aptitudes d’écoute vis-à-vis de ses
clients et du marché en général.

1.12.4 Directeur Commercial


Le directeur commercial d’Intuilab est un technicien commercial , chargé de développer
l'activité de l’entreprise.
Sa fonction s’articule donc autour de deux axes principaux:
-la stratégie commerciale : il est chargé de vendre les produits tels qu’IntuiFace… il assume
en partie la responsabilité du budget. Il recherche de nouveaux clients pour l'entreprise afin de

Page 10 sur 32
faire rentrer de l'argent. Il négocie avec les centrales d’achat.
-la communication : son rôle est d'établir une relation et une communication entre les clients
et l'usine. Il réunit le maximum d'informations concernant le produit, le circuit de distribution,
la clientèle, la concurrence, le marché, les actions publicitaires antérieures.
Il fait réaliser des études de marché, de notoriété, des études médias afin de déterminer les
meilleurs arguments et les meilleurs supports à utiliser tout en tenant compte du public à
toucher et des caractéristiques du marché actuel.

1.13 Les métiers du technicien au sein de l’entreprise Intuilab


Pour les noms voir l’organigramme.

1.13.1 Concepteur IHM


Il Cela constitue la majeure partie de la société avec près de 15employés (en comptant les
stagiaires) . Pour la majorité, ils ont un niveau BAC +5 et ont suivi une formation de Master
IHM à l’ENAC. En moyenne, ils travaillent en groupe de 5 ou 6 sur les projets.

1.13.2 Chef de projet


Le chef de projet joue le rôle de pivot entre problématiques fonctionnelles et solutions
techniques. De manière générale, il assure la coordination globale d'un projet (coûts, délais,
qualité), depuis sa phase de conception jusqu'à sa réalisation finale. Son rôle étant
particulièrement polyvalent, il doit être capable de comprendre les problématiques globales du
projet et d'en mesurer les impacts (techniques, fonctionnels, organisationnels...), de maîtriser
les aspects contractuels et d'assurer la contingence administrative (rapport, programmation et
animation des comités de pilotage...).

1.13.3 Graphiste
Il gère tout le graphisme des IHM ainsi que le design du site web et les publicités pour les
produits d’Intuilab (photos, cartes de visite,…). Son travail se fait principalement sous Adobe
Photoshop ou sous Adobe Ilustrator.
Il est en lien permanent avec l’ergonome qui définit les règles que va exiger le client. Il va
ensuite adapter son travail et propose une ou plusieurs maquettes au client.

1.13.4 Ergonome IHM


Représenter le point de vue de l'utilisateur final en accompagnant les choix des
informaticiens, graphistes, marketing, etc... Et en apportant une expertise dans le domaine du
facteur humain.
L'ergonome est souvent "l'empêcheur de tourner en rond", il critique, argument à l'appui,
propose des idées ou des solutions nouvelles mais tellement évidentes et simples pour
l'utilisateur final !

1.13.5 Technicien Commercial


Voir Directeur Commerciale Page 10

1.14 Formation des concepteurs IHM


Le Master forme des professionnels de haut niveau spécialistes de la conception et du
développement d'applications interactives, maîtrisant les techniques propres à l’informatique
et celles issues du domaine des facteurs humains.

Page 11 sur 32
Les diplômés du Master sont notamment à même de :

 Gérer le développement "centré sur l'utilisateur" d'un logiciel interactif.


 Définir et faire appliquer des normes de présentation et d'utilisabilité.
 Evaluer l'ergonomie et l'utilisabilité des logiciels.

Les enseignements du Master complètent une formation initiale en informatique et apportent


des compétences spécifiques au domaine :

 Compétences technologiques : maîtrise des techniques et des outils liés aux nouvelles
technologies de l’information et de la communication (NTIC).
 Compétences méthodologiques : méthodes de génie logiciel, gestion du processus de
développement, gestion de projet, dans le contexte du développement de logiciel
interactif.
 Facteurs humains dans l’ingénierie de l’interaction homme machine : ergonomie,
psychologie cognitive, psychologie expérimentale, dans le but d’être capable de
produire des logiciels ergonomiques et d’un haut niveau d’utilisabilité.

1.15 Projet Actuelle


IntuiFace :
-Une surface interactive multitouch et multiutilisateurs, c'est-à-dire un grand écran sur lequel
un ou plusieurs utilisateurs peuvent interagir simultanément avec plusieurs doigts.
-Une grande surface d’affichage utile pour des représentations efficaces.
-Des interactions riches et naturelles exploitant les doigts des deux mains.
-Une plateforme applicative ouverte et communicante permettant de visualiser et manipuler
efficacement en multitouch une grande variété d’informations (symboles, textes, images,
cartes, temps, vidéo, sons, etc.) communicables avec son environnement (RFID, Internet,
SMS, etc.).
-Un meuble design personnalisable aux dimensions variables qui intègre la surface interactive
et de nombreuses possibilités d’interconnexion.

Page 12 sur 32
Les délais que l’on impose pour des projets à Intuilab sont en générale très courts.
Il peut arriver que des petits projets durent entre 10 à 15 jours !

2 Objectifs de la mission technique


2.1 Sujet de stage
Conversion de l'Intranet en TWiki
Conversion des pages de l’ancien Intranet
Passage en galeries TWiki de tous les dépôts d'images de l'Intranet
Parentage des guides à la liste de guides
Attachement de fichiers multiples
Implémenter la base documentaire sur le TWiki
Permettre la mise en place d'une barre de menu dédiée Intuilab et qui ne montrerait
plus tous les topics (sujets) car ils sont trop nombreux...

2.4 Moyens mis à disposition du stagiaire


- Un badge individuel pour entrer/sortir, par contre pas de clé.
- Ordinateur portable
- Guides sur le WIKI
- Fournitures dans placard
- Livre : voir bibliographie (Page 25).
- Accès a l’Intranet ainsi que les droits d’exécution, de lecture, d’écriture.

2.5 Planification du projet

Page 13 sur 32
19mai 26mai 30juin
Découverte Conversion de l’intranet Parentage de la liste Conversion de
du TWiki des guides l’intranet

2juin 9juin 13juin


Attachement de fichiers multiples
Apprentissage du PERL

16juin 23juin 28juin


Attachement de fichiers multiples Création d’une galerie TWiki
Création de la Side Bar Adaptation de la Side bar au TWiki

3 Réalisation du projet
3.1 Modification du TWiki
3.1.1 Qu’est-ce que le TWiki
TWiki écrit en Perl 5, utilise un nombre de commandes Shell, et exige RCS (Revision Control
System), un logiciel libre GNU paquet. TWiki est développé dans une base Linux / Apache
environnement. Il peut être utilisé comme un espace de développement, système
d'administration de documents ou système d'administration de personnel.
Le principe du wiki s'utilise aussi bien sur un Intranet que sur l'Internet (Exemple :
wikipedia), et permet de créer un contenu Web de manière collaborative et cela par le biais
d'un navigateur web. Les utilisateurs n'ont pas besoin de connaissances techniques en
informatique pour créer des pages web. Les développeurs peuvent étendre le contenu et les
fonctionnalités de TWiki avec diverses extensions (plugins).
TWiki est composé de scripts cgi-bin écrits en Perl. Les informations contenues dans TWiki
sont stockées dans des fichiers texte et sont mis en forme à la volée au format HTML.
TWiki est utilisé dans de grandes entreprises comme SAP, British Telecom, Yahoo!, Nokia
ou Disney mais aussi au CERN.
TWiki est un moteur de wiki, c'est-à-dire un logiciel de gestion de pages web qui permet aux
lecteurs d'être aussi des rédacteurs. Chacun des usagers de ce site peut modifier, corriger,
compléter, etc. les pages. L'inscription est libre mais tous les espaces ne sont pas accessibles
en lecture et écriture. Il est particulièrement intéressant pour mettre en place des espaces de
travail en commun. Il est puissant, sûr et simple d'utilisation. Il est utilisé par des
professionnels et des communautés afin de constituer des groupes de travail ou des bases de
connaissances.

3.1.2 Les grandes fonctionnalités du TWiki


- Accès depuis n'importe quel navigateur web
- Édition de lien en un clic
- Formatage du texte

Page 14 sur 32
- Zones web spécifiques à un groupe collaboratif
- Recherche
- Notification des changements par mail
- Téléchargement de fichiers et d'images via un browser
- Gestion des accès en lecture/écriture par utilisateur et groupe d'utilisateurs
- Utilisation de variables
- Ajout simple de fonctionnalités à l'aide de plugins :
- Editeur WYSIWYG (tel affichage, résultat) abréviation anglaise.
- Création de graphes
- Accès aux données en base
- Ils permettent à plusieurs individus de travailler sur un même document ;
- Ils fournissent une chaîne de publication (workflow) offrant par exemple la possibilité de
publier (mettre en ligne le contenu) des documents ;
- Ils permettent de séparer les opérations de gestion de la forme et du contenu ;
- Ils permettent de structurer le contenu (utilisation de FAQ, de document, de blog, forum de
discussion, etc.) ;
- Certains SGC incluent la gestion de versions

3.2 Gestion du TWiki.


 Finalisation de pages déjà converties.
 Conversion de pages anciennes.
 Attachement de fichiers multiples.
 Passage en galeries TWiki de tous les dépôts d'images de l'intranet.
 Parentage des guides à la liste de guides.
 Implémenter la base documentaire sur le TWiki.

3.2.1 Conversion/Finalisation des pages du TWiki


Dans le TWiki on peut construire des pages à partir d’une fonction « edit » cette même
fonction edit qui est en fait un éditeur WYSIWYG (tel affichage, résultat) ; dedans on peut
implanter du texte ou encore différents langages qui sont pris en charge tel que html, Java
Script. Mon rôle était de convertir les balises html en TWiki (Exemple : convertir un titre de
niveau 1 « <h1> »).

Grace à la documentation du TWiki j’ai pu retrouver les différentes balises du TWiki :

Page 15 sur 32
Ensuite, dans la documentation du TWiki on peut trouver de nombreuses variables qui
permettent à l’utilisateur de simplifier certains accès tel que la variable %TOC% vue ci-
dessus qui permet a l’utilisateur de créer un sommaire.

Page 16 sur 32
Ces variables sont très utiles !

3.2.2 Parentage des guides.


Dans le TWiki il y a dans la bar des menu un lien qui envoie vers les guides qui permettent à
l’utilisateur d’apprendre à mieux se servir du TWiki ou d’autre mode d’emploie…
Dans la principale partie de ces guides leur répertoire ou parentage (pour le TWiki) n’était pas
correct tel que :

On peut voir que le GuideUtilisateurIntranet (voir ci-dessus) est un fils de VieWeb mais on
voudrait faire en sorte que ce guide fasse partis de LaListeDesGuides.

Pour ceci on a une fonction spéciale au TWiki qui permet de modifier ces informations :
More topic actions nous amène vers une page qui permet d’éditer toutes sortent
d’informations (renommage du Topic, déplacement,…)

On sélectionne ainsi le nouveau parent du topic.

3.2.3 Modification de la Side Bar.


Dans le TWiki on pouvait voir une Side Bar permettant aux utilisateurs de mieux naviguer
dans le TWiki :

Très peu pratique puisque le nombre de « webs » étant déjà considérable


et continuait à augmenter. Donc pour simplifier cette accesseur et le
rendre plus lisible pour les utilisateurs, j’ai dû utiliser un plugin du TWiki
qui s’appelle TwistyPlugin :
il s’utilise dans le TWiki sous la forme :
%TWISTY{showlink="Montrer..." hidelink="Cacher"
remember="on"}%
Mon texte
%ENDTWISTY%
Showlink : Lorsque l’on cache le contenu cela affiche le texte que l’on

Page 17 sur 32
souhaite ici « Show... ».
HideLink : Lorsque l’on montre le contenu cela affiche le texte que l’on souhaite ici « Hide ».
Remember : C’est une fonction qui permet de faire en sorte qu’à la prochaine utilisation le
navigateur se souvienne si on avait caché ou montré le contenu. Cette fonction mémoriser
fonctionne grâce à l’aide d’un cookie.

Ensuite, pour afficher le menu de la même forme que celui-ci, comme il n’y a pas de variable
dans le TWiki, j’ai du à l’aide du logiciel PuTTY retrouver le templates (kit graphique)
correspondant à la sidebar.
J’ai donc utilisé la commande UNIX :
find ~ -type f -name ”*side*bar*“ -exec cat {}\;

Explication :
« find » : commande UNIX permettant de chercher
«  ~ » : Applique la recherche à partir du répertoire courant.
« -type f » : Applique la recherche seulement sur les fichiers
« -name ”*side*bar*“ » : Applique la recherche sur un nom comprenant side bar
« -exec » : Exécute une autre commande à la suite
«  cat » : Affiche le résultat de la recherche.

Le résultat obtenu :

%META:TOPICINFO{author="TWikiContributor" date="1168738857" format="1.1"


version="3"}%

* *%MAKETEXT{"Webs"}%*

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\"%SCRIPTURLPATH{"view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"}%

Pour faire en sorte de créer une liste comme celle à côter j’ai dû créer
plusieurs WEBLIST en remplaçant la variable $qname par la liste des
topic que je souhaitais.
Voir le code fournis en annexe (page 30 )

Page 18 sur 32
3.2.4 Création d’un script de Multi-upload
Dans le TWiki il existe une façon de « uploader » : mettre des fichiers sur le réseau. Mais le
principal problème est lors de l’upload de plusieurs fichiers, Exemple : photos, documents,…
Ceci peut prendre beaucoup de temps pour l’utilisateur.
Donc j’ai dû créer un script permettant à l’utilisateur d’uploader plusieurs fichier en même
temps. Ce script devait être écrit en html et/ou javascript le php n’étant accepté sur le TWiki.
J’ai donc créé un fichier html voir annexe (page 30) dans ce fichier html j’ai dû implémenter
du Java Script avec pour fonction principale de créer une nouvelle balise d’upload : <input
type=“file“ name=“filepath[]“ class=“twikiInputField“> et une balise suppression de la
dernière balise : <input type=“bouton“ class=“twikiInputField“>. J’ai dû respecter les classes
ainsi que les noms que m’imposait le TWiki car la mise en forme n’était pas la même.
Les explications des balises Java Script ce trouve à la page 24.

Modification du programme PERL  :


Dans le programme Java Script j’ai inclus un compteur de balises input qui permet de savoir
combien de fichier on a chargé. On enregistre cette variable pour la transféré vers le
programme PERL. J’ai pensé que la méthode la plus simple était de écrire dans un fichier la
valeur de cette variable puis de la lire en PERL. (Voir code) On aurait aussi pu utiliser un
cookie mais cette méthode était plus compliqué et revient au même.

Ensuite on doit implémenter une boucle while qui permettra de cahrgé un fichier tant qu’on ne
dépasse pas le nombre d’input (Parcourir.).

Par manque de temps je n’ai pas pu appliquer mon script.

3.3 L’Intranet
Un intranet est un réseau informatique utilisé à l'intérieur d'une entreprise ou de toute autre
entité organisationnelle utilisant les techniques de communication d'Internet (IP, serveurs
HTTP). Le serveur de la société Intuilab est un serveur sur Mandriva. La taille totale du site
http://intranet.intuilab.com fait près de 9Go.

Page 19 sur 32
3.4 Qu'est ce que PERL ?

P.E.R.L. signifie Practical Extraction and Report Language « langage pratique d'extraction et
d'édition ».
Créé en 1986 par Larry Wall (ingénieur système), au départ pour gérer un système de
« News »
entre deux réseaux.
Il s’agit :
▪ Un langage de programmation
▪ Un logiciel gratuit (que l'on peut se procurer sur Internet notamment)
▪ Un langage interprété :
- pas de compilation
- moins rapide qu'un programme compilé
- chaque « script » nécessite d'avoir l'interpréteur Perl sur la machine pour s'exécuter.
Pourquoi Perl est devenu populaire :
▪ Portabilité : Perl existe sur la plupart des plates-formes aujourd'hui (Unix, VMS, Windows,
Mac, Amiga, Atari ...)
▪ Gratuité : disponible sur Internet
▪ Simplicité : Quelques commandes permettent de faire ce qu'un programme de 500 lignes en
C ou en Pascal.
▪ Robustesse : Pas d'allocation mémoire à manipuler, chaînes, piles, noms de variables
illimités...

3.5 Utilisation du logiciel PuTTY

Page 20 sur 32
4 Conclusion
Le WIKI, clé de voûte de l’ensemble est un espace commun qui fait office de base de
connaissance.
Des espaces pour chacun qui doivent être privilégiés pour enregistrer tous les résultats des :
- Suivi
- Réunion hebdomadaire de ses tâches effectuées.
- Le travail réalisé
- Ce qu’il reste à faire

Le stage m’a appris sur le monde de l’IHM.


J’ai eu la possibilité de me familiariser avec un milieu novateur.
J’ai pu travailler sur des styles de projet très variés, tels que : le codage (HTML, JavaScript,
PERL), la maintenance du TWiki,…

Au-delà d’enrichir mes connaissances dans le domaine de l’informatique, ce stage m’a permis
de comprendre le rôle et l’importance qu’à un technicien réseaux au sein d’un entreprise.

Plus largement, ce stage a été l’opportunité pour moi d’appréhender les métiers de
l’informatique tel que développeur, chef de projet et plus directement le métier de technicien
réseaux.

Page 21 sur 32
5 Glossaire
-A-
AIR : Adobe Integrated Runtime, est un projet de lecteur universel RIA de la société Adobe
Systems, basé sur le framework Flex, qui unifie notamment les moteurs de visualisation des
formats PDF (Acrobat) et SWF (Flash).

-F-
Framework : un framework est un espace de travail modulaire. C'est un ensemble de
bibliothèques, d'outils et de conventions permettant le développement d'applications. Il fournit
suffisamment de briques logicielles et impose suffisamment de rigueur pour pouvoir produire
une application aboutie et facile à maintenir. Ces composants sont organisés pour être utilisés
en interaction les uns avec les autres

-I-
IHM : Interaction Homme Machine. Les processus, dialogues et actions qu’un utilisateur
emploie pour interagir avec un système.

-R-
R&D : Recherche et Développement (notée R & D) Les entreprises mènent des activités de
R&D afin d’améliorer ses capacités de production, la qualité de sa production, ou afin de
créer de nouveaux biens et services.
On distingue trois grandes composantes de la R&D :
 La recherche fondamentale ;
 La recherche appliquée ;
 Le développement expérimental.
RDA : Les Rich Desktop Application (RDA) sont des applications qui se lancent à partir d'un
navigateur web mais qui s'exécutent sur une machine virtuelle extérieure au Web.

-S-
SSH : Secure Shell (SSH) est à la fois un programme informatique et un protocole de
communication sécurisé. Le protocole de connexion impose un échange de clés de
chiffrement en début de connexion. Par la suite toutes les trames sont chiffrées. Il devient
donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur. Le protocole SSH a été
conçu avec l'objectif de remplacer les différents programmes rlogin, Telnet et rsh.

Page 22 sur 32
-T-
TELNET : TErminaL NETwork est un protocole réseau utilisé sur tout réseau supportant le
protocole TCP/IP. Le but du protocole Telnet est de fournir un moyen de communication très
généraliste, bidirectionnel et orienté octet.

-U-
Upload : On distingue le téléchargement depuis un ordinateur distant (téléchargement
descendant ou download), et le téléchargement vers un ordinateur distant (téléchargement
montant, télé versement ou upload). En faite Upload est l’inverse de téléchargement.

-W-
WYSIWYG : est l'acronyme de la locution anglaise “What you see is what you get“,
signifiant littéralement en français « ce que vous voyez est ce que vous obtenez » ou de façon
plus concise « tel affichage, tel résultat ». L'acronyme est couramment utilisé en informatique
pour désigner les interfaces utilisateur graphiques permettant de composer visuellement le
résultat voulu, typiquement pour un logiciel de mise en page, un traitement de texte ou
d'image. L'acronyme désigne, de fait, une interface « intuitive » : l'utilisateur voit directement
à l'écran à quoi ressemblera le résultat final (imprimé).

WorkFlow : On appelle « workflow » (traduisez littéralement « flux de travail ») la


modélisation et la gestion informatique de l'ensemble des tâches à accomplir et des différents
acteurs impliqués dans la réalisation d'un processus métier. Le terme de « workflow » pourrait
donc être traduit en français par « gestion électronique des processus métier ». De façon plus
pratique, le workflow décrit le circuit de validation, les tâches à accomplir entre les différents
acteurs d'un processus, les délais, les modes de validation, et fournit à chacun des acteurs les
informations nécessaires pour la réalisation de sa tâche.

Page 23 sur 32
5.1 Balises JavaScript
inp = document.createElement("input"); : Création d’un nouvelle élément HTML de type
input.
inp.type = "file"; : Création d’un attribut type et qui s’appellera file.
inp.name = "filepath[]"; : Création d’un attribut name (sera un tableau pour éviter qu’il est tous
le même nom)et qui s’appellera filepath.
inp.class = "twikiInputField"; Création d’un attribut class et qui s’appellera twikiInputField.
sup = document.createElement("input"); : Création d’une nouvelle élément HTML de type
input qui s’appellera sup.
sup.type = "button"; : La balise sera un bouton.
sup.value = "Supprimer"; : Elle s’appellera supprimer.
sup.onclick = function() : Lorsque l’on clique sur le bouton Supprimer ci-dessus cela supprime
la balise file.

5.2 Balises CGI


On peut voir que ce script cgi nous renvois vers un fichier qui s’appelle Upload et un autre
run use TWiki::UI::Upload; use TWiki::UI::run. On ce sert des commandes UNIX
pour retrouver le fichier Upload : c’est celui qui nous intéresse car si on veut modifier le script
pour qu’il autorise plusieurs upload. On ce sert de la commande find voir ci-dessous.
find ~ -type f -name ”Upload.pm“ -exec cat {}\;
L’extension *.pm signifie que c’est un programme PERL. Les extensions *.pm signifie que
c’est un package (correspondrait a une classe en langage objet) et les *.pl signifie que c’est un
exécutable.

5.3 Balises PERL


Perl est un langage de programmation reprenant des fonctionnalités du langage C et des
langages de scripts sed, awk et Shell (sh).
print : affiche sur la sortie standard (écran).
$variable : variable du nom ici de variable contrairement au C les variable n’ont pas besoin
d’être déclaré.
structures : elles sont les même que en C excepté la switch case qui n’existe pas en perl et
on peut trouver différente variantes en perl (if… elsif…).
my $s = 'toto' ; : variable scalaire à portée lexicale (portée locale my qui n’est pas dit dans les
autre langages). (Portée lexicale : int, char, (booléen n’existant pas en perl)).
local $level += 1; : variable scalaire avec une valeur à portée dynamique

Page 24 sur 32
open, close : ouverture de fichier équivaudrait a fopen en C même si pour le PERL les
vérifications qui se font en C ne ce font pas en perl (feof, fclose,…)
@mon_tableau{01,..,10} : Créer un tableau avec des valeurs allant de 01 à 10. Si on veut
afficher les valeurs de ce tableau on peut faire print @mon_tableau[0].
sub name {…} : Création d’une fonction qui s’appellera name.

6 Bibliographie

Nom Edition Type Auteur Langue


PERL In a O’REILLY Livre de N.Pat, E.Siev, Anglais
Nushell Programmation S.Sp
Computer O’REILLY Livre de N.Pat, E.Siev, Anglais
Science & Programmation S.Sp
Programming
PERL
PERL O’REILLY Livre de N.Pat, E.Siev, Francais
Introduction Programmation S.Sp
Guide TWiki TWiki Doc. Constructeur … Francais/Anglais

7 Annexes
7.1 Programme multi-upload
<script type='text/javascript'>
var cmpt = 0; Création des variables.
var compteur = 0; compteur : compte le nombre de type
function input_add() input
{
inp = document.createElement("input");

inp.type = "file"; Création d’un nouvelle élément de


inp.name = "filepath[]"; type input et de type file (upload).
inp.class = "twikiInputField"; name : filepath[ ]
lediv = document.createElement("div"); class : twikiInpuField
lediv.id = "fichier"+cmpt;
lediv : Créer une nouvelle balise de
sup = document.createElement("input");
sup.type = "button"; type div.
sup.value = "Supprimer"; sup : Créer un bouton supprimer
sup.name = cmpt; compteur++ : incrémentation du
compteur++; compteur.
window.document.open(compteur.txt);
window.document.write(compteur);
sup.onclick = function()
{
elt = document.getElementById("fichier"+this.name);
elt.parentNode.removeChild(elt);
} Fonction ayant pour rôle de
lab = document.createElement("label"); supprimer une balise input lorsque
lab.appendChild(document.createTextNode("")); l’on clique sur le bouton supprimer.
lediv.appendChild(inp);
compteur- - : décrémentation du
compteur.
Page 25 sur 32
lediv.appendChild(sup);
lediv.appendChild(lab);
document.getElementById("fichiers").appendChild(lediv);
cmpt++;
compteur--; Lorsque l’on clique sur le bouton “Ajouter un
window.document.open(compteur.txt);
window.document.write(compteur); fichier cela appelle la fonction input_add. Les
}
fichier sont envoyer vers %SCRIPTURLPATH{…
<body>
<form name="multiupload" action="%SCRIPTURLPATH{attachs}%/%WEB%/">
<!-- Le fichier attachs.cgi a créer sur la base de attach.cgi -->
<legend>Fichiers</legend>
<input type='button' onclick='input_add()' value='Ajouter un fichier' />

document.getElementById("fichiers").appendChild(lediv);
cmpt++;
}
</script>

</head>
<form name="multiupload" action=" %SCRIPTURLPATH{attachs}%/%WEB%/">
<!-- Le fichier attachs.cgi a créer sur la base de attach.cgi -->
<fieldset id="fichiers">
<legend>Fichiers</legend>
<input type='button' onclick='input_add()' value='Ajouter un fichier' />
</fieldset>
</form>
</body>

7.2 Traitement de la fonction attach.


#!/usr/bin/perl -wT

BEGIN {
# See the 'view' script for a description of what this does
if( $ENV{"SCRIPT_FILENAME"} &&
$ENV{"SCRIPT_FILENAME"} =~ /^(.+)\/[^\/]+$/ ) {
chdir $1;
} Le programme cgi-bin en lui-même ne
unshift @INC, '.'; fait rien a part renvoyer vers un autre
require 'setlib.cfg'; fichier dans le TWiki le fichier attach
}
dans TWiki/UI/Upload et l’exécute.
use TWiki::UI;
use TWiki::UI::Upload;
TWiki::UI::run( \&TWiki::UI::Upload::attach )

7.3 Programme PERL de gestion des uploads.


---++ StaticMethod attach( $session )

# Programme en PERL 5 car certaine chose du genre attach s'ecrive &attach


en Perl4.

=upload= command handler.


This method is designed to be
invoked via the =TWiki::UI::run= method.

Adds the meta-data for an attachment to a toic. Does *not* upload


the attachment itself, just modifies the meta-data.

Page 26 sur 32
=cut

sub attach { # déclaration (appel attach) avec paramètres


# L'instruction « my » réalise une affectation dans des variables locales à
la
# procédure avec les éléments du tableau. Ce type de passage de paramètre
est très efficace car le
# nombre de paramètres n'est pas forcément fixe.

my $session = shift;
my $query = $session->{cgiQuery};
my $webName = $session->{webName};
my $topic = $session->{topicName};
my $fileName = $query->param( 'filename' ) || '';
my $skin = $session->getSkin(); # Le skin courant est remplacé par le
skin de la session en cours. ( getSkin accesseur )

TWiki::UI::checkWebExists( $session, $webName, $topic, 'attach' );

my $tmpl = ''; #initialisation des variables a ' '


my $text = ''; #initialisation des variables a ' '
my $meta = ''; #initialisation des variables a ' '
my $atext = ''; #initialisation des variables a ' '
my $fileUser = ''; #initialisation des variables a ' '
my $isHideChecked = ''; #initialisation des variables a ' '

TWiki::UI::checkMirror( $session, $webName, $topic );

TWiki::UI::checkAccess( $session, $webName, $topic,


'change', $session->{user} );
TWiki::UI::checkTopicExists( $session, $webName, $topic,
'upload files to' );

( $meta, $text ) = $session->{store}->readTopic( $session->{user},


$webName, $topic, undef );
my $args = $meta->get( 'FILEATTACHMENT', $fileName );
$args = {
name => $fileName,
attr => '',
path => '',
comment => ''
} unless( $args );

if ( $args->{attr} =~ /h/o ) {
$isHideChecked = 'checked';
}

# SMELL: why log attach before post is called?


# FIXME: Move down, log only if successful (or with error msg?)
# Attach is a read function, only has potential for a change
if( $TWiki::cfg{Log}{attach} ) {
# write log entry
$session->writeLog( 'attach', $webName.'.'.$topic, $fileName );
}

my $fileWikiUser = '';
if( $fileName ) # SI il le fichier comporte un nom. ( Définie par
l'utilisateur ) ALORS ...

Page 27 sur 32
{
$tmpl = $session->{templates}->readTemplate( 'attachagain', $skin
);
my $u = $session->{users}->findUser( $args->{user} );
$fileWikiUser = $u->webDotWikiName() if $u;
} else {
$tmpl = $session->{templates}->readTemplate( 'attachnew', $skin );
}
if ( $fileName ) {
# Must come after templates have been read
$atext .= $session->{attach}->formatVersions( $webName, $topic, %
$args )
;
}
$tmpl =~ s/%ATTACHTABLE%/$atext/go;
$tmpl =~ s/%FILEUSER%/$fileWikiUser/go;
$session->enterContext( 'can_render_meta', $meta );
$tmpl = $session->handleCommonTags( $tmpl, $webName, $topic );
$tmpl = $session->{renderer}->getRenderedVersion( $tmpl, $webName,
$topic );
$tmpl =~ s/%HIDEFILE%/$isHideChecked/go;
$tmpl =~ s/%FILENAME%/$fileName/go;
$tmpl =~ s/%FILEPATH%/$args->{path}/go;
$args->{comment} = TWiki::entityEncode( $args->{comment} );
$tmpl =~ s/%FILECOMMENT%/$args->{comment}/go;

$session->writeCompletePage( $tmpl );
}

=pod

---++ StaticMethod upload( $session )

=upload= command handler.


This method is designed to be
invoked via the =TWiki::UI::run= method.
CGI parameters, passed in $query:

| =hidefile= | if efined, will not show file in attachment table |


| =filepath= | |
| =filename= | |
| =filecomment= | Comment to associate with file in attachment table |
| =createlink= | if defined, will create a link to file at end of topic |
| =changeproperties= | |

Does the work of uploading a file to a topic. Designed to be useable as


a REST method (it will redirect to the 'view' script unless the
'noredirect'
parameter is specified, in which case it will print a message to
STDOUT, starting with 'OK' on success and 'ERROR' on failure.

=cut

sub upload {
my $session = shift;

my $query = $session->{cgiQuery};
my $webName = $session->{webName};
my $topic = $session->{topicName};

Page 28 sur 32
my $user = $session->{user};

my $hideFile = $query->param( 'hidefile' ) || '';


my $fileComment = $query->param( 'filecomment' ) || '';
my $createLink = $query->param( 'createlink' ) || '';
my $doPropsOnly = $query->param( 'changeproperties' );
my $filePath = $query->param( 'filepath' ) || '';
my $fileName = $query->param( 'filename' ) || '';
if ( $filePath && ! $fileName ) {
$filePath =~ m|([^/\\]*$)|;
$fileName = $1;
}

$fileComment =~ s/\s+/ /go;


$fileComment =~ s/^\s*//o;
$fileComment =~ s/\s*$//o;
$fileName =~ s/\s*$//o;
$filePath =~ s/\s*$//o;

TWiki::UI::checkWebExists( $session, $webName, $topic, 'attach files


to' );
TWiki::UI::checkTopicExists( $session, $webName, $topic, 'attach files
to' )
;
TWiki::UI::checkMirror( $session, $webName, $topic );
TWiki::UI::checkAccess( $session, $webName, $topic,
'change', $user );

my ( $fileSize, $fileDate, $tmpFileName );

my $stream;
# SMELL: Does $stream get closed in all throws?
$stream = $query->upload( 'filepath' ) unless ( $doPropsOnly );
my $origName = $fileName;

unless( $doPropsOnly ) {
( $fileName, $origName ) =
TWiki::Sandbox::sanitizeAttachmentName( $fileName );

# check if upload has non zero size


if( $stream ) {
my @stats = stat $stream;
$fileSize = $stats[7];
$fileDate = $stats[9];
}

unless( $fileSize && $fileName ) {


#OopsExecption ( script d'erreur géré par le TWiki )
throw TWiki::OopsException( 'attention',
def => 'zero_size_upload',
web => $webName,
topic => $topic,
params => ($filePath || '""') );
}

my $maxSize = $session->{prefs}->getPreferencesValue(
'ATTACHFILESIZELIM
IT' );
$maxSize = 0 unless ( $maxSize =~ /([0-9]+)/o );

Page 29 sur 32
if( $maxSize && $fileSize > $maxSize * 1024 ) { # SI taille maximum
et la taille du fichier sont superieur a la taille max fois 1024 ALORS ....
# OopsExecption ( script d'erreur géré par le
TWiki )
throw TWiki::OopsException( 'attention',
def => 'oversized_upload',
web => $webName,
topic => $topic,
params => [ $fileName, $maxSize ]
);
}
}

try {
$session->{store}->saveAttachment(
$webName, $topic, $fileName, $user,
{ dontlog => !$TWiki::cfg{Log}{upload},
comment => $fileComment,
hide => $hideFile,
createlink => $createLink,
stream => $stream,
filepath => $filePath,
filesize => $fileSize,
filedate => $fileDate,
} );
} catch Error::Simple with {
#OopsExecption ( script d'erreur géré par le TWiki )
throw TWiki::OopsException( 'attention',
def => 'save_error',
web => $webName,
topic => $topic,
params => shift->{-text} );
};

close( $stream ) if $stream;

if( $fileName eq $origName ) { # SI le nom du fichier est equivalent a


sont nom d'origine ALORS ....
$session->redirect( $session->getScriptUrl( 1, 'view', $webName,
$topic
));
} else {
#OopsExecption ( script d'erreur géré par le TWiki )
throw TWiki::OopsException( 'attention',
def => 'upload_name_changed',
web => $webName,
topic => $topic,
params => [ $origName, $fileName ] );
}

# generate a message useful for those calling this script from the
command l
ine
my $message = ( $doPropsOnly ) ?
'properties changed' : "$fileName uploaded";

print 'OK ',$message,"\n";


}

Page 30 sur 32
1;

7.4 Programme de la SideBar


%MAKETEXT{"Webs"}%
Créer le texte Web’s en haut de la liste ; devant on doit
mettre la variable MAKETEXT car elle a une mise en forme
bien particulière.

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Capitalisation"}%
%WEBLIST{…}% Variable du TWiki permettant de créer une
liste de tous les Web’s référencé dans le TWiki. Ici on créer
une liste avec juste Capitalisation a l’intérieur MAKETEXT
car elle a une mise en forme bien particulière.

%TWISTY{showlink="Afficher" hidelink="Cacher" remember="on"}%


%WEBLIST{" * <span style=\"white-space:nowrap\"><a
href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Capitalisation/ATC,
Capitalisation/Avionique, Capitalisation/Composants, Capitalisation/Flex,
Capitalisation/IntuiKit, Capitalisation/IntuiKit/IntuiKitJava,
Capitalisation/MaterielPourInteraction, Capitalisation/WPF,
Capitalisation/IntuiFace"}%
%ENDTWISTY% La variable TWISTY est une variable qui vient d’un plugin
que j’ai dû utiliser sur le TWiki. Celle-ci a pour rôle de
cacher ou afficher les Web : ATC, Avionique, Composants,…
On doit afficher l’arborescence des webs depuis leur
WebHome.
MAKETEXT car elle a une mise en forme bien particulière.

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=;\"\" width=\"16\" height=\"16\"
style=\"background-color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker
%\" />&nbsp;$indentedname</a></span>"webs="Main"}%

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Projets"}%

Page 31 sur 32
%TWISTY{showlink="Afficher" hidelink="Cacher" remember="on"}%
%WEBLIST{" * <span style=\"white-space:nowrap\"><a
href=\“%SCRIPTURLPATH{“view“}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Projets/AFplanning08, Projets/CockpitIPhone,
Projets/DCNS, Projets/DEFincendie08, Projets/FTEmode07, Projets/Goojet,
Projets/Immersive, Projets/Istar, Projets/MAMMI, Projets/Meteo08,
Projets/OrangeRCP, Projets/RenaultELMobile08, Projets/RenaultTendance,
Projets/ShareIt, Projets/SmithsPB08, Projets/TADecs, Projets/TADsimu,
Projets/Teliris, Projets/ThalesECDP08, Projets/ThalesPagesSysteme"}%
%ENDTWISTY%

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Sanbox"}%

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="TWiki"}%

%WEBLIST{" * <span style=\"white-space:nowrap\"><a


href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Vie"}%

%TWISTY{showlink="Afficher" hidelink="Cacher" remember="on"}%


%WEBLIST{" * <span style=\"white-space:nowrap\"><a
href=\»%SCRIPTURLPATH{«view"}%/$name/%HOMETOPIC%\"><img src=\"%ICONURL{web-
bg}%\" border=\"0\" alt=\"\" width=\"16\" height=\"16\" style=\"background-
color:%$markerVAR{\"WEBBGCOLOR\" web=$qname}$marker%\" />&nbsp;
$indentedname</a></span>"webs="Vie/Stages, Vie/Stages/AnthonyL,
Vie/Stages/FrancoisC, Vie/Stages/HugoA, Vie/Stages/JeromeD,
Vie/Stages/SophieA, Vie/Stages/StephanieR"}%
%ENDTWISTY%

Page 32 sur 32

Vous aimerez peut-être aussi