Example #1
0
function action_copier_local_post($id_document) {

	// Il faut la source du document pour le copier
	$row = sql_fetsel("fichier, descriptif", "spip_documents", "id_document=$id_document");
	$source = $row['fichier'];

	include_spip('inc/distant'); // pour 'copie_locale'
	include_spip('inc/documents'); // pour 'set_spip_doc'
	$fichier = copie_locale($source);
	if ($fichier) {
		$fichier = _DIR_RACINE . $fichier;
		$taille = filesize($fichier);
		// On le sort du repertoire IMG/distant/
		$dest = preg_replace(',^.*/distant/[^/_]+[/_],', '', $fichier);
		$dest = sous_repertoire(_DIR_IMG, preg_replace(',^.*\.,', '', $fichier)) . $dest;
		if ($dest != $fichier
		AND @rename($fichier, $dest))
			$fichier = $dest;

		// On indique l'ancien URL dans le descriptif (pis-aller)
		$row['descriptif'] .= ($row['descriptif'] ? "\n\n":'') . "[->$source]";

		// $fichier contient IMG/distant/...
		// or, dans la table documents, IMG doit etre exclu.
		$fichier = set_spip_doc($fichier);
		spip_log("convertit doc $id_document en local: $source => $fichier");
		sql_updateq('spip_documents', array('fichier' =>$fichier, 'distant'=>'non', 'taille'=>$taille, 'descriptif'=> $row['descriptif']),"id_document=".$id_document);
		
	} else {
		spip_log("echec copie locale $source");
	}
}
Example #2
0
function formulaires_restauration_cfg_charger_dist()
{
    $fonds = array();
    $pages_cfg = explode(':', _SARKASPIP_PAGES_CONFIG);
    foreach ($pages_cfg as $_page) {
        if ($_page != 'maintenance') {
            $fond = "sarkaspip_{$_page}";
            $fonds[$fond] = _T("sarkaspip:{$fond}");
        }
    }
    $dir = sous_repertoire(_DIR_TMP, "cfg");
    $saves = preg_files($dir, implode('|', array_flip($fonds)));
    $options = '';
    $groupe = '';
    foreach ($saves as $_fichier) {
        $nom = basename($_fichier);
        $dirs = explode('/', dirname($_fichier));
        $_dir = end($dirs);
        if ($_dir != $groupe) {
            if ($options) {
                $options .= '</optgroup>';
            }
            $options .= '<optgroup style="font-weight: strong;" label="' . $fonds[$_dir] . '">';
            $groupe = $_dir;
        }
        $options .= '<option value="' . $_fichier . '">' . $nom . '</option>';
    }
    if ($options) {
        $options .= '</optgroup>';
    }
    $valeurs = array('_fichiers_sauvegardes' => $options);
    return $valeurs;
}
Example #3
0
function formulaires_sauvegarde_cfg_traiter_dist()
{
    $message = array();
    $fonds = array();
    $mode = _request('mode');
    if ($mode == 'page') {
        $fonds[] = _request('fond_a_sauvegarder');
    } else {
        $pages_cfg = explode(':', _SARKASPIP_PAGES_CONFIG);
        foreach ($pages_cfg as $_page) {
            if ($_page != 'maintenance') {
                $fonds[] = "sarkaspip_{$_page}";
            }
        }
    }
    $dir_cfg = sous_repertoire(_DIR_TMP, "cfg");
    include_spip('inc/sarkaspip_filtres');
    $ok = sauvegarder_fonds($fonds, $dir_cfg, 'maintenance');
    if (!$ok) {
        $message['message_nok'] = _T('sarkaspip:cfg_msg_fichier_sauvegarde_nok');
    }
    if ($ok) {
        if ($mode == 'page') {
            $message['message_ok'] = _T('sarkaspip:cfg_msg_fichier_sauvegarde_ok', array('nom_fichier' => $nom));
        } else {
            $message['message_ok'] = _T('sarkaspip:cfg_msg_fichiers_sauvegardes_ok');
        }
    }
    return $message;
}
/**
 * Minifier un fichier JS ou CSS
 *
 * Si la source est un chemin, on retourne un chemin avec le contenu minifié
 * dans _DIR_VAR/cache_$format/
 * Si c'est un flux on le renvoit compacté
 * Si on ne sait pas compacter, on renvoie ce qu'on a recu
 *
 * @param string $source
 *     Contenu à minifier ou chemin vers un fichier dont on veut minifier le contenu
 * @param string $format
 *     Format de la source (js|css).
 * @return string
 *     - Contenu minifié (si la source est un contenu)
 *     - Chemin vers un fichier ayant le contenu minifié (si source est un fichier)
 */
