Skip to content
Extraits de code Groupes Projets
Valider aac51cf4 rédigé par marcimat@rezo.net's avatar marcimat@rezo.net
Parcourir les fichiers

On remplace le formulaire odt2spip par un nouveau 'document2spip',

qui peut prendre en entrée plusieurs types de documents éventuellement
(ie: si un serveur de conversion est indiqué en configuration (mais il faut le faire))

L’idée (à faire) est de pouvoir passer, à terme, des .docx, de les traduire en .odt, 
et de les importer ensuite avec odt2spip comme avant.
parent 0d7ba221
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
* text=auto !eol
action/odt2spip_importe.php -text
formulaires/configurer_odt2spip.html -text
formulaires/document2spip.html -text
formulaires/document2spip.php -text
formulaires/odt2spip.html -text
formulaires/odt2spip.php -text
inc/odt2spip.php -text
......
<div class="formulaire_spip formulaire_#FORM">
[(#ENV{_conversion_disponible}|oui)
[(#ENV{objet}|=={rubrique}|oui)<h3 class="titrem"><:odtspip:importer_fichier_source:></h3>]
[(#ENV{objet}|!={rubrique}|oui)<h3 class="titrem"><:odtspip:remplacer_article_source:></h3>]
][(#ENV{_conversion_disponible}|non)
[(#ENV{objet}|=={rubrique}|oui)<h3 class="titrem"><:odtspip:importer_fichier:></h3>]
[(#ENV{objet}|!={rubrique}|oui)<h3 class="titrem"><:odtspip:remplacer_article:></h3>]
]
[<img class="cadre-icone" width="24" height="24" alt="" src="(#CHEMIN{odt2spip-24.png})"/>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<BOUCLE_editable(CONDITION){si #EDITABLE}>
<form action="#ENV{action}" method="POST" enctype="multipart/form-data"><div>
#ACTION_FORMULAIRE
<div class="editer-groupe">
[(#PLUGIN{bigup}|oui)
[(#SAISIE_FICHIER{bigup, fichier, label=<:odtspip:choix_fichier_source:>, accept=#ENV{_accept}, obligatoire=oui})]
][(#PLUGIN{bigup}|non)
[(#SAISIE{input, fichier, type=file, label=<:odtspip:choix_fichier_source:>, accept=#ENV{_accept}, obligatoire=oui})]
]
[(#SAISIE{case, attacher_fichier, label_case=<:odtspip:attacher_fichier_source:>})]
[(#ENV{_conversion_disponible}|et{#AUTORISER{debug}}|oui)
[(#SAISIE{case, attacher_fichier_odt, label_case=<:odtspip:attacher_fichier_odt_genere:>})]
]
[(#SAISIE{radio, mode_image,
label=<:odtspip:images_mode_document:>,
datas=#ARRAY{image,<:odtspip:mode_image:>,document,<:odtspip:mode_document:>},
})]
[(#SAISIE{selecteur_langue, lang_publi, label=<:odtspip:langue_publication:>})]
</div>
<p class="boutons">
<input type="submit" name="Valider" value="<:bouton_valider|attribut_html:>" class="submit" />
</p>
</div></form>
</BOUCLE_editable>
</div>
<style type="text/css">
.lat .formulaire_#FORM .editer.editer_fichier label {
display:none;
}
</style>
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Charger le contenu d’un document dans un objet SPIP.
*
* Le document est transformé en document ODT (si possible),
* puis la transformation odt2spip est appliquée.
*
* @param string $objet
* @param int $id_objet
* @param null|string $creer_objet
* Si définie, créera un nouvel objet enfant de $objet/$id_objet.
* Note que seul le cas 'article' dans une rubrique est actuellement géré.
* @param string $retour
* @return array|false
*/
function formulaires_document2spip_charger_dist($objet, $id_objet, $creer_objet = null, $retour = '') {
include_spip('inc/config');
if ($creer_objet and !autoriser('creer' . objet_type($creer_objet) . 'dans', $objet, $id_objet)) {
return false;
} elseif (!autoriser('modifier', $objet, $id_objet)) {
return false;
}
include_spip('inc/odt2spip');
$valeurs = array(
'objet' => $objet,
'id_objet' => $id_objet,
'creer_objet' => $creer_objet,
'attacher_fichier' => lire_config('odt2spip/defaut_attacher'),
'attacher_fichier_odt' => lire_config('odt2spip/defaut_attacher_odt_genere'),
'mode_image' => 'image',
// interne.
'_conversion_disponible' => odt2spip_convertisseur_disponible(),
'_bigup_rechercher_fichiers' => true,
'_accept' => odt2spip_liste_extensions_acceptees(true),
);
return $valeurs;
}
/**
* Vérifier
*
* @param string $objet
* @param int $id_objet
* @param null|string $creer_objet
* Si définie, créera un nouvel objet enfant de $objet/$id_objet.
* Note que seul le cas 'article' dans une rubrique est actuellement géré.
* @param string $retour
* @return array
*/
function formulaires_document2spip_verifier_dist($objet, $id_objet, $creer_objet = null, $retour = '') {
$erreurs = array();
if (!in_array(_request('mode_image'), array('image', 'document'))) {
$erreurs['mode_image'] = _T('info_obligatoire');
}
include_spip('inc/odt2spip');
$extensions_acceptees = odt2spip_liste_extensions_acceptees();
if (empty($_FILES['fichier']['name'])) {
$erreurs['fichier'] = _T('info_obligatoire');
} elseif ($_FILES['fichier']['error'] != 0) {
$erreurs['fichier'] = _L('Un problème est survenu pour récupérer le fichier');
} elseif (!in_array(strtolower(pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION)), $extensions_acceptees)) {
$erreurs['fichier'] = _L('Le fichier doit être au format : ', implode(', ', $extensions_acceptees));
}
return $erreurs;
}
/**
* Traiter
*
* @param string $objet
* @param int $id_objet
* @param null|string $creer_objet
* Si définie, créera un nouvel objet enfant de $objet/$id_objet.
* Note que seul le cas 'article' dans une rubrique est actuellement géré.
* @param string $retour
* @return array
*/
function formulaires_document2spip_traiter_dist($objet, $id_objet, $creer_objet = null, $retour = '') {
$res = array(
'editable' => true,
);
include_spip('inc/odt2spip');
try {
$fichier_source = odt2spip_deplacer_fichier_upload('fichier');
} catch (\Exception $e) {
$res['message_erreur'] = $e->getMessage();
return $res;
}
// Si le fichier n’est pas un document odt, le traduire.
$extension = strtolower(pathinfo($fichier_source, PATHINFO_EXTENSION));
if ($extension !== 'odt') {
try {
$fichier = odt2spip_convertir_fichier($fichier_source);
if (!$fichier) {
$res['message_erreur'] = _L('Une erreur est survenue lors de la conversion du fichier');
return $res;
}
} catch (\Exception $e) {
spip_log($e->getMessage(), 'odt2spip.' . _LOG_ERREUR);
$res['message_erreur'] = _L('Une erreur est survenue lors de la conversion du fichier');
return $res;
}
} else {
$fichier = $fichier_source;
}
list($id, $erreurs) = odt2spip_integrer_fichier(
$fichier,
$objet,
$id_objet,
$creer_objet,
array(
'attacher_fichier' => _request('attacher_fichier'),
'fichier_source' => $fichier_source,
'attacher_fichier_odt' => _request('attacher_fichier_odt'),
)
);
if (!$id) {
$res['message_erreur'] = $erreurs;
return $res;
}
$res['redirect'] = generer_url_entite($id, $creer_objet ? $creer_objet : $objet);
$res['message_ok'] = _L('Fichier pris en compte');
return $res;
}
......@@ -100,6 +100,7 @@ function formulaires_odt2spip_traiter_dist($objet, $id_objet, $creer_objet = nul
$creer_objet,
array(
'attacher_fichier' => _request('attacher_fichier'),
'fichier_source' => $fichier,
)
);
......
......@@ -4,6 +4,33 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Indique si un convertisseur de document est disponible
* @return bool
*/
function odt2spip_convertisseur_disponible() {
return false; // TODO: Test de configuration
}
/**
* Retourne la liste des extensions de documents acceptées
* @param bool $accept True pour retourner au format 'accept' d’html5
* @return string|string[]
*/
function odt2spip_liste_extensions_acceptees($accept = false) {
if (odt2spip_convertisseur_disponible()) {
// TODO: vérifier la liste des extensions possibles
$liste = array('odt', 'doc', 'docx', 'html', 'pdf');
} else {
$liste = array('odt');
}
if ($accept) {
return '.' . implode(',.', $liste);
}
return $liste;
}
/**
* Retourne le répertoire de stockage des documents à traiter
* @return string
......@@ -184,39 +211,72 @@ function odt2spip_objet_modifier($fichier, $objet, $id_objet, $set, $options = a
}
}
// si nécessaire attacher le fichier odt à l'article
// et lui mettre un titre signifiant
if (!empty($options['attacher_fichier'])) {
$titre = $set['titre'];
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
$id_document = $ajouter_documents(
'new',
// si nécessaire attacher le fichier source à l'article
if (!empty($options['attacher_fichier']) and !empty($options['fichier_source'])) {
odt2spip_objet_lier_fichier($options['fichier_source'], $objet, $id_objet, $set['titre']);
}
// si nécessaire attacher le fichier odt généré à l'article
if (
!empty($options['attacher_fichier_odt']) and !empty($options['fichier_source'])
and ($fichier != $options['fichier_source'] or !empty($options['attacher_fichier']))
) {
odt2spip_objet_lier_fichier($fichier, $objet, $id_objet, $set['titre']);
}
return true;
}
/**
* Lie un fichier en tant que document d’un objet.
*
* @param string $fichier
* @param string $objet
* @param int $id_objet
* @param string $titre
*/
function odt2spip_objet_lier_fichier($fichier, $objet, $id_objet, $titre) {
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
$id_document = $ajouter_documents(
'new',
array(
array(
array(
'tmp_name' => $fichier,
'name' => basename($fichier),
'titrer' => 0,
'distant' => 0,
'type' => 'document'
),
'tmp_name' => $fichier,
'name' => basename($fichier),
'titrer' => 0,
'distant' => 0,
'type' => 'document'
),
$objet,
$id_objet,
'document'
),
$objet,
$id_objet,
'document'
);
if (
$id_document
and $id_doc_odt = intval($id_document[0])
and $id_doc_odt == $id_document[0]
) {
$c = array(
'titre' => $titre,
'descriptif' => _T('odtspip:cet_article_version_odt'),
'statut' => 'publie'
);
if (
$id_document
and $id_doc_odt = intval($id_document[0])
and $id_doc_odt == $id_document[0]
) {
$c = array(
'titre' => $titre,
'descriptif' => _T('odtspip:cet_article_version_odt'),
'statut' => 'publie'
);
document_modifier($id_doc_odt, $c);
}
document_modifier($id_doc_odt, $c);
}
}
return true;
/**
* Convertir un fichier vers le format odt en utilisant
* un appel à une api de conversion.
*
* @param string $fichier_source
* @return string|bool
*/
function odt2spip_convertir_fichier($fichier_source) {
if (!odt2spip_convertisseur_disponible()) {
return false;
}
// TODO: Appel à une API en postant le fichier source...
return false;
}
\ No newline at end of file
......@@ -33,21 +33,13 @@ function odt2spip_affiche_gauche($flux) {
and autoriser('ecrire')
) {
$out = recuperer_fond(
'prive/squelettes/inclure/odt2spip',
array(
'objet' => 'rubrique',
'id_objet' => $id_rubrique,
'creer_objet' => 'article'
)
);
/*$out .= recuperer_fond(
'prive/squelettes/inclure/document2spip',
array(
'objet' => 'rubrique',
'id_objet' => $id_rubrique,
'creer_objet' => 'article'
)
);*/
);
$flux['data'] .= $out;
} elseif (
$flux['args']['exec'] == 'article'
......@@ -55,19 +47,12 @@ function odt2spip_affiche_gauche($flux) {
and autoriser('modifier', 'article', $id_article)
) {
$out = recuperer_fond(
'prive/squelettes/inclure/odt2spip',
array(
'objet' => 'article',
'id_objet' => $id_article
)
);
/*$out .= recuperer_fond(
'prive/squelettes/inclure/document2spip',
array(
'objet' => 'article',
'id_objet' => $id_article
)
);*/
);
$flux['data'] .= $out;
}
return $flux;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter