コード例 #1
0
ファイル: admin_repair.php プロジェクト: rhertzog/lcs
function admin_repair_plat(){
	spip_log("verification des documents joints");
	$out = "";
	$repertoire = array();
	include_spip('inc/getdocument');
	$res = sql_select('*','spip_documents',"fichier REGEXP CONCAT('^',extension,'[^/\]') AND distant='non'");

	while ($row=sql_fetch($res)){
		$ext = $row['extension'];
		if (!$ext) {
			spip_log("document sans extension: " . $row['id_document']);
			continue;
		}
		if (!isset($repertoire[$ext])){
			if (@file_exists($plat = _DIR_IMG. $ext .".plat"))
				spip_unlink($plat);
			$repertoire[$ext] = creer_repertoire_documents($ext);
			if (preg_match(',_$,',$repertoire[$ext]))
				$repertoire[$ext] = false;
		}
		if ($d=$repertoire[$ext]){
			$d = substr($d,strlen(_DIR_IMG));
			$src = $row['fichier'];
			$dest = $d . substr($src,strlen($d));
			if (deplacer_fichier_upload(_DIR_IMG . $src, _DIR_IMG . $dest)) {
				sql_updateq('spip_documents',array('fichier'=>$dest),'id_document='.intval($row['id_document']));
				spip_unlink(_DIR_IMG . $src);
				$out .= "$src => $dest<br />";				
			}
		}
	}

	return $out;
}
コード例 #2
0
ファイル: iconifier.php プロジェクト: genma/spip_ynh
function action_spip_image_ajouter_dist($arg, $sousaction2, $source, $return = false)
{
    global $formats_logos;
    include_spip('inc/documents');
    if (!$sousaction2) {
        if (!$_FILES) {
            $_FILES = $GLOBALS['HTTP_POST_FILES'];
        }
        $source = is_array($_FILES) ? array_pop($_FILES) : "";
    }
    $erreur = "";
    if (!$source) {
        spip_log("spip_image_ajouter : source inconnue");
    } else {
        $f = _DIR_LOGOS . $arg . '.tmp';
        if (!is_array($source)) {
            // fichier dans upload/
            $source = @copy(determine_upload() . $source, $f);
        } else {
            // Intercepter une erreur a l'envoi
            if ($erreur = check_upload_error($source['error'], "", $return)) {
                $source = "";
            } else {
                // analyse le type de l'image (on ne fait pas confiance au nom de
                // fichier envoye par le browser : pour les Macs c'est plus sur)
                $source = deplacer_fichier_upload($source['tmp_name'], $f);
            }
        }
        if (!$source) {
            spip_log("pb de copie pour {$f}");
        }
    }
    if ($source and $f) {
        $size = @getimagesize($f);
        $type = !$size ? '' : ($size[2] > 3 ? '' : $formats_logos[$size[2] - 1]);
        if ($type) {
            $poids = filesize($f);
            if (_LOGO_MAX_SIZE > 0 and $poids > _LOGO_MAX_SIZE * 1024) {
                spip_unlink($f);
                $erreur = _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024), 'actuel' => taille_en_octets($poids)));
            } elseif (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT and ($size[0] > _LOGO_MAX_WIDTH or $size[1] > _LOGO_MAX_HEIGHT)) {
                spip_unlink($f);
                $erreur = _T('info_logo_max_poids', array('maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _LOGO_MAX_WIDTH, 'hauteur_vignette' => _LOGO_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1]))));
            } else {
                @rename($f, _DIR_LOGOS . $arg . ".{$type}");
            }
        } else {
            spip_unlink($f);
            $erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $formats_logos)));
        }
    }
    if ($erreur) {
        if ($return) {
            return $erreur;
        } else {
            check_upload_error(6, $erreur);
        }
    }
}
コード例 #3
0
ファイル: tourner.php プロジェクト: loorenzooo/aslfc
/**
 * Tourner un document
 *
 * http://doc.spip.org/@action_tourner_post
 *
 * @param int $id_document
 * @param int $angle
 *   angle de rotation en degre>0
 * @return
 */