function minifier($source, $format = null)
{
    if (!$format and preg_match(',\\.(js|css)$,', $source, $r)) {
        $format = $r[1];
    }
    include_spip('inc/compresseur_minifier');
    if (!function_exists($minifier = 'minifier_' . $format)) {
        return $source;
    }
    // Si on n'importe pas, est-ce un fichier ?
    if (!preg_match(',[\\s{}],', $source) and preg_match(',\\.' . $format . '$,i', $source, $r) and file_exists($source)) {
        // si c'est une css, il faut reecrire les url en absolu
        if ($format == 'css') {
            $source = url_absolue_css($source);
        }
        $f = basename($source, '.' . $format);
        $f = sous_repertoire(_DIR_VAR, 'cache-' . $format) . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-minify-" . substr(md5("{$source}-minify"), 0, 4) . "\\2", $f, 1) . '.' . $format;
        if (@filemtime($f) > @filemtime($source) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')) {
            return $f;
        }
        if (!lire_fichier($source, $contenu)) {
            return $source;
        }
        // traiter le contenu
        $contenu = $minifier($contenu);
        // ecrire le fichier destination, en cas d'echec renvoyer la source
        if (ecrire_fichier($f, $contenu, true)) {
            return $f;
        } else {
            return $source;
        }
    }
    // Sinon simple minification de contenu
    return $minifier($source);
}
Example #5
0
function install_etape_4_dist()
{
    // creer le repertoire cache, qui sert partout !
    if (!@file_exists(_DIR_CACHE)) {
        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
    }
    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
    echo info_progression_etape(4, 'etape_', 'install/');
    echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>";
    echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>";
    // installer les extensions
    include_spip('inc/plugin');
    $afficher = charger_fonction("afficher_liste", 'plugins');
    echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin');
    // si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape
    // car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour)
    // au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin
    // et procede alors a l'installation
    if (!isset($GLOBALS['meta']['version_installee']) or $GLOBALS['spip_version_base'] == str_replace(',', '.', $GLOBALS['meta']['version_installee'])) {
        plugin_installes_meta();
    }
    // mettre a jour si necessaire l'adresse du site
    // securite si on arrive plus a se loger
    include_spip('inc/config');
    appliquer_adresse_site('');
    // aller a la derniere etape qui clos l'install et redirige
    $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive'));
    echo generer_form_ecrire('install', $suite);
    echo install_fin_html();
}
function revisions_repair_unserialized_fragments()
{
    $res = sql_select("*", "spip_versions_fragments", "compress=" . intval(-1));
    $n = sql_count($res);
    spip_log("{$n} fragments a verifier", "maj");
    while ($row = sql_fetch($res)) {
        $fragment = $row['fragment'];
        $set = array('compress' => 0);
        // verifier que le fragment est bien serializable
        if (unserialize($fragment) === false and strncmp($fragment, "corrompu", 8) !== 0) {
            $dir_tmp = sous_repertoire(_DIR_TMP, "versions_fragments_corrompus");
            $set['fragment'] = revisions_repair_serialise($fragment);
            if (strncmp($set['fragment'], "corrompu", 8) == 0) {
                $f = $row['id_fragment'] . "-" . $row['objet'] . "-" . $row['id_objet'];
                spip_log("Fragment serialize corrompu {$f}", "maj" . _LOG_ERREUR);
                $f = $f . "-serialize.txt";
                ecrire_fichier($dir_tmp . $f, $fragment);
            }
        }
        sql_updateq("spip_versions_fragments", $set, $w = "id_fragment=" . intval($row['id_fragment']) . " AND id_objet=" . intval($row['id_objet']) . " AND objet=" . sql_quote($row['objet']) . " AND version_min=" . intval($row['version_min']));
        #spip_log($w,"maj");
        if (time() > _TIME_OUT) {
            return;
        }
    }
}
Example #7
0
/**
 * Vérifier et préparer l'arborescence jusqu'au répertoire parent
 *
 * @param string $dest
 * @return bool|string
 *     false en cas d'échec
 *     Chemin du répertoire sinon
 */
function teleporter_verifier_destination($dest)
{
    $dest = rtrim($dest, "/");
    $final = basename($dest);
    $base = dirname($dest);
    $create = array();
    // on cree tout le chemin jusqu'a dest non inclus
    while (!is_dir($base)) {
        $create[] = basename($base);
        $base = dirname($base);
    }
    while (count($create)) {
        if (!is_writable($base)) {
            return false;
        }
        $base = sous_repertoire($base, array_pop($create));
        if (!$base) {
            return false;
        }
    }
    if (!is_writable($base)) {
        return false;
    }
    return $base . "/{$final}";
}
Example #8
0
function install_etape_4_dist()
{
    // creer le repertoire cache, qui sert partout !
    if (!@file_exists(_DIR_CACHE)) {
        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
    }
    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
    echo info_progression_etape(4, 'etape_', 'install/');
    echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>";
    echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>";
    // installer les extensions
    include_spip('inc/plugin');
    $afficher = charger_fonction("afficher_liste", 'plugins');
    echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin');
    plugin_installes_meta();
    // mettre a jour si necessaire l'adresse du site
    // securite si on arrive plus a se loger
    include_spip('inc/config');
    appliquer_adresse_site('');
    // aller a la derniere etape qui clos l'install et redirige
    $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive'));
    echo generer_form_ecrire('install', $suite);
    echo install_fin_html();
}
Example #9
0
function action_pdf2swf_convert() {
    global $visiteur_session;
    
    $id_auteur = $visiteur_session['id_auteur'];
    $arg = _request('arg');
    $args = explode(":",$arg);
	
    // le 1er element de _request('arg') est id_article=XXX
    $Targs = explode("=", $args[0]);
    $id_article = $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/pdf2swf/id_auteur/ => le creer si il n'existe pas
    $base_dezip = _DIR_TMP."pdf2swf/";   // avec / final
    if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'pdf2swf')) die (_T('pdfswf:err_repertoire_tmp'));  
    $rep_dezip = $base_dezip.$id_auteur.'/';
    if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('pdfswf:err_repertoire_tmp'));
    
	// traitement d'un fichier pdf envoye par $_POST 
    $fichier_zip = addslashes($_FILES['fichier_pdf']['name']);
    if ($_FILES['fichier_pdf']['name'] == '' 
        OR $_FILES['fichier_pdf']['error'] != 0
        OR !move_uploaded_file($_FILES['fichier_pdf']['tmp_name'], $rep_dezip.$fichier_zip)
       )  die(_T('pdfswf:err_telechargement_fichier'));

   // conversion du fichier pdf en swf
