Académique Documents
Professionnel Documents
Culture Documents
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
3 RÉALISATION DU PROJET........................................................................................................13
Page 3 sur 32
3.5 UTILISATION DU LOGICIEL PUTTY....................................................................................20
4 CONCLUSION................................................................................................................................21
5 GLOSSAIRE....................................................................................................................................22
6 BIBLIOGRAPHIE..........................................................................................................................25
7 ANNEXES........................................................................................................................................25
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.
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.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.
Startups
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
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,…
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++.
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.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.
Page 11 sur 32
Les diplômés du Master sont notamment à même de :
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é.
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 !
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
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.
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
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 !
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,…)
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 :
* *%MAKETEXT{"Webs"}%*
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.
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.).
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...
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
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é).
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.
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
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");
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>
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 )
Page 26 sur 32
=cut
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 )
if ( $args->{attr} =~ /h/o ) {
$isHideChecked = 'checked';
}
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
=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 $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 );
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} );
};
# generate a message useful for those calling this script from the
command l
ine
my $message = ( $doPropsOnly ) ?
'properties changed' : "$fileName uploaded";
Page 30 sur 32
1;
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%\" />
$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%
Page 32 sur 32