function action_tourner_post($id_document, $angle)
{
    $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=" . intval($id_document));
    if (!$row) {
        return;
    }
    include_spip('inc/charsets');
    # pour le nom de fichier
    include_spip('inc/documents');
    // Fichier destination : on essaie toujours de repartir de l'original
    $var_rot = $angle;
    include_spip('inc/distant');
    # pour copie_locale
    $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier']));
    if (preg_match(',^(.*)-r(90|180|270)\\.([^.]+)$,', $src, $match)) {
        $effacer = $src;
        $src = $match[1] . '.' . $match[3];
        $var_rot += intval($match[2]);
    }
    $var_rot = (360 + $var_rot) % 360;
    // 0, 90, 180 ou 270
    if ($var_rot > 0) {
        $dest = preg_replace(',\\.[^.]+$,', '-r' . $var_rot . '$0', $src);
        spip_log("rotation {$var_rot} {$src} : {$dest}");
        include_spip('inc/filtres');
        include_spip('public/parametrer');
        // charger les fichiers fonctions #bugfix spip 2.1.0
        $res = filtrer('image_rotation', $src, $var_rot);
        $res = filtrer('image_format', $res, $row['extension']);
        list($hauteur, $largeur) = taille_image($res);
        $res = extraire_attribut($res, 'src');
        include_spip('inc/getdocument');
        deplacer_fichier_upload($res, $dest);
    } else {
        $dest = $src;
        $size_image = @getimagesize($dest);
        $largeur = $size_image[0];
        $hauteur = $size_image[1];
    }
    // succes !
    if ($largeur > 0 and $hauteur > 0) {
        $set = array('fichier' => set_spip_doc($dest), 'largeur' => $largeur, 'hauteur' => $hauteur, 'distant' => 'non');
        if ($taille = @filesize($dest)) {
            $set['taille'] = $taille;
        }
        sql_updateq('spip_documents', $set, "id_document=" . intval($id_document));
        if ($effacer) {
            spip_log("rotation : j'efface {$effacer}");
            spip_unlink($effacer);
        }
        // pipeline pour les plugins
        pipeline('post_edition', array('args' => array('table' => 'spip_documents', 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' => 'document', 'id_objet' => $id_document, 'champs' => array('rotation' => $angle, 'orientation' => $var_rot, 'fichier' => $row['fichier']), 'serveur' => $serveur, 'action' => 'tourner'), 'data' => $set));
    }
}
コード例 #4
0
ファイル: getdocument.php プロジェクト: rhertzog/lcs
function copier_document($ext, $orig, $source) {

	$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
	$dir = creer_repertoire_documents($ext);
	$dest = preg_replace("/[^.=\w-]+/", "_",
			translitteration(preg_replace("/\.([^.]+)$/", "", 
						      preg_replace("/<[^>]*>/", '', basename($orig)))));

	// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
	// pour les images transformees par rotation (action/documenter)
	$dest = preg_replace(',-r(90|180|270)$,', '', $dest);

	// Si le document "source" est deja au bon endroit, ne rien faire
	if ($source == ($dir . $dest . '.' . $ext))
		return $source;

	// sinon tourner jusqu'a trouver un numero correct
	$n = 0;
	while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));

	return deplacer_fichier_upload($source, $newFile);
}
コード例 #5
0
ファイル: trombinoscopes.php プロジェクト: alhousseyni/gepi
     $msg .= "Erreur de téléchargement niveau 2.<br />";
 } else {
     if (my_strtolower($sav_photo['type']) != "image/jpeg") {
         $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg sont autorisés (<i>" . $sav_photo['name'] . "&nbsp;: " . $sav_photo['type'] . "</i>)<br />";
     } else {
         if (!(preg_match('/jpg$/i', $sav_photo['name']) || preg_match('/jpeg$/i', $sav_photo['name']))) {
             $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg ou .jpeg sont autorisés (<i>" . $sav_photo['name'] . "</i>)<br />";
         } else {
             $dest = $rep_photos;
             $sql = "SELECT elenoet FROM eleves WHERE login='******'login_photo']) . "';";
             $res_elenoet = mysqli_query($GLOBALS["mysqli"], $sql);
             if (mysqli_num_rows($res_elenoet) == 0) {
                 $msg .= "Aucun elenoet n'a été trouvé pour renommer la photo de cet élève.<br />\n";
             } else {
                 $quiestce = encode_nom_photo(old_mysql_result($res_elenoet, 0, 'elenoet'));
                 if (!deplacer_fichier_upload($sav_photo['tmp_name'], $rep_photos . $quiestce . ".jpg")) {
                     $msg .= "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire photos/eleves/<br />";
                 } else {
                     //$msg = "Téléchargement réussi.";
                     if (getSettingValue("active_module_trombinoscopes_rd") == 'y') {
                         // si le redimensionnement des photos est activé on redimenssionne
                         $source = imagecreatefromjpeg($rep_photos . $quiestce . ".jpg");
                         // La photo est la source
                         if (getSettingValue("active_module_trombinoscopes_rt") == '') {
                             $destination = imagecreatetruecolor(getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes"));
                         }
                         // On crée la miniature vide
                         // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
                         $largeur_source = imagesx($source);
                         $hauteur_source = imagesy($source);
                         $largeur_destination = imagesx($destination);
コード例 #6
0
ファイル: forum.php プロジェクト: genma/spip_ynh
/**
 * Verifier la saisie de #FORMULAIRE_FORUM
 * @param string $objet
 * @param int $id_objet
 * @param int $id_forum
 * @param int|array $ajouter_mot
 *   mots ajout�s coch�s par defaut
 * @param $ajouter_groupe
 *   groupes ajoutables
 * @param $afficher_previsu
 *   previsu oui ou non
 * @param $retour
 *   url de retour
 * @return array|bool
 */
function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour)
{
    include_spip('inc/acces');
    include_spip('inc/texte');
    include_spip('inc/session');
    include_spip('base/abstract_sql');
    $erreurs = array();
    $doc = array();
    // desactiver id_rubrique si un id_article ou autre existe dans le contexte
    // if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
    //	$id_rubrique = 0;
    // stocker un eventuel document dans un espace temporaire
    // portant la cle du formulaire ; et ses metadonnees avec
    if (isset($_FILES['ajouter_document']) and $_FILES['ajouter_document']['tmp_name']) {
        $acceptes = forum_documents_acceptes();
        if (!count($acceptes) or _request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-{$objet}-{$id_objet}")) {
            $erreurs['document_forum'] = _T('forum:documents_interdits_forum');
            unset($_FILES['ajouter_document']);
        } else {
            if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) {
                session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));
            }
            $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
            $doc =& $_FILES['ajouter_document'];
            include_spip('inc/joindre_document');
            include_spip('action/ajouter_documents');
            list($extension, $doc['name']) = fixer_extension_document($doc);
            if (!in_array($extension, $acceptes)) {
                $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes)));
            } else {
                include_spip('inc/getdocument');
                if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) {
                    $erreurs['document_forum'] = _T('copie_document_impossible');
                }
                #		else if (...)
                #		verifier le type_document autorise
                #		retailler eventuellement les photos
            }
            // si ok on stocke les meta donnees, sinon on efface
            if (isset($erreurs['document_forum'])) {
                spip_unlink($tmp . '.bin');
                unset($_FILES['ajouter_document']);
            } else {
                $doc['tmp_name'] = $tmp . '.bin';
                ecrire_fichier($tmp . '.txt', serialize($doc));
            }
        }
    } elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) and $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] and file_exists($tmp . '.bin')) {
        if (_request('supprimer_document_ajoute')) {
            spip_unlink($tmp . '.bin');
            spip_unlink($tmp . '.txt');
        } elseif (lire_fichier($tmp . '.txt', $meta)) {
            $doc =& $_FILES['ajouter_document'];
            $doc = @unserialize($meta);
        }
    }
    $min_length = defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10;
    if (strlen($texte = _request('texte')) < $min_length and !$ajouter_mot and $GLOBALS['meta']['forums_texte'] == 'oui') {
        $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', array('min' => $min_length));
    } elseif (defined('_FORUM_LONGUEUR_MAXI') and _FORUM_LONGUEUR_MAXI > 0 and strlen($texte) > _FORUM_LONGUEUR_MAXI) {
        $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', array('compte' => strlen($texte), 'max' => _FORUM_LONGUEUR_MAXI));
    }
    if (array_reduce($_POST, 'reduce_strlen', 20 * 1024) < 0) {
        $erreurs['erreur_message'] = _T('forum:forum_message_trop_long');
    } else {
        // Ne pas autoriser d'envoi hacke si forum sur abonnement
        if (controler_forum($objet, $id_objet) == 'abo' and !test_espace_prive()) {
            if (!isset($GLOBALS['visiteur_session']) or !isset($GLOBALS['visiteur_session']['statut'])) {
                $erreurs['erreur_message'] = _T('forum_non_inscrit');
            } elseif ($GLOBALS['visiteur_session']['statut'] == '5poubelle') {
                $erreurs['erreur_message'] = _T('forum:forum_acces_refuse');
            }
        }
    }
    if (strlen($titre = _request('titre')) < 3 and $GLOBALS['meta']['forums_titre'] == 'oui') {
        $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres');
    }
    if (!count($erreurs) and !_request('confirmer_previsu_forum')) {
        if ($afficher_previsu != 'non') {
            $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc, $objet, $id_objet, $id_forum);
            $erreurs['previsu'] = $previsu;
        }
    }
    //  Si forum avec previsu sans bon hash de securite, echec
    if (!count($erreurs)) {
        if (!test_espace_prive() and $afficher_previsu != 'non' and forum_insert_noprevisu()) {
            $erreurs['erreur_message'] = _T('forum:forum_acces_refuse');
        }
    }
    return $erreurs;
}
コード例 #7
0
ファイル: cfg_fichier.php プロジェクト: rhertzog/lcs
/**
 * Copier un document
 * 
 * @param string $ext    L'extension du fichier
 * @param string $dest   le nom sous lequel le sauvegarder
 * @param string $source le fichier sur le serveur (/var/tmp/xyz34)
 * @param string $dans   Où le copier
 * @return string
 */