//    $command='pdf2swf -t '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; 
    $command='pdf2swf -t -B '. _DIR_PLUGIN_PDF2SWF.'fdplayer.swf  '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; 
	exec($command);
	
	//attacher le fichier pdf original a l'article
        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_swf = $ajouter_documents($rep_dezip.$fichier_zip.'.swf', $fichier_zip.'.swf', "article", $id_article, 'document', 0, $toto='');

 
	// si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant
    if (_request('attacher_pdf') == '1') {
        $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto='');

    }
    
    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("&amp;","&",urldecode($redirect)),'id_article',$id_article,'&'));
}
Example #10
0
function base_dump_dir($meta){
	// determine upload va aussi initialiser l'index "restreint"
	$maindir = determine_upload();
	if (!$GLOBALS['visiteur_session']['restreint'])
		$maindir = _DIR_DUMP;
	$dir = sous_repertoire($maindir, $meta);
	return $dir;
}
Example #11
0
/**
 * Répertoire de sauvegarde
 *
 * Crée et retourne le chemin du répertoire de sauvegarde
 *
 * @see _DIR_DUMP
 *
 * @return string
 */
function dump_repertoire()
{
    $repertoire = _DIR_DUMP;
    if (!@file_exists($repertoire) and !($repertoire = sous_repertoire(_DIR_DUMP, '', false, true))) {
        $repertoire = preg_replace(',' . _DIR_TMP . ',', '', _DIR_DUMP);
        $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
    }
    return $repertoire;
}
Example #12
0
/**
 * Installation des fichiers de configuration/parametrage PAYBOX
 */
function presta_paybox_install_dist()
{
    $dir = sous_repertoire(_DIR_ETC, 'presta');
    $dir = sous_repertoire($dir, 'paybox');
    if (!file_exists($dir . "pbx_ids.php")) {
        $merchant_config = "<" . "?php\n\t\tfunction bank_paybox_pbx_ids(){return array('PBX_IDENTIFIANT'=>'2','PBX_SITE'=>'1999888','PBX_RANG'=>'99');}\n" . "?" . ">";
        ecrire_fichier($dir . "pbx_ids.php", $merchant_config);
        ecrire_meta("bank_paybox_pbx_ids", substr($dir, strlen(_DIR_ETC)) . "pbx_ids.php");
    }
}
function action_generer_recu_souscription_dist($id_souscription = null, $annee = null)
{
    if (is_null($id_souscription)) {
        $id_souscription = _request('id_souscription');
        $annee = _request('annee');
        $hash = _request('hash');
        $lowsec = souscription_hash_lowsec($id_souscription, $annee);
        if ($hash !== $lowsec) {
            die('Erreur : URL pas autorisee');
        }
    } else {
        $lowsec = souscription_hash_lowsec($id_souscription, $annee);
    }
    $format = _request('format');
    if (!in_array($format, array('html', 'pdf'))) {
        // PDF ou HTML ? si le plugin SPIPDF est la on genere un recu en PDF
        $format = "html";
        if (test_plugin_actif("spipdf")) {
            $format = "pdf";
        }
    }
    $numero = souscription_numero_recu($id_souscription, $annee);
    $dir = sous_repertoire(_DIR_IMG, "attestations");
    // securite : dossier inaccessible en http
    if (!file_exists($f = $dir . ".htaccess")) {
        ecrire_fichier($f, "deny from all\n");
    }
    $filename = $numero . ".{$format}";
    $file = $dir . $filename;
    if (!file_exists($file)) {
        $fond = $format == "pdf" ? "attestation_pdf" : "attestation";
        $content = recuperer_fond($fond, array("id_souscription" => $id_souscription, "annee" => $annee, "hash" => $lowsec));
        ecrire_fichier($file, $content);
    }
    $mime = "text/html";
    if ($format == "pdf") {
        $mime = "application/pdf";
    }
    header("Content-type: {$mime}");
    if ($format == "pdf") {
        $filename = preg_replace(",\\W+,", "", $GLOBALS['meta']['nom_site']) . "-Recu-" . $filename;
        header("Content-Disposition: attachment; filename={$filename}");
        //header("Content-Transfer-Encoding: binary");
    }
    // fix for IE catching or PHP bug issue
    header("Pragma: public");
    header("Expires: 0");
    // set expiration time
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    if ($cl = filesize($file)) {
        header("Content-Length: " . $cl);
    }
    readfile($file);
}
Example #14
0
function test_bal($bali, $skel, $contexte = array())
{
    $dossier = sous_repertoire(_DIR_TMP, 'cache-tests');
    $fichier = "{$dossier}{$bali}.html";
    if ($handle = fopen($fichier, 'w')) {
        fwrite($handle, "#CACHE{0}\n[(#REM) " . $bali . " ]\n" . $skel);
        fclose($handle);
        return recuperer_fond('tmp/cache-tests/' . $bali, $contexte);
    }
    return '';
}
/**
 * Charger un tgz à partir d'un tableau d'options descriptives
 *
 * @uses  http_deballe_recherche_racine()
 * @link  http://www.phpconcept.net/pcltar Utilise la librairie PclTar
 *
 * @param array $quoi
 *     Tableau d'options
 * @return array|bool|int|string
 *     En cas de réussite, Tableau décrivant le zip, avec les index suivant :
 *     - files : la liste des fichiers présents dans le zip,
 *     - size : la taille décompressée
 *     - compressed_size : la taille compressée
 *     - dirname : répertoire où les fichiers devront être décompréssés
 *     - tmpname : répertoire temporaire où les fichiers sont décompressés
 *     - target : cible sur laquelle décompresser les fichiers...
 */
