function action_snippet_importe(){ global $auteur_session; $arg = _request('arg'); $args = explode(":",$arg); $hash = _request('hash'); $id_auteur = $auteur_session['id_auteur']; $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (verifier_action_auteur("snippet_importe-$arg",$hash,$id_auteur)==TRUE) { $table = $args[0]; $id = $args[1]; $contexte = $args[2]; $source = isset($args[3])?$args[3]:""; $unlink = false; if (!strlen($source)){ if (($val = $_FILES['snippet_xml']) AND (isset($val['tmp_name']))) { $source = $val['tmp_name']; $unlink = true; } } if (($id==$table OR ($id=intval($id))) AND strlen($source)){ $f = snippets_fonction_importer($table); if ($f){ include_spip('inc/xml'); $arbre = spip_xml_load($source, false); $translations = $f($id,$arbre,$contexte); snippets_translate_raccourcis_modeles($translations); } } if ($unlink) @unlink($source); } $redirect = str_replace("ecrire/./","./",$redirect); redirige_par_entete(str_replace("&","&",urldecode($redirect))); }
function action_odt2spip_importe() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_rubrique=XXX $Targs = explode("=", $args[0]); $id_rubrique = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/odt2spip/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."odt2spip/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'odt2spip')) die (_T('odtspip:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('odtspip:err_repertoire_tmp')); // traitement d'un fichier odt envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_odt']['name']); if ($_FILES['fichier_odt']['name'] == '' OR $_FILES['fichier_odt']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_odt']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('odtspip:err_telechargement_fichier')); // dezipper le fichier odt a la mode SPIP include_spip("inc/pclzip"); $zip = new PclZip($rep_dezip.$fichier_zip); $ok = $zip->extract( PCLZIP_OPT_PATH, $rep_dezip, PCLZIP_OPT_SET_CHMOD, _SPIP_CHMOD, PCLZIP_OPT_REPLACE_NEWER ); if ($zip->error_code < 0) { spip_log('charger_decompresser erreur zip ' . $zip->error_code .' pour fichier ' . $rep_dezip.$fichier_zip); die($zip->errorName(true)); //$zip->error_code } // Creation du fichier necessaire a snippets $odt2spip_generer_sortie = charger_fonction('odt2spip_generer_sortie','inc'); list($fichier_sortie,$xml_sortie) = $odt2spip_generer_sortie($id_auteur,$rep_dezip); // generer l'article a partir du fichier xml de sortie (code pompe sur plugins/snippets/action/snippet_importe.php) include_spip('inc/snippets'); $table = $id = 'articles'; $contexte = $args[0]; $source = $fichier_sortie; if (!$f = snippets_fonction_importer($table)) die(_T('odtspip:err_import_snippet')); include_spip('inc/xml'); $arbre = spip_xml_load($source, false); $translations = $f($id,$arbre,$contexte); snippets_translate_raccourcis_modeles($translations); $id_article = $translations[0][2]; // si on est en 2.0 passer le statut de l'article en prepa sql_updateq('spip_articles', array('statut' => 'prop'), 'id_article='.$id_article); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_odt') == '1') { // recuperer le titre preg_match('/<titre>(.*?)<\/titre>/', $xml_sortie, $match); $titre = $match[1]; if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); $c = array( 'titre' => $titre, 'descriptif' => _T('odtspip:cet_article_version_odt') ); include_spip('inc/modifier'); revision_document($id_doc_odt,$c); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }
function boite_snippets($titre,$icone,$table,$id,$contexte="",$retour = ""){ include_spip('inc/autoriser'); if (!strlen($retour)) $retour = self(); $out = ""; // verifier les droits $auth = false; $type = snippets_type_de_table($table); if (intval($id)==$id) { $auth = autoriser('modifier',$type,$id); } else { $auth = true; if ( (count($t = explode('=',$contexte))==2) AND ($id_contexte=intval($t[1])) ) { $type_contexte = $t[0]; if (substr($type_contexte,0,3)=="id_") $type_contexte = substr($type_contexte,3); $auth = autoriser('modifier',$type_contexte,$id_contexte); } $auth &= autoriser('creer',$type,$id); } if (!$auth) return ""; // verifier le support de l'objet pour l'import/export $export_possible = (intval($id) AND $f = snippets_fond_exporter($table)); $import_possible = ($f=snippets_fonction_importer($table)); $import_creation = ($id !== intval($id)); if (!$import_possible && !$export_possible) return ""; $idbox="snippet_$table_$id"; $out .= icone_horizontale($titre, "#", $icone, _DIR_PLUGIN_SNIPPETS."images/import".($export_possible?"_export":"").".gif", false, "onclick='$(\"#$idbox\").slideToggle(\"fast\");'"); $out .= "<div id='$idbox' style='display:none;' >\n"; $out .= debut_cadre_relief('',true); // icone d'export if (intval($id) AND $f = snippets_fond_exporter($table)){ $action = generer_action_auteur('snippet_exporte',"$table:$id",$retour); $out .= icone_horizontale(_T('snippets:exporter'), $action, $icone, _DIR_PLUGIN_SNIPPETS."images/export.gif", false); $out .= "<hr/>"; } // liste des snippets disponibles pour import $liste = snippets_liste_imports($table); foreach($liste as $snippet){ if (!_DIR_RESTREINT) $snippet = substr($snippet,strlen(_DIR_RACINE)); $action = generer_action_auteur('snippet_importe',"$table:$id:$contexte:$snippet",$retour); $out .= icone_horizontale(basename($snippet,".xml"), $action, $icone, $import_creation?"creer.gif":_DIR_PLUGIN_SNIPPETS."images/import.gif", false); } // formulaire d'upload d'un snippet $action = generer_action_auteur('snippet_importe',"$table:$id:$contexte",$retour); $out .= "<form action='$action' method='POST' enctype='multipart/form-data'>"; $out .= form_hidden($action); $out .= "<strong><label for='file_name'>"._T("snippets:importer_fichier")."</label></strong> "; $out .= "<br />"; $out .= "<input type='file' name='snippet_xml' id='file_name' class='formo'>"; $out .= "<div style='text-align:$spip_lang_right'>"; $out .= "<input type='submit' name='Valider' value='"._T('bouton_valider')."' class='fondo'>"; $out .= "</div>"; $out .= "</form>\n"; $out .= fin_cadre_relief(true)."</div>"; return $out; }