Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
function nom_fichier_copie_locale($source, $extension)
{
    include_spip('inc/documents');
    $d = creer_repertoire_documents('distant');
    # IMG/distant/
    $d = sous_repertoire($d, $extension);
    # IMG/distant/pdf/
    // on se place tout le temps comme si on etait a la racine
    if (_DIR_RACINE) {
        $d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
    }
    $m = md5($source);
    return $d . substr(preg_replace(',[^\\w-],', '', basename($source)) . '-' . $m, 0, 12) . substr($m, 0, 4) . ".{$extension}";
}
Exemple #4
0
function joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs)
{
	    $ajouter_documents = charger_fonction('ajouter_documents', 'inc');
	    define('_tmp_dir', creer_repertoire_documents($hash));

	    if (_tmp_dir == _DIR_IMG)
	      {include_spip('inc/minipres');
		echo minipres(_T('avis_operation_impossible'));
		exit;
	      }
	    include_spip('inc/pclzip');
	    $archive = new PclZip($path);
	    $archive->extract(
			      PCLZIP_OPT_PATH, _tmp_dir,
			      PCLZIP_CB_PRE_EXTRACT, 'callback_deballe_fichier'
			      );
	    $contenu = verifier_compactes($archive);
	    $titrer = _request('titrer') == 'on';
	    foreach ($contenu as $fichier => $size) {
		$f = basename($fichier);
		$x = $ajouter_documents(_tmp_dir. $f, $f,
			$type, $id, $mode, $id_document, $actifs, $titrer);
	    }
	    effacer_repertoire_temporaire(_tmp_dir);
	    return $x;
}
/**
 * Recuperer le nom du fichier selon le mode d'upload choisi
 * et mettre cela au format $_FILES
 *
 * Renvoie une liste de fichier ou un message en cas d'erreur
 *
 * @return string/array
 */
function joindre_trouver_fichier_envoye()
{
    static $files = array();
    // on est appele deux fois dans un hit, resservir ce qu'on a trouve a la verif
    // lorsqu'on est appelle au traitement
    if (count($files)) {
        return $files;
    }
    if (_request('joindre_upload')) {
        $post = isset($_FILES) ? $_FILES : $GLOBALS['HTTP_POST_FILES'];
        $files = array();
        if (is_array($post)) {
            include_spip('action/ajouter_documents');
            foreach ($post as $file) {
                if (is_array($file['name'])) {
                    while (count($file['name'])) {
                        $test = array('error' => array_shift($file['error']), 'name' => array_shift($file['name']), 'tmp_name' => array_shift($file['tmp_name']), 'type' => array_shift($file['type']));
                        if (!($test['error'] == 4)) {
                            if (is_string($err = joindre_upload_error($test['error']))) {
                                return $err;
                            }
                            // un erreur upload
                            if (!is_array(verifier_upload_autorise($test['name']))) {
                                return _T('medias:erreur_upload_type_interdit', array('nom' => $test['name']));
                            }
                            $files[] = $test;
                        }
                    }
                } else {
                    //UPLOAD_ERR_NO_FILE
                    if (!($file['error'] == 4)) {
                        if (is_string($err = joindre_upload_error($file['error']))) {
                            return $err;
                        }
                        // un erreur upload
                        if (!is_array(verifier_upload_autorise($file['name']))) {
                            return _T('medias:erreur_upload_type_interdit', array('nom' => $file['name']));
                        }
                        $files[] = $file;
                    }
                }
            }
            if (!count($files)) {
                return _T('medias:erreur_indiquez_un_fichier');
            }
        }
        return $files;
    } elseif (_request('joindre_distant')) {
        $path = _request('url');
        if (!strlen($path) or $path == 'http://') {
            return _T('medias:erreur_indiquez_un_fichier');
        }
        include_spip('action/ajouter_documents');
        $infos = renseigner_source_distante($path);
        if (!is_array($infos)) {
            return $infos;
        } else {
            return array(array('name' => basename($path), 'tmp_name' => $path, 'distant' => true));
        }
    } elseif (_request('joindre_ftp')) {
        $path = _request('cheminftp');
        if (!$path || strstr($path, '..')) {
            return _T('medias:erreur_indiquez_un_fichier');
        }
        include_spip('inc/documents');
        include_spip('inc/actions');
        $upload = determine_upload();
        if ($path != '/' and $path != './') {
            $upload .= $path;
        }
        if (!is_dir($upload)) {
            return array(array('name' => basename($upload), 'tmp_name' => $upload));
        } else {
            // on upload tout un repertoire
            $files = array();
            foreach (preg_files($upload) as $fichier) {
                $files[] = array('name' => basename($fichier), 'tmp_name' => $fichier);
            }
            return $files;
        }
    } elseif (_request('joindre_zip') and $token_zip = _request('chemin_zip')) {
        $zip_to_clean = isset($GLOBALS['visiteur_session']['zip_to_clean']) ? unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array();
        if (!$zip_to_clean or !isset($zip_to_clean[$token_zip]) or !($path = $zip_to_clean[$token_zip])) {
            return _T('avis_operation_impossible');
        }
        include_spip('inc/documents');
        //pour creer_repertoire_documents
        define('_tmp_zip', $path);
        define('_tmp_dir', creer_repertoire_documents(md5($path . $GLOBALS['visiteur_session']['id_auteur'])));
        if (_tmp_dir == _DIR_IMG) {
            return _T('avis_operation_impossible');
        }
        $files = array();
        if (_request('options_upload_zip') == 'deballe') {
            $files = joindre_deballer_lister_zip($path, _tmp_dir);
        }
        // si le zip doit aussi etre conserve, l'ajouter
        if (_request('options_upload_zip') == 'upload' or _request('options_deballe_zip_conserver')) {
            $files[] = array('name' => basename($path), 'tmp_name' => $path);
        }
        return $files;
    }
    return array();
}