function teleporter_http_charger_tgz($quoi = array())
{
    if (!$quoi) {
        return false;
    }
    foreach (array('remove' => '', 'rename' => array(), 'edit' => array(), 'root_extract' => false, 'tmp' => sous_repertoire(_DIR_CACHE, 'chargeur')) as $opt => $def) {
        isset($quoi[$opt]) || ($quoi[$opt] = $def);
    }
    if (!@file_exists($fichier = $quoi['fichier'])) {
        return 0;
    }
    include_spip('inc/pcltar');
    $racine = '';
    if ($list = PclTarList($fichier)) {
        $racine = http_deballe_recherche_racine($list);
        $quoi['remove'] = $racine;
    } else {
        spip_log('charger_decompresser erreur lecture liste tar ' . PclErrorString() . ' pour paquet: ' . $quoi['archive'], "teleport" . _LOG_ERREUR);
        return PclErrorString();
    }
    // si pas de racine commune, reprendre le nom du fichier zip
    // en lui enlevant la racine h+md5 qui le prefixe eventuellement
    // cf action/charger_plugin L74
    if (!strlen($nom = basename($racine))) {
        $nom = preg_replace(",^h[0-9a-f]{8}-,i", "", basename($fichier, '.zip'));
    }
    $dir_export = $quoi['root_extract'] ? $quoi['dest'] : $quoi['dest'] . $nom;
    $dir_export = rtrim($dir_export, '/') . '/';
    $tmpname = $quoi['tmp'] . $nom . '/';
    // choisir la cible selon si on veut vraiment extraire ou pas
    $target = $quoi['extract'] ? $dir_export : $tmpname;
    // ici, il faut vider le rep cible si il existe deja, non ?
    if (is_dir($target)) {
        supprimer_repertoire($target);
    }
    $ok = PclTarExtract($fichier, $target, $quoi['remove']);
    if ($ok == 0) {
        spip_log('charger_decompresser erreur tar ' . PclErrorString() . ' pour paquet: ' . $quoi['archive'], "teleport" . _LOG_ERREUR);
        return PclErrorString();
    }
    spip_log('charger_decompresser OK pour paquet: ' . $quoi['archive'], "teleport");
    $size = $compressed_size = 0;
    $removex = ',^' . preg_quote($quoi['remove'], ',') . ',';
    foreach ($list as $a => $f) {
        $size += $f['size'];
        $compressed_size += $f['compressed_size'];
        $list[$a] = preg_replace($removex, '', $f['filename']);
    }
    // Indiquer par un fichier install.log
    // a la racine que c'est chargeur qui a installe ce plugin
    ecrire_fichier($target . 'install.log', "installation: charger_plugin\n" . "date: " . gmdate('Y-m-d\\TH:i:s\\Z', time()) . "\n" . "source: " . $quoi['archive'] . "\n");
    return array('files' => $list, 'size' => $size, 'compressed_size' => $compressed_size, 'dirname' => $dir_export, 'tmpname' => $tmpname, 'target' => $target);
}
Example #16
0
 function get_fichier()
 {
     static $fichier = array();
     $cle = $this->param->nom . ' - ' . $this->param->fichier;
     if (isset($fichier[$cle])) {
         return $fichier[$cle];
     }
     if (!$this->param->fichier) {
         $f = _DIR_VAR . 'cfg/' . $this->param->nom . '.php';
     } else {
         $f = _DIR_RACINE . $this->param->fichier;
     }
     include_spip('inc/flock');
     return $fichier[$cle] = sous_repertoire(dirname($f)) . basename($f);
 }