function cfg_copier_document($ext, $dest, $source, $dans='_cfg') {

	$dest = preg_replace(',\.\.+,', '.', $dest); // pas de .. dans le nom du doc
	$dir = cfg_creer_repertoire_cfg($dans);
	$dest = preg_replace("/[^._=-\w\d]+/", "_", 
			translitteration(preg_replace("/\.([^.]+)$/", "", 
						      preg_replace("/<[^>]*>/", '', basename($dest)))));

	// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
	// pour les images transformees par rotation (action/documenter)
	$dest = preg_replace(',-r(90|180|270)$,', '', $dest);
	
	$newFile = $dir . $dest .'.'.$ext;

	return _COMPAT_CFG_192 ? cfg_deplacer_fichier_upload($source, $newFile) : deplacer_fichier_upload($source, $newFile);
}
コード例 #8
0
ファイル: forum.php プロジェクト: rhertzog/lcs
function formulaires_forum_verifier_dist(
	$titre, $table, $type, $script,
	$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
	$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
{
	include_spip('inc/acces');
	include_spip('inc/texte');
	include_spip('inc/forum');
	include_spip('inc/session');
	include_spip('base/abstract_sql');

	$erreurs = array();

	// desactiver id_rubrique si un id_article ou autre existe dans le contexte
	if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
		$id_rubrique = 0;

	// stocker un eventuel document dans un espace temporaire
	// portant la cle du formulaire ; et ses metadonnees avec

	if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))
		session_set('tmp_forum_document',
		sous_repertoire(_DIR_TMP,'documents_forum').md5(uniqid(rand())));
	$tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
	$doc = &$_FILES['ajouter_document'];
	if (isset($_FILES['ajouter_document'])
	AND $_FILES['ajouter_document']['tmp_name']) {
		// securite :
		// verifier si on possede la cle (ie on est autorise a poster)
		// (sinon tant pis) ; cf. charger.php pour la definition de la cle
		if (_request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic")) {
			$erreurs['document_forum'] = _T('public:documents_interdits_forum')
				. "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic"
				.", "
				._request('cle_ajouter_document')
			
			;
			unset($_FILES['ajouter_document']);
		} else {
			include_spip('inc/ajouter_documents');
			list($extension,$doc['name']) = fixer_extension_document($doc);
			$acceptes = forum_documents_acceptes();

			if (!in_array($extension, $acceptes)) {
				# normalement on n'arrive pas ici : pas d'upload si aucun format
				if (!$formats = join(', ',$acceptes))
					$formats = '-'; //_L('aucun');
				$erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));
			}
			else {
				include_spip('inc/getdocument');
				if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin'))
					$erreurs['document_forum'] = _T('copie_document_impossible');

#		else if (...)
#		verifier le type_document autorise
#		retailler eventuellement les photos
			}

			// si ok on stocke les meta donnees, sinon on efface
			if (isset($erreurs['document_forum'])) {
				spip_unlink($tmp.'.bin');
				unset ($_FILES['ajouter_document']);
			} else {
				$doc['tmp_name'] = $tmp.'.bin';
				ecrire_fichier($tmp.'.txt', serialize($doc));
			}
		}
	}
	// restaurer le document uploade au tour precedent
	else if (file_exists($tmp.'.bin')) {
		if (_request('supprimer_document_ajoute')) {
			spip_unlink($tmp.'.bin');
			spip_unlink($tmp.'.txt');
		} else if (lire_fichier($tmp.'.txt', $meta))
			$doc = @unserialize($meta);
	}

	if (strlen($texte = _request('texte')) < 10
	AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui')
		$erreurs['texte'] = _T('forum_attention_dix_caracteres');
	else if (defined('_FORUM_LONGUEUR_MAXI')
	AND _FORUM_LONGUEUR_MAXI > 0
	AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
		$erreurs['texte'] = _T('forum_attention_trop_caracteres',
			array(
				'compte' => strlen($texte),
				'max' => _FORUM_LONGUEUR_MAXI
			));

	if (strlen($titre=_request('titre')) < 3
	AND $GLOBALS['meta']['forums_titre'] == 'oui')
		$erreurs['titre'] = _T('forum_attention_trois_caracteres');

	if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
		if ($afficher_texte != 'non') {
			$previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc,
				$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic);
			$erreurs['previsu'] = $previsu;
		}
	}

	return $erreurs;
}
コード例 #9
0
ファイル: index.php プロジェクト: alhousseyni/gepi
 if (!isset($sav_photo['tmp_name'][$cpt_photo]) or $sav_photo['tmp_name'][$cpt_photo] == '') {
     $msg .= "Erreur de téléchargement niveau 1 (<i>photo n°{$cpt_photo}</i>).<br />";
 } else {
     if (!file_exists($sav_photo['tmp_name'][$cpt_photo])) {
         $msg .= "Erreur de téléchargement niveau 2 (<i>photo n°{$cpt_photo}</i>).<br />";
     } else {
         if (my_strtolower($sav_photo['type'][$cpt_photo]) != "image/jpeg") {
             $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg sont autorisés (<i>" . $sav_photo['name'][$cpt_photo] . "&nbsp;: " . $sav_photo['type'][$cpt_photo] . "</i>)<br />";
         } else {
             if (!(preg_match('/jpg$/i', $sav_photo['name'][$cpt_photo]) || preg_match('/jpeg$/i', $sav_photo['name'][$cpt_photo]))) {
                 $msg .= "Erreur : seuls les fichiers ayant l'extension .jpg ou .jpeg sont autorisés (<i>" . $sav_photo['name'][$cpt_photo] . "</i>)<br />";
             } else {
                 $dest = $rep_photos;
                 $n = 0;
                 //$msg.="\$rep_photos=$rep_photos<br />";
                 if (!deplacer_fichier_upload($sav_photo['tmp_name'][$cpt_photo], $rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg")) {
                     $msg .= "Problème de transfert : le fichier n°{$cpt_photo} n'a pas pu être transféré sur le répertoire photos/eleves/<br />";
                 } else {
                     //$msg = "Téléchargement réussi.";
                     $cpt_photos_mises_en_place++;
                     if (getSettingValue("active_module_trombinoscopes_rd") == 'y') {
                         // si le redimensionnement des photos est activé on redimensionne
                         if (getSettingValue("active_module_trombinoscopes_rt") != '') {
                             $redim_OK = redim_photo($rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg", getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes"), getSettingValue("active_module_trombinoscopes_rt"));
                         } else {
                             $redim_OK = redim_photo($rep_photos . encode_nom_photo($quiestce[$cpt_photo]) . ".jpg", getSettingValue("l_resize_trombinoscopes"), getSettingValue("h_resize_trombinoscopes"));
                         }
                         if (!$redim_OK) {
                             $msg .= " Echec du redimensionnement de la photo.";
                         }
                     }
コード例 #10
0
ファイル: traite_doc.php プロジェクト: rhertzog/lcs
function ajout_doc($doc_file, $id_ct, $doc_name, $cpt_doc)
{
    global $max_size, $total_max_size, $edit_devoir, $multisite;
    /* Vérification du type de fichier */
    //if (my_ereg("\.([^.]+)$", $doc_file['name'][$cpt_doc], $match)) {
    if (function_exists("mb_ereg") && mb_ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match) || function_exists("ereg") && ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match)) {
        $ext = corriger_caracteres(my_strtolower($match[1]));
        $ext = corriger_extension($ext);
    } else {
        $ext = '';
    }
    $query = "SELECT id_type FROM ct_types_documents WHERE extension='{$ext}' AND upload='oui'";
    $result = sql_query($query);
    if ($row = @sql_row($result, 0)) {
        $id_type = $row[0];
    } else {
        return "Erreur : Ce type de fichier n'est pas autorisé en téléchargement.<br />\nSi vous trouvez cela regrettable, contactez l'administrateur.<br />\nIl pourra modifier ce paramétrage dans<br />\n*Gestion des modules/Cahiers de textes/Types de fichiers autorisés en téléchargement*.";
        die;
    }
    /* Vérification de la taille du fichier */
    $sql = "select id_groupe from ct_entry where id_ct='{$id_ct}'";
    $id_groupe = sql_query1($sql);
    $max_size_ko = $max_size / 1024;
    $taille = $doc_file['size'][$cpt_doc];
    if ($taille > $max_size) {
        return "Téléchargement impossible : taille maximale autorisée : " . $max_size_ko . " Ko";
        die;
    }
    if ($taille == 0) {
        return "Le fichier sélectionné semble vide : transfert impossible.";
        die;
    }
    $query = "SELECT DISTINCT sum(taille) somme FROM ct_documents d, ct_entry e WHERE (e.id_groupe='" . $id_groupe . "' and e.id_ct = d.id_ct)";
    $total = sql_query1($query);
    if ($total + $taille > $total_max_size) {
        return "Téléchargement impossible : espace disque disponible (" . ($total_max_size - $total) / 1024 . " Ko) insuffisant.";
        die;
    }
    /* Recopier le fichier */
    $dest = '../documents/';
    $dossier = '';
    $multi = isset($multisite) && $multisite == 'y' ? $_COOKIE['RNE'] . '/' : NULL;
    if (isset($multisite) && $multisite == 'y' && is_dir('../documents/' . $multi) === false) {
        @mkdir('../documents/' . $multi);
        $dest .= $multi;
    } elseif (isset($multisite) && $multisite == 'y') {
        $dest .= $multi;
    }
    if (isset($edit_devoir)) {
        $dossier = "cl_dev" . $_POST['id_groupe'];
    } else {
        $dossier = "cl" . $_POST['id_groupe'];
    }
    if (creer_repertoire($dest, $dossier)) {
        $dest .= $dossier . '/';
    } else {
        return "Problème d'écriture sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        die;
    }
    $nom_sans_ext = mb_substr(basename($doc_file['name'][$cpt_doc]), 0, mb_strlen(basename($doc_file['name'][$cpt_doc])) - (mb_strlen($ext) + 1));
    $nom_sans_ext = my_ereg_replace("[^.a-zA-Z0-9_=-]+", "_", $nom_sans_ext);
    if (strstr($nom_sans_ext, "..")) {
        return "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        die;
    }
    $n = 0;
    while (file_exists($newFile = $dest . $nom_sans_ext . ($n++ ? '-' . $n : '') . '.' . $ext)) {
    }
    $dest_path = $newFile;
    if (!deplacer_fichier_upload($doc_file['tmp_name'][$cpt_doc], $dest_path)) {
        return "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        die;
    }
    if ($doc_name[$cpt_doc] == '') {
        $doc_name[$cpt_doc] = basename($newFile);
    }
    $nouveau = false;
    if (!isset($id_document)) {
        if (isset($edit_devoir)) {
            $query = "INSERT INTO ct_devoirs_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct_devoir='{$id_ct}', titre='" . corriger_caracteres($doc_name[$cpt_doc]) . "'";
        } else {
            $query = "INSERT INTO ct_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct='{$id_ct}', titre='" . corriger_caracteres($doc_name[$cpt_doc]) . "'";
        }
        sql_query($query);
        $id_document = is_null($___mysqli_res = mysqli_insert_id($GLOBALS["mysqli"])) ? false : $___mysqli_res;
        $nouveau = true;
    } else {
        if (isset($edit_devoir)) {
            $query = "UPDATE ct_devoirs_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct_devoir='{$id_ct}', titre='{$titre}' WHERE id_document={$id_document}";
        } else {
            $query = "UPDATE ct_documents SET taille='{$taille}', emplacement='{$dest_path}', id_ct='{$id_ct}', titre='{$titre}' WHERE id_document={$id_document}";
        }
        sql_query($query);
    }
    return "Téléchargement réussi !";
}
コード例 #11
0
/**
 * Tester le type de document
 *
 * - le document existe et n'est pas de taille 0 ?
 * - interdit a l'upload ?
 * - quelle extension dans spip_types_documents ?
 * - est-ce "inclus" comme une image ?
 *
 * Le zipper si necessaire
 *
 * @param array $file
 *     Au format $_FILES
 * @param string $mode
 *     Mode d'inclusion du fichier, si connu
 * @return array
 */
function fixer_fichier_upload($file, $mode = '')
{
    /**
     * On vérifie que le fichier existe et qu'il contient quelque chose
     */
    if (is_array($row = verifier_upload_autorise($file['name'], $mode))) {
        if (!isset($row['autozip'])) {
            $row['fichier'] = copier_document($row['extension'], $file['name'], $file['tmp_name']);
            /**
             * On vérifie que le fichier a une taille
             * si non, on le supprime et on affiche une erreur
             */
            if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) {
                spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)");
                spip_unlink(get_spip_doc($row['fichier']));
                return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name']));
            } else {
                return $row;
            }
        } else {
            unset($row['autozip']);
            $ext = 'zip';
            if (!($tmp_dir = tempnam(_DIR_TMP, 'tmp_upload'))) {
                return false;
            }
            spip_unlink($tmp_dir);
            @mkdir($tmp_dir);
            include_spip('inc/charsets');
            $tmp = $tmp_dir . '/' . translitteration($file['name']);
            $file['name'] .= '.' . $ext;
            # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip
            // deplacer le fichier tmp_name dans le dossier tmp
            deplacer_fichier_upload($file['tmp_name'], $tmp, true);
            include_spip('inc/pclzip');
            $source = _DIR_TMP . basename($tmp_dir) . '.' . $ext;
            $archive = new PclZip($source);
            $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, '');
            effacer_repertoire_temporaire($tmp_dir);
            if (!$v_list) {
                spip_log("Echec creation du zip ");
                return false;
            }
            $row['fichier'] = copier_document($row['extension'], $file['name'], $source);
            spip_unlink($source);
            /**
             * On vérifie que le fichier a une taille
             * si non, on le supprime et on affiche une erreur
             */
            if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) {
                spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)");
                spip_unlink(get_spip_doc($row['fichier']));
                return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name']));
            } else {
                return $row;
            }
        }
    } else {
        return $row;
    }
    // retourner le message d'erreur
}
コード例 #12
0
ファイル: accueil_sauve.php プロジェクト: alhousseyni/gepi
    check_token();
    $sav_file = isset($_FILES["sav_file"]) ? $_FILES["sav_file"] : NULL;
    //echo "\$sav_file['tmp_name']=".$sav_file['tmp_name']."<br />";
    if (!isset($sav_file['tmp_name']) or $sav_file['tmp_name'] == '') {
        $msg = "Erreur de téléchargement " . $sav_file['tmp_name'] . ' ' . $dirname;
    } else {
        if (!file_exists($sav_file['tmp_name'])) {
            $msg = "Erreur de téléchargement." . $dirname . ' ' . $sav_file['tmp_name'];
        } else {
            if (!preg_match('/sql$/', $sav_file['name']) and !preg_match('/gz$/', $sav_file['name'])) {
                $msg = "Erreur : seuls les fichiers ayant l'extension .sql ou .gz sont autorisés.";
            } else {
                $dest = "../backup/" . $dirname . "/";
                $n = 0;
                $nom_corrige = preg_replace("/[^.a-zA-Z0-9_=-]+/", "_", $sav_file['name']);
                if (!deplacer_fichier_upload($sav_file['tmp_name'], "../backup/" . $dirname . "/" . $nom_corrige)) {
                    $msg = "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire backup";
                } else {
                    $msg = "Téléchargement réussi.";
                }
            }
        }
    }
}
// Suppression d'un fichier
if (isset($action) and $action == 'sup') {
    check_token();
    if (isset($_GET['file']) && $_GET['file'] != '') {
        if (isset($_GET['sous_dossier']) && $_GET['sous_dossier'] == 'absences') {
            if (@unlink("../backup/" . $dirname . "/absences/" . $_GET['file'])) {
                $msg = "Le fichier <b>" . $_GET['file'] . "</b> a été supprimé.<br />\n";
コード例 #13
0
ファイル: gestion_base_test.php プロジェクト: rhertzog/lcs
// Téléchargement d'un fichier vers backup
if (isset($action) and $action == 'upload') {
    check_token();
    $sav_file = isset($_FILES["sav_file"]) ? $_FILES["sav_file"] : NULL;
    if (!isset($sav_file['tmp_name']) or $sav_file['tmp_name'] == '') {
        $msg = "Erreur de téléchargement.";
    } else {
        if (!file_exists($sav_file['tmp_name'])) {
            $msg = "Erreur de téléchargement.";
        } else {
            if (!preg_match('/sql$/', $sav_file['name']) and !preg_match('/gz$/', $sav_file['name'])) {
                $msg = "Erreur : seuls les fichiers ayant l'extension .sql ou .gz sont autorisés.";
            } else {
                $dest = "../backup/" . $dirname . "/";
                $n = 0;
                if (!deplacer_fichier_upload($sav_file['tmp_name'], "../backup/" . $dirname . "/data_test.sql")) {
                    $msg = "Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire backup";
                } else {
                    $msg = "Téléchargement réussi.";
                }
            }
        }
    }
}
// Protection du répertoire backup
if (isset($action) and $action == 'protect') {
    check_token();
    include_once "../lib/class.htaccess.php";
    // Instance of the htaccess class
    //$ht = & new htaccess(TRUE);
    $ht = new htaccess(TRUE);
コード例 #14
0
ファイル: editer_logo.php プロジェクト: JLuc/SPIP
/**
 * @param string $objet
 * @param int $id_objet
 * @param string $etat
 *   on ou off
 * @param string|array $source
 *   array : sous tableau de $_FILE issu de l'upload
 *   string : fichier source (chemin complet ou chemin relatif a tmp/upload)
 * @return string
 */
function logo_modifier($objet, $id_objet, $etat, $source)
{
    $chercher_logo = charger_fonction('chercher_logo', 'inc');
    $objet = objet_type($objet);
    $primary = id_table_objet($objet);
    include_spip('inc/chercher_logo');
    $type = type_du_logo($primary);
    // nom du logo
    $nom = $type . $etat . $id_objet;
    // supprimer le logo eventueel existant
    logo_supprimer($objet, $id_objet, $etat);
    include_spip('inc/documents');
    $erreur = "";
    if (!$source) {
        spip_log("spip_image_ajouter : source inconnue");
        $erreur = "source inconnue";
        return $erreur;
    }
    $file_tmp = _DIR_LOGOS . $nom . '.tmp';
    $ok = false;
    // fichier dans upload/
    if (is_string($source)) {
        if (file_exists($source)) {
            $ok = @copy($source, $file_tmp);
        } elseif (file_exists($f = determine_upload() . $source)) {
            $ok = @copy($f, $file_tmp);
        }
    } elseif (!($erreur = check_upload_error($source['error'], "", true))) {
        // analyse le type de l'image (on ne fait pas confiance au nom de
        // fichier envoye par le browser : pour les Macs c'est plus sur)
        $ok = deplacer_fichier_upload($source['tmp_name'], $file_tmp);
    }
    if ($erreur) {
        return $erreur;
    }
    if (!$ok or !file_exists($file_tmp)) {
        spip_log($erreur = "probleme de copie pour {$file_tmp} ");
        return $erreur;
    }
    $size = @getimagesize($file_tmp);
    $type = !$size ? '' : ($size[2] > 3 ? '' : $GLOBALS['formats_logos'][$size[2] - 1]);
    if ($type) {
        @rename($file_tmp, $file_tmp . ".{$type}");
        $file_tmp = $file_tmp . ".{$type}";
        $poids = filesize($file_tmp);
        if (defined('_LOGO_MAX_WIDTH') or defined('_LOGO_MAX_HEIGHT')) {
            if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) {
                $max_width = (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH) ? _LOGO_MAX_WIDTH : '*';
                $max_height = (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT) ? _LOGO_MAX_HEIGHT : '*';
                // pas la peine d'embeter le redacteur avec ca si on a active le calcul des miniatures
                // on met directement a la taille maxi a la volee
                if (isset($GLOBALS['meta']['creer_preview']) and $GLOBALS['meta']['creer_preview'] == 'oui') {
                    include_spip('inc/filtres');
                    $img = filtrer('image_reduire', $file_tmp, $max_width, $max_height);
                    $img = extraire_attribut($img, 'src');
                    $img = supprimer_timestamp($img);
                    if (@file_exists($img) and $img !== $file_tmp) {
                        spip_unlink($file_tmp);
                        @rename($img, $file_tmp);
                        $size = @getimagesize($file_tmp);
                    }
                }
                // verifier au cas ou image_reduire a echoue
                if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) {
                    spip_unlink($file_tmp);
                    $erreur = _T('info_logo_max_poids', array('maxi' => _T('info_largeur_vignette', array('largeur_vignette' => $max_width, 'hauteur_vignette' => $max_height)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1]))));
                }
            }
        }
        if (!$erreur and defined('_LOGO_MAX_SIZE') and _LOGO_MAX_SIZE and $poids > _LOGO_MAX_SIZE * 1024) {
            spip_unlink($file_tmp);
            $erreur = _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024), 'actuel' => taille_en_octets($poids)));
        }
        if (!$erreur) {
            @rename($file_tmp, _DIR_LOGOS . $nom . ".{$type}");
        }
    } else {
        spip_unlink($file_tmp);
        $erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $GLOBALS['formats_logos'])));
    }
    return $erreur;
}
コード例 #15
0
ファイル: traite_doc.php プロジェクト: rhertzog/lcs
function ajout_fichier($doc_file, $dest, $cpt_doc, $id_groupe)
{
    global $max_size, $total_max_size;
    /* Vérification du type de fichier */
    $ext = '';
    //if (my_ereg("\.([^.]+)$", $doc_file['name'][$cpt_doc], $match)) {
    if (function_exists("mb_ereg") && mb_ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match) || function_exists("ereg") && ereg("\\.([^.]+)\$", $doc_file['name'][$cpt_doc], $match)) {
        $ext = corriger_caracteres(my_strtolower($match[1]));
        $ext = corriger_extension($ext);
    }
    $query = "SELECT id_type FROM ct_types_documents WHERE extension='{$ext}' AND upload='oui'";
    $result = sql_query($query);
    if ($row = @sql_row($result, 0)) {
        $id_type = $row[0];
    } else {
        echo "Erreur : Ce type de fichier n'est pas autorisé en téléchargement.\nSi vous trouvez cela regrettable, contactez l'administrateur.\nIl pourra modifier ce paramétrage dans\n   *Gestion des modules/Cahiers de textes/Types de fichiers autorisés en téléchargement*.";
        die;
    }
    /* Vérification de la taille du fichier */
    $max_size_ko = $max_size / 1024;
    $taille = $doc_file['size'][$cpt_doc];
    if ($taille > $max_size) {
        echo "Erreur : Téléchargement impossible : taille maximale autorisée : " . $max_size_ko . " Ko";
        die;
    }
    if ($taille == 0) {
        echo "Le fichier sélectionné semble vide : transfert impossible.";
        die;
    }
    $query = "SELECT DISTINCT sum(taille) somme FROM ct_documents d, ct_entry e WHERE (e.id_groupe='" . $id_groupe . "' and e.id_ct = d.id_ct)";
    $total = sql_query1($query);
    if ($total + $taille > $total_max_size) {
        echo "Erreur : Téléchargement impossible : espace disque disponible (" . ($total_max_size - $total) / 1024 . " Ko) insuffisant.";
        die;
    }
    /* Crétion du répertoire de destination */
    if (!creer_repertoire($dest)) {
        echo "Erreur : Problème d'écriture sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        echo $dest;
        die;
    }
    /* Recopier le fichier */
    $nom_sans_ext = mb_substr(basename($doc_file['name'][$cpt_doc]), 0, mb_strlen(basename($doc_file['name'][$cpt_doc])) - (mb_strlen($ext) + 1));
    $nom_sans_ext = my_ereg_replace("[^.a-zA-Z0-9_=-]+", "_", $nom_sans_ext);
    if (strstr($nom_sans_ext, "..")) {
        echo "Erreur : Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        die;
    }
    $n = 0;
    while (file_exists($newFile = $dest . "/" . $nom_sans_ext . ($n++ ? '-' . $n : '') . '.' . $ext)) {
    }
    $dest_file_path = $newFile;
    if (!deplacer_fichier_upload($doc_file['tmp_name'][$cpt_doc], $dest_file_path)) {
        echo "Erreur : Problème de transfert : le fichier n'a pas pu être transféré sur le répertoire. Veuillez signaler ce problème à l'administrateur du site";
        die;
    }
    return $dest_file_path;
}
コード例 #16
0
ファイル: ajouter_documents.php プロジェクト: rhertzog/lcs
function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs, $titrer=false) {

	include_spip('inc/modifier');

// Documents distants : pas trop de verifications bloquantes, mais un test
// via une requete HEAD pour savoir si la ressource existe (non 404), si le
// content-type est connu, et si possible recuperer la taille, voire plus.

	if ($mode == 'distant') {
		include_spip('inc/distant');
		if ($a = recuperer_infos_distantes($source)) {

			# NB: dans les bonnes conditions (fichier autorise et pas trop gros)
			# $a['fichier'] est une copie locale du fichier

			$type_image = $a['type_image'];

			unset($a['type_image']);
			unset($a['body']);

			$a['date'] = date('Y-m-d H:i:s');
			$a['distant'] = 'oui';
			$a['mode'] = 'document';
			$a['fichier'] = set_spip_doc($source);
		}
		else {
			spip_log("Echec du lien vers le document $source, abandon");
			return;
		}
	} else { // pas distant

		$type_image = ''; // au pire
		// tester le type de document :
		// - interdit a l'upload ?
		// - quelle extension dans spip_types_documents ?
		// - est-ce "inclus" comme une image ?
		list($nom_envoye, $ext, $titre, $inclus) = corriger_extension_et_nom($nom_envoye, $titrer);

		if ($inclus !== false) {
			$type_inclus_image = ($inclus == 'image');
			$fichier = copier_document($ext, $nom_envoye, $source);
		} else {

/* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */
			$type_inclus_image = false;

			if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) {
				spip_log("Extension $ext interdite a l'upload");
				return;
			}

			$ext = 'zip';
			if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return;
			spip_unlink($tmp_dir); @mkdir($tmp_dir);
			$tmp = $tmp_dir.'/'.translitteration($nom_envoye);
			$nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip
			deplacer_fichier_upload($source, $tmp);
			include_spip('inc/pclzip');
			$source = _DIR_TMP . 'archive.zip';
			$archive = new PclZip($source);
			$v_list = $archive->create($tmp,
				PCLZIP_OPT_REMOVE_PATH, $tmp_dir,
				PCLZIP_OPT_ADD_PATH, '');
			effacer_repertoire_temporaire($tmp_dir);
			if (!$v_list) {
				spip_log("Echec creation du zip ");
				return;
			}
			$fichier = copier_document($ext, $nom_envoye, $source);
			spip_unlink($source);
		}

		// Prevoir traitement specifique pour videos
		// (http://www.getid3.org/ peut-etre
		if ($ext == "mov") {
			$largeur = 0;
			$hauteur = 0;
		} else if ($ext == "svg") {
			// recuperer les dimensions et supprimer les scripts
			list($largeur,$hauteur)= traite_svg($fichier);
		} else { // image ?
		// Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
			$size_image = @getimagesize($fichier);
			$largeur = intval($size_image[0]);
			$hauteur = intval($size_image[1]);
			$type_image = decoder_type_image($size_image[2]);
		}

		// Quelques infos sur le fichier
		if (!$fichier OR !@file_exists($fichier)
		OR !$taille = @intval(filesize($fichier))) {
			spip_log ("Echec copie du fichier $fichier");
			return;
		}
		
		// _INTERFACE_DOCUMENTS
		// Si mode == 'choix', fixer le mode image/document
		if ($mode == 'choix') {
			$choisir_mode_document = charger_fonction('choisir_mode_document','inc');
			$mode = $choisir_mode_document($fichier, $type_lien, $type_image, $largeur, $hauteur);
		}


		if (!$type_image) {
			if (_DOC_MAX_SIZE > 0
			AND $taille > _DOC_MAX_SIZE*1024) {
				spip_unlink ($fichier);
				check_upload_error(6,
				_T('info_logo_max_poids',
					array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024),
					'actuel' => taille_en_octets($taille))));
			}
			if ($mode == 'image') {
				spip_log ("le format de $fichier ne convient pas pour une image");
				spip_unlink($fichier);
				return;
			}
		}
		else { // image
			if (_IMG_MAX_SIZE > 0
			AND $taille > _IMG_MAX_SIZE*1024) {
				spip_unlink ($fichier);
				check_upload_error(6,
				_T('info_logo_max_poids',
					array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024),
					'actuel' => taille_en_octets($taille))));
			}
	
			if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT
			AND ($size_image[0] > _IMG_MAX_WIDTH
			OR $size_image[1] > _IMG_MAX_HEIGHT)) {
				spip_unlink ($fichier);
				check_upload_error(6, 
				_T('info_logo_max_taille',
					array(
					'maxi' =>
						_T('info_largeur_vignette',
							array('largeur_vignette' => _IMG_MAX_WIDTH,
							'hauteur_vignette' => _IMG_MAX_HEIGHT)),
					'actuel' =>
						_T('info_largeur_vignette',
							array('largeur_vignette' => $size_image[0],
							'hauteur_vignette' => $size_image[1]))
				)));
			}
		}

		// Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
		if ($mode == 'vignette') {
			if (!$type_inclus_image) {
				spip_log ("le format de $fichier ne convient pas pour une image"); # SVG
				spip_unlink($fichier);
				return;
			}

			if (!($largeur OR $hauteur)) {
				spip_log('erreur upload vignette '.$fichier);
				spip_unlink($fichier);
				return;
			}
		} elseif (!in_array($mode, array('distant', 'image', 'document'))) {
			if ($type_image AND $type_inclus_image)
				$mode = 'image';
			else
				$mode = 'document';
		}
		$a =  array(
			'date' => date('Y-m-d H:i:s'),
			'distant' => 'non',
			'mode' => $mode,
			'titre'=> $titre,
			'largeur' => $largeur,
			'hauteur' => $hauteur,
			'taille' => $taille,
			'extension'=> $ext, 
			'fichier' => set_spip_doc($fichier));
	}

	if (($id_document=intval($id_document)) AND $mode!='vignette') {

		 // Mise a jour des descripteurs d'un vieux doc
		unset($a['titre']);
		unset($a['date']);
		unset($a['distant']);
		unset($a['mode']);

		sql_updateq('spip_documents', $a, "id_document=$id_document");
		$id = $id_document;

	} else {
	// Installer le document dans la base
	// attention piege semantique : les images s'installent en mode 'vignette'
	// note : la fonction peut "mettre a jour un document" si on lui
	// passe "mode=document" et "id_document=.." (pas utilise)

		// Envoyer aux plugins
		$a = pipeline('pre_insertion',
			array(
				'args' => array(
					'table' => 'spip_documents',
				),
				'data' => $a
			)
		);

		if (strlen($a['fichier']) > 255) {
			spip_log("Upload avec nom > 255 : " . $a['fichier']);
			return;
		}
		$id = sql_insertq("spip_documents", $a);

		pipeline('post_insertion',
			array(
				'args' => array(
					'table' => 'spip_documents',
					'id_objet' => $id_document
				),
				'data' => $a
			)
		);

		spip_log ("ajout du document $source $nom_envoye  (M '$mode' T '$type_lien' L '$id_lien' D '$id')");

		if ($id_lien AND $id
		AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
		) {
			sql_insertq('spip_documents_liens',
				    array('id_document' => $id,
					  'id_objet' => $id_lien,
					  'objet' => $type_lien));
		} else spip_log("Pb d'insertion $id_lien $type_lien");

		if ($id_document) {
			sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document");

		} else  $id_document = $id;


		// Appliquer l'exif orientation
		// http://trac.rezo.net/trac/spip/ticket/1494
		define('_TOURNER_SELON_EXIF', false); # par defaut non, risque memoire
		if (defined('_TOURNER_SELON_EXIF')
		AND _TOURNER_SELON_EXIF
		AND $mode == 'document'
		AND $a['distant'] == 'non'
		AND $a['extension'] == 'jpg') {
			include_spip('action/tourner');
			tourner_selon_exif_orientation($id_document, $fichier);
		}

	}
	// pour que le retour vers ecrire/ active le bon doc.
	$documents_actifs[$fichier] = $id_document;
	// Notifications, gestion des revisions, reindexation...
	pipeline('post_edition',
		array(
			'args' => array(
				'operation' => 'ajouter_document',
				'table' => 'spip_documents',
				'id_objet' => $id,
				'type_image' => $type_image
			),
			'data' => null
		)
	);

	return $id ;
}