Rebonjour,
Acuellement je suis en train de développer un module qui a pour but d’afficher un formulaire permettant à des utilisateurs de uploader des fichiers audios vers un serveur distant. Ces fichiers seront récupérés pour etre masterisés.
Via des boutons radio il pourront choisir le format de mastering :
DDPI ou fichier .wav ou
Via une liste , ils peuvent choisir le type de fichier :
.wav, .aif,.bmf et .bwf.
Et enfin 3 champs pour uploader les fichiers.
Le module est créé, pour le moment le formulaire s’affiche.
avec ce chemin que j’ai entré dans le code :
‘path’ => ‘admin/settings/mastering’
Je voudrais que le formulaire s’affiche lorsque l’utilisateur cliquera sur un bouton de la page d’accueil «uploader ce fichier» par exmple ;
Comment doiis je procéder pour cel ?
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

En fait,
Je voudais savoir avant de m’engager dans la création de ce module s’il existe un module qui permet de faire des uploads(vers un autre site et non dans le site courant !)et qui stocke l’information des uploads dans une base de données.
En fait chaque utilisateur aura à uploader des fichiers(.aif.wav.pmf) ;
Il faudra par la suite que ce module ou moi même via une requête sql puisse retrouver ce que chaque utilisateur a uploadé, à savoir,le nombre d’uploads, titre, description,nom des fichiers uploadés.
Avez vous une idée d’un tel module ou autre ?
Est ce la création d’un tel module est compliqué ?
j’ai commencé à écrire ce module qui pour l’instant m’affiche le formulaire ;
il me reste encore étape d’insérer dans la base de données les infos clients : nom titre, nombre de fihiers et le nom des uploads ;
et en plus le fichiers uploadés doivent être uplodés vers un autre site et non vers le site dans leql se trouve le module !
Réalisable ! vous m’encourager à développer ce module sachant que je débute dans drupal, eten comptant su votre aide ?
Merci pour vos suggestions
anka
54
Jette un oeil sur la collection de modules qui commencent par media, j’ai comme l’impression qu’ils st assez avance de ce cote la
En particulier http://drupal.org/project/media_mover
tostinni
1268
merci tostinni,
J’ai jeté un coup d’oeil sur ce module que je ne peux pas tester en ce moment puisque je travaille en local et que je n’ai pas encore de compte sur un serveur distant.
j’ai décidé de continuer sur le module que j’ai créé même si c’et pas facile ;
Pour le moment j’ai réussi à insérer certains infos infos dans la base de données.
J’ai fais une liste de la forme :
$form[‘format-fichier’] = array(
‘#title’ => t(‘Format de(s) fichier(s)’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
) ;
$form[‘format-fichier-options’] = array(
‘#type’ => ‘value’,
‘#value’ => array(t(‘wav’), t(‘aif’), t(‘pmf’), t(‘bwf’) ),
) ;
$form['format-fichier']['favorite-format'] = array(
'#title' => t('wav(fichiers wave), .aif(fichier aiff), .pmf(fichiers pyramix), .bwf (fichiers broadcast wave)'),
'#type' => 'select',
'#description' => t('Sélectionnez votre fichier;'),
'#options' => $form['format-fichier-options']['#value']
) ;
lorsque je regarde la table, php me stocke en fait une valeur numérique qui correspond à l’index du tableau alors que je voudrais stocker tout simplement sa valeur en tant que string :
wav, ou, aif, ou pmf ou bwf.
Quand je fais une 2eme insertion dans la base cela ne fonctionne pas ;
Si je supprime le 1er enregistrement, et je valide le formulaire, l’insertion fonctionne !
Quelqu’un a une idée ?
Merci encore
anka
54
Salut,
j'ai pas vraiment les yeux en face des trous, mais je pense que tu ne fournis pas assez de code pour que l'on puisse t'aider efficacement (Ton insertion en BDD se faisant dans le submit).
2 remarques cependant :
A quoi te sert le $form['format-fichier-options'] ? Je ne pense pas que ce soit utile dans ton cas (à moins que ce soit utilisé plus tard dans ton submit).
Je ne pense pas non plus que ce soit utile d'utiliser la fonction de traduction sur des extensions / formats de fichiers... t('wav'), t('aif'), t('pmf'), t('bwf') Ni sur des phrases déjà en français.
Mais bon, ça ne fera pas planter ton module ;)
Pour répondre à ta question sur l'info stockée :
<?php
$formats = aray(
'wav' => 'fichiers wave',
'aif' => 'fichier aiff',
'pmf' => 'fichiers pyramix',
'bwf' => 'fichiers broadcast wave',
);
$form['format-fichier']['favorite-format'] = array(
'#type' => 'select',
'#title' => t('Favorite format'),
'#options' => $formats,
);
?>
Pour ton histoire d'enregistrement qui ne fonctionne pas : Ca dépend de ta fonction submit, de la structure de la table...
A+
webastien
131
Bonjour,merci pour ta réponse webastien,
Bien, je vais te faire voir le code du module que je suis en train développer en m’aidant d’infos récoltés à droite et à gauche, c’est un peu long :
< ?php
// $Id$
/**
* @files
* Permet aux ttilisateurs de uploader des fichiers
*
* Ajoute un formulaire quand le noeud est affiché
* pour que les utilisateurs puissent uploader leurs fichiers
*/
/*
* Implementation du hook_menu()
*/
function mastering_menu($may_cache) {
$items = array();if($may_cache){
$items[] = array(
'path' => 'admin/settings/mastering',
'title' => t('Formulaire e-Mastering'),
'Description' => t('Notre service de « eMastering » vous permet de faire masteriser vos titres sans bouger de chez vous.'),
'callback' => 'mastering_page',
'access' => TRUE
);
}
return $items;
}
/*
* Called when user goes to http://localhost/mastering/ ?q=admin/settings/mastering
*/
function mastering_page() {
$output .= t(‘
Formulaire e-Mastering
’) ;
// return the HTML generated from the $form structure
$output .= drupal_get_form('mastering_nameform');
return $output;
}
/*
* définit un formulaire
*/
function mastering_nameform(){
$form = array() ;
$form[‘name’] = array(
‘#title’ => t(‘Vos coordonnées’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
‘#description’ => ”,
) ;
$form[‘name’][‘user_name’] =array(
‘#title’ => t(‘Nom’),
‘#type’ => ‘textfield’,
‘#description’ => t(‘Afin de bien répétorier vos fichiers,
entrez votre nom, celui que vous avez choisi lors de votre inscription.’)
) ;
$form[‘infos_titres’] = array(
‘#title’ => t(‘Infos sur les titres:’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
) ;
$form[‘infos_titres’][‘label’] =array(
‘#title’ => t(‘Production/label’),
‘#type’ => ‘textfield’,
‘#description’ => t(‘Entrez votre production/label’)
) ;
$form[‘infos_titres’][‘artist’] =array(
‘#title’ => t(‘Artiste(s)’),
‘#type’ => ‘textfield’,
‘#description’ => t(‘Entrez l'artiste’)
) ;
$form['infos_titres']['number_files'] =array(
‘#title’ => t(‘Nombre de morceaux’),
‘#type’ => ‘textfield’,
‘#description’ => t(‘Entrez le nombre des morceaux’)
) ;
/—————————————————————————————————-/
$form[‘format-fichier’] = array(
‘#title’ => t(‘Format de(s) fichier(s)’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
) ;
$form['format-fichier']['favorite-format'] = array(
'#title' => t('wav(fichiers wave), .aif(fichier aiff), .pmf(fichiers pyramix), .bwf (fichiers broadcast wave)'),
'#type' => 'select',
'#description' => t('Sélectionnez votre fichier;'),
'#options' => $form['format-fichier-options']['#value']
) ;
/—————————————————————————————————————————-/
$form[‘format-mastering’] = array(
‘#title’ => t(‘Format de mastering’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
) ;
$form[‘format-mastering’][‘custom’] = array(
‘#type’ => ‘radios’,
‘#options’ => array(
t(‘DDPI(dossier à envoyer à l'usine de gravure)’),
t(‘fichier .wav (fichier Wave à 44,1kHz/16 bits)’),
t(‘CD audio (envoi en Collissimo Recommandé, supplément de 10€) mp3’)
),
‘#description’ => t(’Sélectionnez votre format de mastering’),
‘#default_value’ => variable_get(‘format-mastering’, ‘#options[0]’),
) ;
/—————————————————————————————————————————-/
$form[‘upload’] = array(
‘#title’ => t(‘Uploadez vos fichiers’),
‘#type’ => ‘fieldset’,
‘#collapsible’ => TRUE,
‘#collapsed’ => FALSE,
) ;
$form[‘upload’][‘upload-files1’] = array(
‘#type’ => ‘file’,
‘#title’ => t(‘Titre 1’),
‘#size’ => 35,
‘#description’ => t(”)
) ;
$form[‘upload’][‘upload-files2’] = array(
‘#type’ => ‘file’,
‘#title’ => t(‘Titre 2’),
‘#size’ => 35,
‘#description’ => t(”)
) ;
$form[‘upload’][‘upload-files3’] = array(
‘#type’ => ‘file’,
‘#title’ => t(‘Titre 3’),
‘#size’ => 35,
‘#description’ => t(”)
) ;
/—————————————————————————————————————————-/
$form[‘submit’] = array(
‘#type’ => ‘submit’,
‘#value’ => t(‘Submit’)
) ;
return $form ;
}
/**
* Validate the form
*/
function mastering_nameform_validate($form_id, $form_values) {
if($form_values[‘user_name’] == NULL){
// we notified the form API that this field has failed validation
form_set_error(‘user_name’, ‘Vous devez entrez votre nom.’) ;
}
if($form_values['label'] == NULL){// we notified the form API that this field has failed validation
form_set_error('label', 'Vous devez entrez votre production / label.');
}
if($form_values['artist'] == NULL){
// we notified the form API that this field has failed validation
form_set_error('artist', 'Vous devez renseigner le champ artiste.');
}
if($form_values['number_files'] == NULL){
// we notified the form API that this field has failed validation
form_set_error('number_files', 'Vous devez entrer le nombre de fichiers.');
}
if(!is_numeric($form_values['number_files'])) {
form_set_error('number_files', t('Veuillez entrer un nombre s\il vous plait.'));
}
}
/*
* handle post-validation form submission
*/
function mastering_nameform_submit($form_id, $form_values) {
global $user ;
$nom = $form_values[‘user_name’] ;
$label = $form_values[‘label’] ;
$artist = $form_values[‘artist’] ;
$number_files = $form_values[‘number_files’] ;
$favorite_format = $form_values[‘favorite-format’] ;
$custom = $form_values[‘custom’] ;
//$files1 = $form_values[‘files[upload-files1]’] ;
//$files2 = $form_values[‘files[upload-files2]’] ;
//$files3 = $form_values[‘files[upload-files3]’] ;
db_query("INSERT INTO {mastering} (uid, nom, label, artist, number_files, favorite_format,custom, '','', '') VALUES(%d,'%s','%s','%s', %d, '%s', '%s', '%s', '%s','%s')", $user->uid, $nom, $label, $artist, $number_files, $favorite_format, $files1, $files2, $files3);drupal_set_message(t('message à afficher'));
}
/**************************************************************/
J’ai supprimé le $form[‘format-fichier-options’] ce qui n’emp$êche pas d’afficher les 3 boutons radios.
par contre je voudrais que le 1er bouton radio soit coché par défaut :
‘#default_value’ => variable_get(‘format-mastering’, ‘#options[0]’)
ça ne marche pas
Pour l’histoire d’enregistrement c’est corrigé tu m’as mis la puce à l’oreille, j’ai rajouté un champ avec une clef auto - increment ;
Par contre l’enregistrement du nom dans la base ne fonctionne pas :
$nom = $form_values[‘user_name’] ;
alors que les autres fonctionnent, je ne comprends pas.
Une fois que j’ai validé le message de confirmation n’apparait pas :
drupal_set_message(t(‘message à afficher’)) ;
Il me reste la partie la plus difficile, c’est l’upload des fichiers que je n’ai pas encore traité ;
je voudrais que les noms des fichiers soit également stockés dans la base.
Je me demande si je peux utiliser le formulaire «upload» de Drupal pour l’insérer dans mon module ;
si j’ai bien lu la doc , le module «upload» doit posséder un hook pour que je puisse faire cela.
De plus cet upload je dois le faire non sur le serveur où j’ai hébergé le site mais sur le serveur d’un ami est ce possible de faire cela avec PHP ?
anka
54
Je te fais une réponse à la va vite... Mais par pitié, pour du code, utilises les balises :)
"'#default_value' => variable_get('format-mastering', '#options[0]') ça ne marche pas"... normal : '#options[0]' est une chaine de caractère, tes options sont indexées numériquement.
Ta variable 'format-mastering' n'est settée nul part.
"'#default_value' => 0".
<?phpfunction mastering_nameform_validate($form_id, $form_values) {
if(empty($form_values['user_name'])){
form_set_error('user_name', 'Vous devez entreR votre nom.');
}
?>
Ou tout simplement ajouter l'attribut #required (booléen) à la définition du champ user_name.
Pour le reste, je n'ai pas le temps de checker (et ça me fais mal aux yeux :p). Edite ton message, utilise la balise prévue et si j'ai plus de temps quand je repasserai, j'essayerai de t'aider d'avantage.
A+
webastien
131
désolé, en plus je ne peux qu’éditer que le premier message que j’avais envoyé ; tes suggestions à propos de la valeur par défaut ne m’a pas permis de résoudre le problème ;
je reprends avec les balises :
<?phpfunction mastering_nameform(){
$form = array();
$form['name'] = array(
'#title' => t('Vos coordonnées'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#description' => '',
);
?>
<?php$form['name']['user_name'] = array(
'#title' => t('Nom'),
'#required' => TRUE,
'#type' => 'textfield',
'#description' => t('entrez votre nom.')
);
?>
<?php
$form['infos_titres'] = array(
'#title' => t('Infos sur les titres:'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['infos_titres']['label'] =array(
'#title' => t('Production/label'),
'#type' => 'textfield',
'#description' => t('Entrez votre production/label')
);
$form['infos_titres']['artist'] =array('#title' => t('Artiste(s)'),
'#type' => 'textfield',
'#description' => t('Entrez l\'artiste')
);
$form['infos_titres']['number_files'] =array(
'#title' => t('Nombre de morceaux'),
'#type' => 'textfield',
'#description' => t('Entrez le nombre des morceaux')
);
?>
A cette étape du code le nom ($form[‘name’][‘user_name’]) n’est pas stocké dans la base (bloc 2 ci-dessus lorsque je fais la validation :
<?phpfunction mastering_nameform_submit($form_id, $form_values) {
global $user;
$nom = $form_values['user_name'];
$label = $form_values['label'];
$artist = $form_values['artist'];
$number_files = $form_values['number_files'];
$favorite_format = $form_values['favorite-format'];
$custom = $form_values['custom'];
//traitement à faire en dernier
//$files1 = $form_values['files[upload-files1]'];
//$files2 = $form_values['files[upload-files2]'];
//$files3 = $form_values['files[upload-files3]'];
db_query("INSERT INTO {mastering} (uid, nom, label, artist, number_files, favorite_format,custom, '','', '') VALUES(%d,'%s','%s','%s', %d, '%s', '%s', '%s', '%s','%s')", $user->uid, $nom, $label, $artist, $number_files, $favorite_format, '', '', ''); drupal_set_message(t('message de remerciement à entrer'));}
?>
Pourtant les formulaires ‘label’ et ‘artiste’ et ‘nombre de morceaux’ (3eme bloc ci-dessus) reposent sur le même principe et l’insertion fonctionne !
Après avoir appuyé sur le bouton ‘submit’ le message de confirmation n’apparait pas :
<?phpdrupal_set_message(t('message de remerciement à entrer'));
?>
Pour la balise select j’ai fais ce qui suit(en me basant d’un bouquin Drupal en anglais) :
<?php
$form['format-fichier'] = array(
'#title' => t('Format de(s) fichier(s)'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['fichier-options'] = array(
'#type' => 'value',
'#value' => array(t('wav'), t('aif'), t('pmf'), t('bwf') ),
);
$form['format-fichier']['favorite-format'] = array(
'#title' => t('choisissez un format de fichier)'),
'#type' => 'select',
'#description' => t('Sélectionnez votre fichier;'),
'#options' => $form['fichier-options']['#value']
);
?>
L’insertion des valeurs dans la base fonctionne, mais drupal insère par défaut l’index du tableau ;
Existe t’il une fonction Drupal qui permttrait de stocker dans la base la valeur de l’index sélectionnée, pour :
<?php'#value' => array(t('wav'), t('aif'), t('pmf'), t('bwf') )
?>
au lieu de stocker dans la base l’index 0 , le string wav sera stocké stocké ;
Pour les bouton radios :
<?php
$form['format-mastering'] = array(
'#title' => t('Format de mastering'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
);
$form['format-mastering']['custom'] = array(
'#type' => 'radios',
'#options' => array(
t('DDPI(dossier à envoyer à l\'usine de gravure)'),
t('fichier .wav (fichier Wave à 44,1kHz/16 bits)'),
t('CD audio (envoi en Collissimo Recommandee')
),
'#description' => t('votre format demastering'),
'#default_value' => variable_get('format-mastering', 0),
);
?>
A cette étape j’ai essayé de différentes manières de changer la valeur du bouton radio sélectionné par défaut, mais il reste bloqué sur le 1 ;
Comment faire pour stocker dans la base la valeur de l’index du bouton radio et non son index ?
Pour le bouton radio 0, je voudrais stocker:DDPI
Je vous remercie bcp pour votre aide et le temps que vous passer sur ce site.
J’ai pris mon temps pour mettre un code lisible, c’est vrai que c’est la moindre des choses.
anka
54
Hello,
encore une réponse incomplète car pas trop de temps... Mais au moins, ça te fera chercher un peu de ton côté :p
Toujours les mêmes remarques sur ton utilisation de la fonction t().
" '#description' => '' ", autant ne pas le mettre non ?
Tes " '' " dans la liste des champs me parait bizarre... [est-ce une syntaxe SQL qui m'échappe ?]
Pour les options, si tu veux stocker autre chose que l'index numérique, il te suffit de passer un tableau associatif et non indexé.
<?php$form['select_field'] = array(
'#type' => 'select',
'#title' => t('My field'),
'#options' => array(
'wav' => 'wav',
'aif' => 'aif',
'pmf' => 'pmf',
'bwf' => 'bwf',
'valeur stockée' => 'valeur affichée',
),
'#default_value' => 'pmf',
);
?>
"j'ai essayé de différentes manières de changer la valeur du bouton radio sélectionné par défaut, mais il reste bloqué sur le 1"
Et que te retourne "variable_get('format-mastering', 0)" ? N'aurais tu pas "1" stocké dedans tout bêtement ?
Au début de ta fonction "mastering_nameform_submit()", que te ressors ce code :
<?phpdrupal_set_message('<pre>' . print_r($form_values, 1) . '</pre>');
// Ou si devel est installé
dsm($form_values);
?>
webastien
131
Merci Sébastien,
Je regarde ça je te tiens au courant ;
encore merci de ta patience ; suis conscient que c’est des fautes bêtes mais souvent c en discutant qu’on s’aperçoit de ses erreurs et qu’on a une lueur
anka
54
Sebastien,
je me tourne vers toi pour ton aide précieuse même si t’as pas bcp de temps cela me fait réfléchir et m’aide.
En fait je me rends compte que mon code je le complique… et dire que je prends l’exemple d’un bouquin de drupal en anglais.
En tout cas merci encore.
Il me reste à uploader mes fichiers ;
puis je utiliser le formulaire upload(le champs upload) de Drupal et l’insérer dans mon formulaire. Si oui, comment faire ?
De plus, une qustion technique :
est ‘il possible de uploadez un fichier dans le répertoire d’un autre serveur et non dans celui où se trouve mon site courant ?
Drupal permet’il cela ? La fonction move_uploaded_file() permet’elle cela également ?
Comment ferez vous cela ?
Quelqu’un me met sur la piste ?
Encore merci
anka
54