Example #17
0
function exec_charger_plugin_dist($retour='') {

	if (!autoriser('configurer', 'plugins')) {
		include_spip('inc/minipres');
		echo minipres();
	} else {

		$commencer_page = charger_fonction('commencer_page', 'inc');
		echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
		echo "<br />\n";
		echo "<br />\n";

		echo gros_titre(_T('icone_admin_plugin'),'',false);
		echo barre_onglets("plugins", "charger_plugin");

		echo debut_gauche('plugin',true);
		echo debut_boite_info(true);
		$s = "";
		$s .= _T('info_gauche_admin_tech');
		echo $s;
		echo fin_boite_info(true);

		echo pipeline('affiche_gauche',
			array(
			'args'=>array('exec'=>'charger_plugin'),
			'data'=>''
			)
		);

		echo debut_droite('plugin', true);
		// voire si on peut creer le repertoure auto/ sans rien demander
		sous_repertoire(_DIR_PLUGINS_AUTO, '', true, true);
		
		echo "<div class='liste-plugins formulaire_spip'>";
		include_spip('inc/charger_plugin');
		echo formulaire_charger_plugin($retour);
		echo "</div>";

		echo pipeline('affiche_milieu',
			array(
			'args'=>array('exec'=>'charger_plugin'),
			'data'=>''
			)
		);

		echo fin_gauche(), fin_page();
	}
}
Example #18
0
function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$envoyer = true){

	$filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
	
	if ($delim == 'TAB') $delim = "\t";
	if (!in_array($delim,array(',',';',"\t")))
		$delim = ",";

	$charset = $GLOBALS['meta']['charset'];
	$importer_charset = null;
	if ($delim == ',')
		$extension = 'csv';
	else {
		$extension = 'xls';
		# Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut
		$importer_charset = $charset = 'iso-8859-1';
	}
	$filename = "$filename.$extension";

	if ($entetes AND is_array($entetes) AND count($entetes))
		$output = exporter_csv_ligne($entetes,$delim,$importer_charset);

	// on passe par un fichier temporaire qui permet de ne pas saturer la memoire
	// avec les gros exports
	$fichier = sous_repertoire(_DIR_CACHE,"export") . $filename;
	$fp = fopen($fichier, 'w');
	$length = fwrite($fp, $output);

	while ($row=is_array($resource)?array_shift($resource):sql_fetch($resource)){
		$output = exporter_csv_ligne($row,$delim,$importer_charset);
		$length += fwrite($fp, $output);
	}
	fclose($fp);

	if ($envoyer) {
		Header("Content-Type: text/comma-separated-values; charset=$charset");
		Header("Content-Disposition: attachment; filename=$filename");
		//non supporte
		//Header("Content-Type: text/plain; charset=$charset");
		Header("Content-Length: $length");
		ob_clean();
    flush();
    readfile($fichier);
	}

	return $fichier;
}
Example #19
0
function creer_repertoire_documents($ext) {
	$rep = sous_repertoire(_DIR_IMG, $ext);

	if (!$ext OR !$rep) {
		spip_log("creer_repertoire_documents '$rep' interdit");
		exit;
	}

	// Cette variable de configuration peut etre posee par un plugin
	// par exemple acces_restreint
	if ($GLOBALS['meta']["creer_htaccess"] == 'oui') {
		include_spip('inc/acces');
		verifier_htaccess($rep);
	}

	return $rep;
}
Example #20
0
function info_maj_cache($nom, $dir, $page='')
{
	$re = '<archives id="a' . $GLOBALS['meta']["alea_ephemere"] . '">';
	if (preg_match("/$re/", $page)) return $page;

	$url = _VERSIONS_SERVEUR . $dir . '/' . _VERSIONS_LISTE;
	$a = file_exists($nom) ? filemtime($nom) : '';
	include_spip('inc/distant');
	$res = recuperer_lapage($url, false, 'GET', _COPIE_LOCALE_MAX_SIZE, '',false, $a);
	// Si rien de neuf (ou inaccessible), garder l'ancienne
	if ($res) list(, $page) = $res;
	// Placer l'indicateur de fraicheur
	$page = preg_replace('/^<archives.*?>/', $re, $page);
	sous_repertoire(_DIR_CACHE_XML);
	ecrire_fichier($nom, $page);
	return $page;
}
Example #21
0
/**
 * Generer a la volee un fond a partir d'une table de contenu
 *
 * @param string $type
 * @param string $table
 * @param string $table_sql
 * @param array  $desc
 * @param string $ext
 *
 * @return string
 */
function public_echafauder_dist($type, $table, $table_sql, $desc, $ext)
{
    include_spip('public/interfaces');
    $primary = id_table_objet($type);
    if (!$primary and isset($desc['key']["PRIMARY KEY"])) {
        $primary = $desc['key']["PRIMARY KEY"];
    }
    /* reperer un titre */
    $titre = 'titre';
    if (isset($GLOBALS['table_titre'][$table])) {
        $titre = explode(' ', $GLOBALS['table_titre'][$table]);
        $titre = explode(',', reset($titre));
        $titre = reset($titre);
    }
    if (isset($desc['field'][$titre])) {
        unset($desc['field'][$titre]);
        $titre = "<h1 class='h1 #EDIT{titre}'>#" . strtoupper($titre) . "</h1>";
    } else {
        $titre = "";
    }
    /* reperer une date */
    $date = "date";
    if (isset($GLOBALS['table_date'][$table])) {
        $date = $GLOBALS['table_date'][$table];
    }
    if (isset($desc['field'][$date])) {
        unset($desc['field'][$date]);
        $date = strtoupper($date);
        $date = "<p class='info-publi'>[(#{$date}|nom_jour) ][(#{$date}|affdate)][, <span class='auteurs'><:par_auteur:> (#LESAUTEURS)</span>]</p>";
    } else {
        $date = "";
    }
    $content = array();
    foreach ($desc['field'] as $champ => $z) {
        if (!in_array($champ, array('maj', 'statut', 'idx', $primary))) {
            $content[] = "[<div><strong>{$champ}</strong><div class='#EDIT{" . $champ . "} {$champ}'>(#" . strtoupper($champ) . "|image_reduire{500,0})</div></div>]";
        }
    }
    $content = implode("\n\t", $content);
    $scaffold = "#CACHE{0}\n<BOUCLE_contenu({$table_sql}){" . $primary . "}>\n[(#REM) Fil d'Ariane ]\n<p id='hierarchie'><a href='#URL_SITE_SPIP/'><:accueil_site:></a>[ &gt; <strong class='on'>(#TITRE|couper{80})</strong>]</p>\n\n<div class='contenu-principal'>\n\t<div class='cartouche'>\n\t\t{$titre}\n\t\t{$date}\n\t</div>\n\n\t{$content}\n\n</div>\n\n[<div class='notes surlignable'><h2 class='h2 pas_surlignable'><:info_notes:></h2>(#NOTES)</div>]\n</BOUCLE_contenu>";
    $dir = sous_repertoire(_DIR_CACHE, "scaffold", false);
    $dir = sous_repertoire($dir, "contenu", false);
    $f = $dir . "{$type}";
    ecrire_fichier("{$f}.{$ext}", $scaffold);
    return $f;
}
Example #22
0
function cfg_php_extraire_infos($lieu)
{
    list($fichier, $casier) = explode(':', $lieu);
    if (!$casier) {
        $casier = $fichier;
        $fichier = '';
    }
    if ($fichier) {
        sous_repertoire(dirname($f));
        $fichier = _DIR_RACINE . $fichier;
    } else {
        // le premier element du casier est le nom de base du fichier. on l'enleve
        $nom = array_shift($casier = explode('/', $casier));
        $casier = implode('/', $casier);
        sous_repertoire(_DIR_VAR . 'cfg');
        $fichier = _DIR_VAR . 'cfg/' . $nom . '.php';
    }
    return array($fichier, $casier);
}
function sarkaspip_zengarden_activer_theme($flux)
{
    $dir = $flux['args']['dir'];
    $action = $flux['args']['action'];
    $dir_cfg = $dir . '/cfg';
    $cfg = preg_files($dir_cfg);
    include_spip('inc/config');
    if ($action == 'activer') {
        // On sauvegarde des valeurs actuelles pour un eventuel rappel
        $dir_cfg = sous_repertoire(_DIR_TMP, "cfg");
        $dir_cfg = sous_repertoire(_DIR_TMP, "themes");
        $fonds = array();
        foreach ($cfg as $_fichier_cfg) {
            $fonds[] = basename($_fichier_cfg, '.txt');
        }
        include_spip('inc/sarkaspip_filtres');
        $ok = sauvegarder_fonds($fonds, $dir_cfg, 'theme');
        // On ecrit la nouvelle configuration n�cessaire au theme choisi
        $flux['data'] = true;
        foreach ($cfg as $_fichier_cfg) {
            lire_fichier($_fichier_cfg, $tableau);
            $fond = basename($_fichier_cfg, '.txt');
            ecrire_config($fond, $tableau);
        }
    } else {
        if ($action == 'effacer') {
            $fichiers = array();
            $flux['data'] = true;
            foreach ($cfg as $_fichier_cfg) {
                $fond = basename($_fichier_cfg, '.txt');
                effacer_config($fond);
                $fichiers[] = _DIR_TMP . 'themes/cfg/' . $fond . '.txt';
            }
            include_spip('inc/sarkaspip_filtres');
            $ok = restaurer_fonds($fichiers);
        } else {
            // action apercevoir : on ne fait rien, on sait pas faire..
        }
    }
    return $flux;
}
Example #24
0
function compacte($source, $format = null) {
	if (!$format AND preg_match(',\.(js|css)$,', $source, $r))
		$format = $r[1];
	include_spip('inc/compresseur');
	if (!function_exists($compacte = 'compacte_'.$format))
		return $source;

	// Si on n'importe pas, est-ce un fichier ?
	if (!preg_match(',[\s{}],', $source)
	AND preg_match(',\.'.$format.'$,i', $source, $r)
	AND file_exists($source)) {
		// si c'est une css, il faut reecrire les url en absolu
  	if ($format=='css')
  		$source = url_absolue_css($source);

		$f = basename($source,'.'.$format);
		$f = sous_repertoire (_DIR_VAR, 'cache-'.$format)
		. preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-compacte-"
		. substr(md5("$source-compacte"), 0,4) . "\\2", $f, 1)
		. '.' . $format;

		if ((@filemtime($f) > @filemtime($source))
		AND ($GLOBALS['var_mode'] != 'recalcul'))
			return $f;

		if (!lire_fichier($source, $contenu))
			return $source;

		// traiter le contenu
		$contenu = $compacte($contenu);

		// ecrire le fichier destination, en cas d'echec renvoyer la source
		if (ecrire_fichier($f, $contenu, true))
			return $f;
		else
			return $source;
	}

	// Sinon simple compactage de contenu
	return $compacte($source);
}
Example #25
0
function install_etape_4_dist()
{

	// creer le repertoire cache, qui sert partout !
	if(!@file_exists(_DIR_CACHE)) {
		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
		$rep = sous_repertoire(_DIR_TMP, $rep, true,true);
	}


	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
	echo info_progression_etape(4,'etape_','install/');

	echo "<p>"
			._L('Les extensions ci-dessous sont charg&#233;es et activ&#233;es dans le r&#233;pertoire @extensions@.', array('extensions' => joli_repertoire(_DIR_EXTENSIONS)))
			."</p>";

	// installer les extensions
	include_spip('inc/plugin');
	$afficher = charger_fonction("afficher_liste",'plugins');
	echo $afficher(self(), liste_plugin_files(_DIR_EXTENSIONS),array(), _DIR_EXTENSIONS,'afficher_nom_plugin');

	installe_plugins();

	echo info_etape(_T('info_derniere_etape'),
			_T('info_utilisation_spip')
	);

	// mettre a jour si necessaire l'adresse du site
	// securite si on arrive plus a se loger
	include_spip('inc/config');
	$_POST['adresse_site'] = '';
	appliquer_modifs_config();

	// aller a la derniere etape qui clos l'install et redirige
	$suite =  "\n<input type='hidden' name='etape' value='fin' />"
	  . bouton_suivant(_T('login_espace_prive'));

	echo generer_form_ecrire('install', $suite);	echo install_fin_html();
}
Example #26
0
File: sips.php Project: nursit/bank
/**
 * Ecrire les fichiers de config/parametres a la volee avant l'appel a un binaire SIPS
 * @param string $service
 * @param string $merchant_id
 * @param string $certificat
 * @param string $dir_logo
 * @return string
 */
function sips_ecrire_config_merchant($service, $merchant_id, $certificat, $dir_logo)
{
    // creer les fichiers config pour la transaction
    $pathfile = sous_repertoire(_DIR_TMP, "sips");
    $pathfile = sous_repertoire($pathfile, $service);
    $realdir = realpath($pathfile);
    $config_file = "DEBUG!NO!\n" . "D_LOGO!" . substr($dir_logo, strlen(_DIR_RACINE)) . "!\n" . "F_DEFAULT!{$realdir}/parmcom.sips!\n" . "F_PARAM!{$realdir}/parmcom!\n" . "F_CERTIFICATE!{$realdir}/certif!";
    ecrire_fichier($p = $pathfile . "pathfile", $config_file);
    // le fichier par defaut
    if (!file_exists($pathfile . "parmcom.sips")) {
        copy(_DIR_PLUGIN_BANK . "presta/sips/bin/{$service}/param/parmcom.sips", $pathfile . "parmcom.sips");
    }
    // le fichier du merchant
    if (!file_exists($pathfile . "parmcom.{$merchant_id}")) {
        copy(_DIR_PLUGIN_BANK . "presta/sips/bin/{$service}/param/parmcom", $pathfile . "parmcom.{$merchant_id}");
    }
    // le certificat
    if ($merchant_id) {
        ecrire_fichier($p = $pathfile . "certif.fr.{$merchant_id}", $certificat);
    }
    return $realdir;
}
Example #27
0
function install_etape_fin_dist()
{
	ecrire_acces();

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
	if (file_exists(_FILE_CHMOD_TMP)) {
		if (!@rename(_FILE_CHMOD_TMP, $f)) {
			if (@copy(_FILE_CHMOD_TMP, $f))
				spip_unlink(_FILE_CHMOD_TMP);
		}
	}

	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
	if (file_exists(_FILE_CONNECT_TMP)) {
		spip_log("renomme $f");
		if (!@rename(_FILE_CONNECT_TMP, $f)) {
			if (@copy(_FILE_CONNECT_TMP, $f))
				@spip_unlink(_FILE_CONNECT_TMP);
		}
	}

	// creer le repertoire cache, qui sert partout !
	// deja fait en etape 4 en principe, on garde au cas ou
	if(!@file_exists(_DIR_CACHE)) {
		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
		$rep = sous_repertoire(_DIR_TMP, $rep, true,true);
	}

	// Verifier la securite des htaccess
	// Si elle ne fonctionne pas, prevenir
	$msg = install_verifier_htaccess();
	if ($msg) {
		$cible = _T('public:accueil_site');
		$cible = generer_form_ecrire('accueil', '','', $cible);
		echo minipres('AUTO', $msg . $cible);
	// ok, deboucher dans l'espace prive
	} else redirige_url_ecrire('accueil');
}
/**
 * Déterminer l'utilisation du vertebreur
 *
 * Lorsqu'on inclut le squelette `prive/vertebres:$table`,
 * vérifier l'autorisation et créer le squelette spécifique
 * à la table demandée si on la trouve
 *
 * @pipeline styliser
 * @uses base_trouver_table_dist()
 * @uses public_vertebrer_dist()
 *
 * @param array $flux Données du pipeline
 * @return array Données du pipeline
 */
function vertebres_styliser($flux)
{
    // si pas de squelette trouve,
    // on verifie si on demande une vue de table
    if (!($squelette = $flux['data']) and $fond = $flux['args']['fond'] and strncmp($fond, 'prive/vertebres:', 16) == 0 and $table = substr($fond, 16) and include_spip('inc/autoriser') and autoriser('webmestre')) {
        $ext = $flux['args']['ext'];
        $connect = $flux['args']['connect'];
        // Si pas de squelette regarder si c'est une table
        // et si l'on a la permission de l'afficher
        $trouver_table = charger_fonction('trouver_table', 'base');
        if ($desc = $trouver_table($table, $connect)) {
            $fond = $table;
            $base = _DIR_VERTEBRES . 'table_' . $fond . ".{$ext}";
            if (!file_exists($base) or defined('_VAR_MODE') and _VAR_MODE) {
                sous_repertoire(_DIR_VERTEBRES);
                $vertebrer = charger_fonction('vertebrer', 'public');
                ecrire_fichier($base, $vertebrer($desc));
            }
            // sauver les changements
            $flux['data'] = _DIR_VERTEBRES . 'table_' . $fond;
        }
    }
    return $flux;
}
Example #29
0
/**
 * fonction pour la premiere connexion a un serveur SQLite
 * http://code.spip.net/@_sqlite_init
 *
 * @return void
 */
function _sqlite_init()
{
    if (!defined('_DIR_DB')) {
        define('_DIR_DB', _DIR_ETC . 'bases/');
    }
    if (!defined('_SQLITE_CHMOD')) {
        define('_SQLITE_CHMOD', _SPIP_CHMOD);
    }
    if (!is_dir($d = _DIR_DB)) {
        include_spip('inc/flock');
        sous_repertoire($d);
    }
}
Example #30
0
/**
 * Produire un fichier statique a partir d'un squelette dynamique
 * Permet ensuite a apache de le servir en statique sans repasser
 * par spip.php a chaque hit sur le fichier
 * si le format (css ou js) est passe dans contexte['format'], on l'utilise
 * sinon on regarde si le fond finit par .css ou .js
 * sinon on utilie "html"
 *
 * @param string $fond
 * @param array $contexte
 * @param array $options
 * @param string $connect
 * @return string
 */
function produire_fond_statique($fond, $contexte = array(), $options = array(), $connect = '')
{
    if (isset($contexte['format'])) {
        $extension = $contexte['format'];
        unset($contexte['format']);
    } else {
        $extension = "html";
        if (preg_match(',[.](css|js|json)$,', $fond, $m)) {
            $extension = $m[1];
        }
    }
    // recuperer le contenu produit par le squelette
    $options['raw'] = true;
    $cache = recuperer_fond($fond, $contexte, $options, $connect);
    // calculer le nom de la css
    $dir_var = sous_repertoire(_DIR_VAR, 'cache-' . $extension);
    $nom_safe = preg_replace(",\\W,", '_', str_replace('.', '_', $fond));
    $filename = $dir_var . $extension . "dyn-{$nom_safe}-" . substr(md5($fond . serialize($contexte) . $connect), 0, 8) . ".{$extension}";
    // mettre a jour le fichier si il n'existe pas
    // ou trop ancien
    // le dernier fichier produit est toujours suffixe par .last
    // et recopie sur le fichier cible uniquement si il change
    if (!file_exists($filename) or !file_exists($filename . ".last") or isset($cache['lastmodified']) and $cache['lastmodified'] and filemtime($filename . ".last") < $cache['lastmodified'] or defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
        $contenu = $cache['texte'];
        // passer les urls en absolu si c'est une css
        if ($extension == "css") {
            $contenu = urls_absolues_css($contenu, test_espace_prive() ? generer_url_ecrire('accueil') : generer_url_public($fond));
        }
        // ne pas insérer de commentaire si c'est du json
        if ($extension != "json") {
            $comment = "/* #PRODUIRE{fond={$fond}";
            foreach ($contexte as $k => $v) {
                $comment .= ",{$k}={$v}";
            }
            // pas de date dans le commentaire car sinon ca invalide le md5 et force la maj
            // mais on peut mettre un md5 du contenu, ce qui donne un aperu rapide si la feuille a change ou non
            $comment .= "}\n   md5:" . md5($contenu) . " */\n";
        }
        // et ecrire le fichier
        ecrire_fichier($filename . ".last", $comment . $contenu);
        // regarder si on recopie
        if (!file_exists($filename) or md5_file($filename) !== md5_file($filename . ".last")) {
            @copy($filename . ".last", $filename);
            spip_clearstatcache(true, $filename);
            // eviter que PHP ne reserve le vieux timestamp
        }
    }
    return $filename;
}