예제 #1
0
function spiplistes_console_lit_log ($logname) {

	$files = preg_files(defined('_DIR_TMP') ? _DIR_TMP : _DIR_SESSION, "$logname\.log(\.[0-9])?");
	krsort($files);

	$log = "";
	foreach($files as $nom){
		if (lire_fichier($nom, $contenu))
			$log .= $contenu;
	}
	$contenu = explode("\n", $contenu);
	
	$result = "";
	$maxlines = 40;
	while ($contenu && $maxlines){
		$ii = trim(array_pop($contenu));
		if(strlen($ii)) { 
			$result .= $ii."\n";
			$maxlines--;
		}
	}
	
	$result = "<pre style='margin-top:1em'>".$result."</pre>\n";
	
	return($result);
}
예제 #2
0
function ckeditor_install($action,$prefix,$version_cible){
	switch($action) {
		case 'test':
			$ckeditor = lire_config('ckeditor',false) ;
			return is_array($ckeditor) ;
		case 'install':
			$formulaires = preg_files(_DIR_RACINE, "ckeditor-spip-plugin/formulaires/.*.php") ;
			foreach($formulaires as $formulaire) {
				spip_log("formulaire : $formulaire", "ckeditor");
				if (preg_match("~formulaires/(ck[a-z]).php$~",$formulaire, $m)) {
					include_spip("formulaires/".$m[1]);
					$fonction = "formulaires_".$m[1]."_charger_dist" ;
					$valeurs = $fonction() ;
					$vals=array();
					foreach($valeurs as $entree => $valeur) {
						if (! is_null($valeur) && ! ($valeur === '')) {
								ecrire_config("ckeditor/".$entree, $valeur) ;
								$vals[]="ckeditor/$entree";
						}
					}
				}
			}
			return true ;
		default:
			spip_log("installation[action:$action non prise en charge]", "ckeditor");
	}
}
function box_lister_skins()
{
    $skins = array('none' => array('nom' => _T('mediabox:label_aucun_style')));
    $maxfiles = 1000;
    $liste_fichiers = array();
    $recurs = array();
    foreach (creer_chemin() as $d) {
        $f = $d . "colorbox/";
        if (@is_dir($f)) {
            $liste = preg_files($f, "colorbox[.]css\$", $maxfiles - count($liste_fichiers), $recurs);
            foreach ($liste as $chemin) {
                $nom = substr(dirname($chemin), strlen($f));
                // ne prendre que les fichiers pas deja trouves
                // car find_in_path prend le premier qu'il trouve,
                // les autres sont donc masques
                if (!isset($liste_fichiers[$nom])) {
                    $liste_fichiers[$nom] = $chemin;
                }
            }
        }
    }
    foreach ($liste_fichiers as $short => $fullpath) {
        $skins[$short] = array('nom' => basename($short));
        if (file_exists($f = dirname($fullpath) . "/vignette.jpg")) {
            $skins[$short]['img'] = $f;
        }
    }
    return $skins;
}
예제 #4
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;
}
예제 #5
0
파일: plugin.php 프로젝트: rhertzog/lcs
function liste_plugin_files($dir_plugins = null){
	static $plugin_files=array();

	if (is_null($dir_plugins)) {
		$dir_plugins = _DIR_PLUGINS;
		if (defined('_DIR_PLUGINS_SUPPL'))
			$dir_plugins_suppl = array_filter(explode(':',_DIR_PLUGINS_SUPPL));
	}

	if (!isset($plugin_files[$dir_plugins])
	OR count($plugin_files[$dir_plugins]) == 0){
		$plugin_files[$dir_plugins] = array();
		foreach (preg_files($dir_plugins, '/plugin[.]xml$') as $plugin) {
			$plugin_files[$dir_plugins][] = substr(dirname($plugin),strlen($dir_plugins));
		}
		sort($plugin_files[$dir_plugins]);

		// hack affreux pour avoir le bon chemin pour les repertoires
		// supplementaires ; chemin calcule par rapport a _DIR_PLUGINS.
		if (isset($dir_plugins_suppl)) {
			foreach($dir_plugins_suppl as $suppl) {
				foreach (preg_files(_DIR_RACINE.$suppl, 'plugin[.]xml$') as $plugin) {
					$plugin_files[$dir_plugins][] = (_DIR_RACINE? '':'../').dirname($plugin);
				}
			}
		}
	}

	return $plugin_files[$dir_plugins];
}
예제 #6
0
파일: cfg.php 프로젝트: pcrest/eludis
function liste_cfg($dir = '')
{
    // Faire la liste des éléments qui ont un cfg ; ca peut etre des plugins
    // mais aussi des squelettes ou n'importe quoi
    $liste = array();
    // tous les repertoires
    if (!$dir) {
        foreach (creer_chemin() as $dir) {
            if (basename($dir) != 'cfg') {
                $liste = array_merge($liste, preg_files($dir . 'fonds/', '/cfg_.*html$'));
            }
        }
        // ou seulement celui demande
    } else {
        $dir = rtrim(rtrim($dir), '/') . '/';
        $liste = preg_files($dir . 'fonds/', '/cfg_.*html$');
    }
    if ($liste) {
        $l = array();
        foreach ($liste as $cfg) {
            $fonds = substr(basename($cfg, '.html'), 4);
            $l[$fonds] = $cfg;
        }
        ksort($l);
        return $l;
    }
}
예제 #7
0
파일: install.php 프로젝트: rhertzog/lcs
function bases_referencees($exclu='')
{
	$tables = array();
	foreach(preg_files(_DIR_CONNECT, '.php$') as $f) {
		if ($f != $exclu AND analyse_fichier_connection($f))
			$tables[]= basename($f, '.php');
	}
	return $tables;
}
예제 #8
0
/**
 * Lister les fichiers editables
 */
function skeleditor_files_editables($path=null){
	if (is_null($path))
		$path = skeleditor_path_editable();
	if (!$path) return array();

	$files_editable = preg_files($path,'[.]('._SE_EXTENSIONS.')$');
	$files_editable = sort_directory_first($files_editable,$path); // utile ?

	return $files_editable;
}
예제 #9
0
function essais_tw_propre_typo()
{
    $tests = preg_files(_DIR_PLUGIN_TW . "tests/data/typo/", '\\.txt$');
    $texte = $expected = "";
    $essais = array();
    foreach ($tests as $t) {
        lire_fichier($t, $texte);
        lire_fichier(substr($t, 0, -4) . ".html", $expected);
        $essais[basename($t, ".txt")] = array($expected, $texte);
    }
    return $essais;
}
예제 #10
0
function cextras_types_formulaires(){
	$types = array();

	foreach(_chemin() as $dir) {
		if (@is_dir($s = $dir.'extra-saisies/')) {
			foreach(preg_files($s, '.*.html$') as $saisie) {
				$type = basename($saisie,'.html');
				$types[$type] = array(
					'nom' => _T('cextras:type', array('type' => $type))
				);
			}
		}
	}
	return $types;
}
예제 #11
0
/**
 * Lister les install de presta
 * @return array
 */
function bank_lister_instal_prestas()
{
    $liste_prestas = array();
    $recurs = array();
    $maxfiles = 10000;
    $dir = 'presta/';
    // Parcourir le chemin
    foreach (creer_chemin() as $d) {
        $f = $d . $dir;
        if (@is_dir($f)) {
            $liste = preg_files($f, "/install[.]php\$", $maxfiles - count($liste_prestas), $recurs);
            foreach ($liste as $chemin) {
                $liste_prestas[] = dirname(substr($chemin, strlen($f)));
            }
        }
    }
    return $liste_prestas;
}
예제 #12
0
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;
}
예제 #13
0
파일: export.php 프로젝트: rhertzog/lcs
function export_repertoire($meta, $val_meta)
{
	list(, $archive, , $tables, $etape, $sous_etape, , $save) = $val_meta;
	if (!function_exists('inc_export_' . ($save ? $save : 'xml'))) {
		spip_log("fonction inc_export_$save indisponible");
		return false;
	}
	$dir = base_dump_dir($meta);

	// Reperer une situation anormale (echec reprise sur interruption)
	if (($etape == 1) AND !$sous_etape) {
		$file = $dir . $archive;
		$l = preg_files($file .  ".part_[0-9]+_[0-9]+");
		if ($l) {
			spip_log("menage d'une sauvegarde inachevee: " . join(',', $l));
			foreach($l as $dummy) spip_unlink($dummy);
		}
	}
	$all = count($tables);
	return ($etape > $all OR !$all) ? false : $dir;
}
예제 #14
0
function afficher_raccourcis($module = "public") {
	global $spip_lang;
	
	charger_langue($spip_lang, $module);

	$tableau = $GLOBALS['i18n_' . $module . '_' . $spip_lang];
	ksort($tableau);

	$aff_nom_module= "";
	if ($module != "public" AND $module != "local")
		$aff_nom_module = "$module:";

	echo "<div class='arial2'>"._T('module_texte_explicatif')."</div>";
	echo "<div>&nbsp;</div>";

	foreach (preg_files(repertoire_lang().$module.'_[a-z_]+\.php[3]?$') as $f)
		if (preg_match(",^".$module."\_([a-z_]+)\.php[3]?$,", $f, $regs))
				$langue_module[$regs[1]] = traduire_nom_langue($regs[1]);

	if (isset($langue_module) && ($langue_module)) {
		ksort($langue_module);
		echo "<div class='arial2'>"._T('module_texte_traduction',
			array('module' => $module));
		echo " ".join(", ", $langue_module).".";
		echo "</div><div>&nbsp;</div>";
	}

	echo debut_cadre_relief('',true,'','','raccourcis');
	echo "\n<table class='spip' style='border:0;'>";
	echo "\n<tr class='titrem'><th class='verdana1'>"._T('module_raccourci')."</th>\n<th class='verdana2'>"._T('module_texte_affiche')."</th></tr>\n";

	$i = 0;
	foreach ($tableau as $raccourci => $val) {
		$bgcolor = alterner(++$i, 'row_even','row_odd');
		echo "\n<tr class='$bgcolor'><td class='verdana2'><b>&lt;:$aff_nom_module$raccourci:&gt;</b></td>\n<td class='arial2'>".$val."</td></tr>";
	}

	echo "</table>",fin_cadre_relief(true);
}
예제 #15
0
파일: bank.php 프로젝트: nursit/bank
/**
 * Retourner la liste des prestataires connus
 */
function bank_lister_prestas()
{
    static $prestas = null;
    if (is_array($prestas)) {
        return $prestas;
    }
    $prestas = array();
    $regexp = "(abonnement|acte)\\.php\$";
    foreach (creer_chemin() as $d) {
        $f = $d . "presta/";
        if (@is_dir($f)) {
            $all = preg_files($f, $regexp);
            foreach ($all as $a) {
                $a = explode("/presta/", $a);
                $a = end($a);
                $a = explode("/", $a);
                if (count($a) == 3 and $a[1] = "payer") {
                    $prestas[reset($a)] = true;
                }
            }
        }
    }
    ksort($prestas);
    // a la fin
    foreach (array("cheque", "virement", "simu") as $m) {
        if (isset($prestas[$m])) {
            unset($prestas[$m]);
            $prestas[$m] = true;
        }
    }
    if (isset($prestas['gratuit'])) {
        unset($prestas['gratuit']);
    }
    $prestas = array_keys($prestas);
    return $prestas;
}
예제 #16
0
파일: export_all.php 프로젝트: rhertzog/lcs
function ramasse_parties($rub, $archive, $meta)
{
	$dir = base_dump_dir($meta);
	$files = preg_files($dir . $archive . ".part_[0-9]+_[0-9]+[.gz]?");
	if (!$files) return false;
	$ok = true;
	$files_o = array();
	$but = export_all_rename($archive, $dir);
	// creer l'en tete du fichier
	ecrire_fichier($but, export_entete(_VERSION_ARCHIVE),false);
	foreach($files as $f) {
	  $contenu = "";
	  if (lire_fichier ($f, $contenu)) {
	    if (!ecrire_fichier($but,$contenu,false,false))
	      { $ok = false; break;}
	  }
	  spip_unlink($f);
	  $files_o[]=$f;
	}
	ecrire_fichier($but, export_enpied(),false,false);
	spip_unlink($dir);
	spip_log("concatenation " . join(' ', $files_o));
	return $ok ? $but : false;
}
예제 #17
0
파일: data.php 프로젝트: genma/spip_ynh
/**
 * pregfiles -> tableau
 * lister des fichiers a partir d'un dossier de base et selon une regexp.
 * pour la syntaxe cf la fonction spip preg_files
 * @param string $dir
 * @param string $regexp
 * @param int $limit
 * @return array|bool
 */
function inc_pregfiles_to_array_dist($dir, $regexp = -1, $limit = 10000)
{
    return (array) preg_files($dir, $regexp, $limit);
}
예제 #18
0
파일: session.php 프로젝트: JLuc/SPIP
/**
 * Mettre a jour les sessions existantes pour un auteur
 * Quand on modifie une fiche auteur on appelle cette fonction qui va
 * mettre a jour les fichiers de session de l'auteur en question.
 * (auteurs identifies seulement)
 *
 * Ne concerne que les sessions des auteurs loges (id_auteur connu)
 *
 * @param array $auteur
 * @param array $supprimer_cles
 *     Liste des clés à supprimer des tableaux de sessions
 */
function actualiser_sessions($auteur, $supprimer_cles = array())
{
    $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
    $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0;
    // si l'auteur est celui de la session courante, verifier/creer la session si besoin
    $fichier_session_courante = "";
    if ($id_auteur == $id_auteur_courant) {
        ajouter_session($auteur);
        if ($id_auteur) {
            $fichier_session_courante = fichier_session('alea_ephemere');
        }
    }
    // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees
    if (!$id_auteur) {
        return;
    }
    // memoriser l'auteur courant (celui qui modifie la fiche)
    $sauve = $GLOBALS['visiteur_session'];
    // .. mettre a jour les sessions de l'auteur cible
    // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire
    // cree par une ecriture concurente d'une session (fichier atomique temporaire)
    $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\\.php$');
    // 1ere passe : lire et fusionner les sessions
    foreach ($sessions as $session) {
        $GLOBALS['visiteur_session'] = array();
        // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
        if ($session !== $fichier_session_courante and @file_exists($session)) {
            include $session;
            # $GLOBALS['visiteur_session'] est alors l'auteur cible
            $auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
        }
    }
    // supprimer les eventuelles cles dont on ne veut plus
    foreach ($supprimer_cles as $cle) {
        unset($auteur[$cle]);
    }
    $auteur_session = preparer_ecriture_session($auteur);
    // seconde passe : ecrire les sessions qui ne sont pas a jour
    foreach ($sessions as $session) {
        $GLOBALS['visiteur_session'] = array();
        // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence)
        if (@file_exists($session)) {
            include $session;
            # $GLOBALS['visiteur_session'] est alors l'auteur cible
            // est-ce que cette session est a mettre a jour ?
            if ($auteur_session != $GLOBALS['visiteur_session']) {
                ecrire_fichier_session($session, $auteur);
            }
        }
    }
    if ($id_auteur == $id_auteur_courant) {
        $GLOBALS['visiteur_session'] = $auteur;
        $GLOBALS['auteur_session'] =& $GLOBALS['visiteur_session'];
    } else {
        // restaurer l'auteur courant
        $GLOBALS['visiteur_session'] = $sauve;
    }
}
예제 #19
0
파일: joindre.php 프로젝트: rhertzog/lcs
function inc_joindre3_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	if (!$path || strstr($path, '..')) return;
	    
	$upload = determine_upload();
	if ($path != '/' AND $path != './') $upload .= $path;

	if (!is_dir($upload))
	  // seul un fichier est demande
	  $files = array(array ('name' => basename($upload),
				'tmp_name' => $upload)
			 );
	else {
	  include_spip('inc/documents');
	  $files = array();
	  foreach (preg_files($upload) as $fichier) {
			$files[]= array (
					'name' => basename($fichier),
					'tmp_name' => $fichier
					);
	  }
	}

	return joindre_documents($files, $mode, $type, $id, $id_document, $hash, $redirect, $actifs, $iframe_redirect);
}
예제 #20
0
파일: valider_xml.php 프로젝트: spip/SPIP
/**
 * Vérifie le formatage d'un xml
 *
 * @see valider_resultats()
 * @see valider_dir()
 * @see valider_pseudo_url()
 *
 * @param string $url
 * @param string $req_ext
 * @param int $limit
 * @param array|bool $rec
 *
 **/
function valider_xml_ok($url, $req_ext, $limit, $rec)
{
    $url = urldecode($url);
    $rec = !$rec ? false : array();
    if (!$limit) {
        $limit = 200;
    }
    $titre = _T('analyse_xml');
    if (!$url) {
        $url_aff = 'http://';
        $onfocus = "this.value='';";
        $texte = $bandeau = $err = '';
    } else {
        include_spip('inc/distant');
        if (is_dir($url)) {
            $dir = substr($url, -1, 1) === '/' ? $url : "{$url}/";
            $ext = !preg_match('/^[.*\\w]+$/', $req_ext) ? 'php' : $req_ext;
            $files = preg_files($dir, "{$ext}\$", $limit, $rec);
            if (!$files and $ext !== 'html') {
                $files = preg_files($dir, 'html$', $limit, $rec);
                if ($files) {
                    $ext = 'html';
                }
            }
            if ($files) {
                $res = valider_dir($files, $ext, $url);
                list($err, $res) = valider_resultats($res, $ext === 'html');
                $err = ' (' . $err . '/' . count($files) . ')';
            } else {
                $res = _T('texte_vide');
                $err = '';
            }
            $bandeau = $dir . '*' . $ext . $err;
        } else {
            if (preg_match('@^((?:[.]/)?[^?]*)[?]([0-9a-z_]+)=([^&]*)(.*)$@', $url, $r)) {
                list(, $server, $dir, $script, $args) = $r;
                if ((!$server or $server == './' or strpos($server, url_de_base()) === 0) and is_dir($dir)) {
                    $url = $script;
                    // Pour quand le validateur saura simuler
                    // une query-string...
                    // $args = preg_split('/&(amp;)?[a-z0-9_]+=/', $args);
                    $args = true;
                }
            } else {
                $dir = 'exec';
                $script = $url;
                $args = true;
            }
            $transformer_xml = charger_fonction('valider', 'xml');
            $onfocus = "this.value='" . addslashes($url) . "';";
            if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) {
                $res = $transformer_xml(charger_fonction($url, $dir), $args);
                $url_aff = valider_pseudo_url($dir, $script);
            } else {
                $res = $transformer_xml(recuperer_page($url));
                $url_aff = entites_html($url);
            }
            list($texte, $err) = emboite_texte($res);
            if (!$err) {
                $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
            }
            $res = "<div style='text-align: center'>" . $err . "</div>" . "<div style='margin: 10px; text-align: left'>" . $texte . '</div>';
            $bandeau = "<a href='{$url_aff}'>{$url}</a>";
        }
    }
    $commencer_page = charger_fonction('commencer_page', 'inc');
    $debut = $commencer_page($titre);
    $jq = http_script("", 'jquery.js');
    echo str_replace('<head>', "<head>{$jq}", $debut);
    $onfocus = '<input type="text" size="70" value="' . $url_aff . '" name="var_url" id="var_url" onfocus="' . $onfocus . '" />';
    $onfocus = generer_form_ecrire('valider_xml', $onfocus, " method='get'");
    echo "<h1>", $titre, '<br>', $bandeau, '</h1>', "<div style='text-align: center'>", $onfocus, "</div>", $res, fin_page();
}
예제 #21
0
function calcul_visiteurs_connectes()
{
    $nb = count(preg_files(_DIR_TMP . 'visites/', '.'));
    return $nb;
}
예제 #22
0
/**
 * Initialiser une migration vers
 * @param string $status_file
 * @param array $tables
 * @param array $files
 * @param array $where
 * @param string $action
 * @return bool|string
 */
function migrer_vers_init($status_file, $tables=null, $files = null,$where=array(),$action='migration_vers'){
	$status_file = _DIR_TMP.basename($status_file).".txt";

	if (lire_fichier($status_file, $status)
		AND $status = unserialize($status)
		AND $status['etape']!=='fini'
		AND filemtime($status_file)>=time()-120) // si le fichier status est trop vieux c'est un abandon
		return _T("migration:erreur_{$action}_deja_en_cours");

	if (!$tables)
		list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
	if (!$files){
		$files = preg_files(_DIR_IMG,'.');
	}
	$squelettes = '';
	$dir_squels = explode(':',migration_determiner_dossier_squelette());
	if (count($dir_squels)){
		$squelettes = array();
		foreach($dir_squels as $dir_squel)
			$squelettes[$dir_squel] = preg_files($dir_squel,'.');
	}
	$status = array('tables'=>$tables,'files'=>$files,'squelettes'=>$squelettes,'where'=>$where);

	$status['etape'] = 'init';
	if (!ecrire_fichier($status_file, serialize($status)))
		return _T('migration:avis_probleme_ecriture_fichier',array('fichier'=>$status_file));

	return true;
}
예제 #23
0
파일: v019_pre193.php 프로젝트: nursit/SPIP
function v019_pre193($version_installee, $version_cible)
{
    // Syndication : ajout de l'option resume=oui/non et de la langue
    if (upgrade_vers(1.901, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic ADD `resume` VARCHAR(3) DEFAULT 'oui'");
        spip_query("ALTER TABLE spip_syndic_articles ADD `lang` VARCHAR(10) DEFAULT '' NOT NULL");
        maj_version(1.901);
    }
    // Syndication : ajout de source, url_source, tags
    if (upgrade_vers(1.902, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic_articles ADD `url_source` TINYTEXT DEFAULT '' NOT NULL");
        spip_query("ALTER TABLE spip_syndic_articles ADD `source` TINYTEXT DEFAULT '' NOT NULL");
        spip_query("ALTER TABLE spip_syndic_articles ADD `tags` TEXT DEFAULT '' NOT NULL");
        maj_version(1.902);
    }
    // URLs propres des sites (sait-on jamais)
    // + oubli des KEY url_propre sur les auteurs si installation neuve
    if (upgrade_vers(1.903, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic ADD `url_propre` VARCHAR(255) NOT NULL");
        spip_query("ALTER TABLE spip_syndic ADD INDEX `url_propre` (`url_propre`)");
        spip_query("ALTER TABLE spip_auteurs ADD INDEX `url_propre` (`url_propre`)");
        maj_version(1.903);
    }
    // suppression des anciennes tables temporaires des visites
    // (maintenant stockees sous forme de fichiers)
    if (upgrade_vers(1.904, $version_installee, $version_cible)) {
        spip_query("DROP TABLE IF EXISTS spip_visites_temp");
        spip_query("DROP TABLE IF EXISTS spip_referers_temp");
        maj_version(1.904);
    }
    // fusion des 10 tables index en une seule
    // pour fonctions futures evoluees du moteur de recherche
    if (upgrade_vers(1.905, $version_installee, $version_cible)) {
        // agrandir le champ "valeur" de spip_meta pour pouvoir y stocker
        // des choses plus sympa
        spip_query("ALTER TABLE spip_meta DROP INDEX `valeur`");
        spip_query("ALTER TABLE spip_meta CHANGE `valeur` `valeur` TEXT");
        // table des correspondances table->id_table
        $liste_tables = array();
        $liste_tables[1] = 'spip_articles';
        $liste_tables[2] = 'spip_auteurs';
        $liste_tables[3] = 'spip_breves';
        $liste_tables[4] = 'spip_documents';
        $liste_tables[5] = 'spip_forum';
        $liste_tables[6] = 'spip_mots';
        $liste_tables[7] = 'spip_rubriques';
        $liste_tables[8] = 'spip_signatures';
        $liste_tables[9] = 'spip_syndic';
        ecrire_meta('index_table', serialize($liste_tables));
        ## devenu inutile car suppression totale de l'indexation
        /*
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_article` as id_objet,'1' as id_table FROM spip_index_articles");
        		spip_query("DROP TABLE IF EXISTS spip_index_articles");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_auteur` as id_objet,'2' as id_table FROM spip_index_auteurs");
        		spip_query("DROP TABLE IF EXISTS spip_index_auteurs");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_breve` as id_objet,'3' as id_table FROM spip_index_breves");
        		spip_query("DROP TABLE IF EXISTS spip_index_breves");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_document` as id_objet,'4' as id_table FROM spip_index_documents");
        		spip_query("DROP TABLE IF EXISTS spip_index_documents");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_forum` as id_objet,'5' as id_table FROM spip_index_forum");
        		spip_query("DROP TABLE IF EXISTS spip_index_forum");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_mot` as id_objet,'6' as id_table FROM spip_index_mots");
        		spip_query("DROP TABLE IF EXISTS spip_index_mots");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_rubrique` as id_objet,'7' as id_table FROM spip_index_rubriques");
        		spip_query("DROP TABLE IF EXISTS spip_index_rubriques");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_signature` as id_objet,'8' as id_table FROM spip_index_signatures");
        		spip_query("DROP TABLE IF EXISTS spip_index_signatures");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_syndic` as id_objet,'9' as `id_table FROM spip_index_syndic");
        		spip_query("DROP TABLE IF EXISTS spip_index_syndic");
        */
        maj_version(1.905);
    }
    // cette table est desormais geree par le plugin "podcast_client", on la
    // supprime si le plugin n'est pas active ; risque inherent a l'utilisation
    // de versions alpha :-)
    if (upgrade_vers(1.906, $version_installee, $version_cible)) {
        if (!@in_array('podcast_client', $GLOBALS['plugins'])) {
            spip_query("DROP TABLE spip_documents_syndic");
        }
        maj_version(1.906);
    }
    if (upgrade_vers(1.907, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_forum ADD INDEX `idx` (`idx`)");
        maj_version(1.907);
    }
    // Oups ! on stockait les tags de syndication sous la forme rel="category"
    // au lieu de rel="directory" - http://microformats.org/wiki/rel-directory
    if (upgrade_vers(1.908, $version_installee, $version_cible)) {
        spip_query("UPDATE spip_syndic_articles SET `tags` = REPLACE(`tags`, 'rel=\"category\">', 'rel=\"directory\">') WHERE `tags` like '%category%'");
        maj_version(1.908);
    }
    if (upgrade_vers(1.909, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_mots_articles ADD PRIMARY KEY (`id_article`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_breves ADD PRIMARY KEY (`id_breve`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_rubriques ADD PRIMARY KEY (`id_rubrique`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_syndic ADD PRIMARY KEY (`id_syndic`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_documents ADD PRIMARY KEY (`id_document`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_forum ADD PRIMARY KEY (`id_forum`, `id_mot`)");
        maj_version(1.909);
    }
    if (upgrade_vers(1.91, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_auteurs_articles ADD PRIMARY KEY (`id_auteur`, `id_article`)");
        spip_query("ALTER IGNORE TABLE spip_auteurs_rubriques ADD PRIMARY KEY (`id_auteur`, `id_rubrique`)");
        spip_query("ALTER IGNORE TABLE spip_auteurs_messages ADD PRIMARY KEY (`id_auteur`, `id_message`)");
        maj_version(1.91);
    }
    if (upgrade_vers(1.911, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_auteurs_articles DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_auteurs_rubriques DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_auteurs_messages DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_mots_articles DROP INDEX `id_article`");
        spip_query("ALTER IGNORE TABLE spip_mots_breves DROP INDEX `id_breve`");
        spip_query("ALTER IGNORE TABLE spip_mots_rubriques DROP INDEX `id_rubrique`");
        spip_query("ALTER IGNORE TABLE spip_mots_syndic DROP INDEX `id_syndic`");
        spip_query("ALTER IGNORE TABLE spip_mots_forum DROP INDEX `id_forum`");
        spip_query("ALTER IGNORE TABLE spip_mots_documents DROP INDEX `id_document`");
        # 18 juillet 2007: table depreciee
        #		spip_query("ALTER IGNORE TABLE spip_caches DROP	INDEX fichier");
        maj_version(1.911);
    }
    // Le logo du site n'est plus le logo par defaut des rubriques
    // mais pour assurer la compatibilite ascendante, on le duplique
    if (upgrade_vers(1.912, $version_installee, $version_cible)) {
        @copy(_DIR_LOGOS . 'rubon0.gif', _DIR_LOGOS . 'siteon0.gif');
        @copy(_DIR_LOGOS . 'ruboff0.gif', _DIR_LOGOS . 'siteoff0.gif');
        @copy(_DIR_LOGOS . 'rubon0.jpg', _DIR_LOGOS . 'siteon0.jpg');
        @copy(_DIR_LOGOS . 'ruboff0.jpg', _DIR_LOGOS . 'siteoff0.jpg');
        @copy(_DIR_LOGOS . 'rubon0.png', _DIR_LOGOS . 'siteon0.png');
        @copy(_DIR_LOGOS . 'ruboff0.png', _DIR_LOGOS . 'siteoff0.png');
        maj_version(1.912);
    }
    // suppression de auteur_modif qui n'est plus utilise nulle part
    if (upgrade_vers(1.913, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_articles DROP `auteur_modif`");
        maj_version(1.913);
    }
    // Ajout de SVG
    if (upgrade_vers(1.914, $version_installee, $version_cible)) {
        spip_query("INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('svg', 'Scalable Vector Graphics', 'embed')");
        spip_query("UPDATE spip_types_documents SET `mime_type`='image/svg+xml' WHERE `extension`='svg'");
        maj_version(1.914);
    }
    // Ajout de plein de type mime
    if (upgrade_vers(1.915, $version_installee, $version_cible)) {
        maj_version(1.915);
    }
    // refaire l'upgrade 1.905 qui a pu foirer en partie a cause de la requete ALTER sur spip_meta
    if (upgrade_vers(1.916, $version_installee, $version_cible)) {
        // agrandir le champ "valeur" de spip_meta pour pouvoir y stocker
        // des choses plus sympa
        spip_query("ALTER TABLE spip_meta DROP INDEX `valeur`");
        spip_query("ALTER TABLE spip_meta CHANGE `valeur` `valeur` TEXT");
        #8/08/07  plus d'indexation dans le core
        //include_spip('inc/indexation');
        //update_index_tables();
        maj_version(1.916);
    }
    if (upgrade_vers(1.917, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_documents DROP `inclus`");
        maj_version(1.917);
    }
    // Permettre d'enregistrer un numero IP dans les revisions d'articles
    // a la place de l'id_auteur
    if (upgrade_vers(1.918, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_versions CHANGE `id_auteur` `id_auteur` VARCHAR(23)");
        maj_version(1.918);
    }
    if (upgrade_vers(1.919, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_ajax_fonc DROP `id_auteur`");
        maj_version('1.919');
    }
    if (upgrade_vers(1.92, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_documents_articles ADD PRIMARY KEY (`id_article`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_breves ADD PRIMARY KEY (`id_breve`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_rubriques ADD PRIMARY KEY (`id_rubrique`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_articles DROP INDEX `id_article`");
        spip_query("ALTER IGNORE TABLE spip_documents_breves DROP INDEX `id_breve`");
        spip_query("ALTER IGNORE TABLE spip_documents_rubriques DROP INDEX `id_rubrique`");
        maj_version('1.920');
    }
    if (upgrade_vers(1.922, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_meta ADD `impt` ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER `valeur`");
        $meta_serveur = array('version_installee', 'adresse_site', 'alea_ephemere_ancien', 'alea_ephemere', 'alea_ephemere_date', 'langue_site', 'langues_proposees', 'date_calcul_rubriques', 'derniere_modif', 'optimiser_table', 'drapeau_edition', 'creer_preview', 'taille_preview', 'creer_htpasswd', 'creer_htaccess', 'gd_formats_read', 'gd_formats', 'netpbm_formats', 'formats_graphiques', 'image_process', 'plugin_header', 'plugin');
        foreach ($meta_serveur as $nom) {
            spip_query("UPDATE spip_meta SET `impt`='non' WHERE `nom`=" . _q($nom));
        }
        maj_version('1.922');
    }
    if (upgrade_vers(1.923, $version_installee, $version_cible)) {
        if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])) {
            $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
            foreach ($IMPORT_tables_noimport as $key => $table) {
                if ($table == 'spip_meta') {
                    unset($IMPORT_tables_noimport[$key]);
                }
            }
            ecrire_meta('IMPORT_tables_noimport', serialize($IMPORT_tables_noimport), 'non');
        }
        maj_version('1.923');
    }
    if (upgrade_vers(1.924, $version_installee, $version_cible)) {
        spip_query('DROP TABLE spip_ajax_fonc');
        maj_version('1.924');
    }
    if (upgrade_vers(1.925, $version_installee, $version_cible)) {
        include_spip('inc/flock');
        /* deplacement des sessions */
        $f_session = preg_files('data', 'session_');
        $repertoire = _DIR_SESSIONS;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($f_session as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        /* deplacement des visites */
        $f_visites = preg_files('data/visites');
        $repertoire = sous_repertoire(_DIR_TMP, 'visites');
        foreach ($f_visites as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        /* deplacement des upload */
        $auteurs = array();
        $req = spip_query("SELECT `login` FROM spip_auteurs WHERE `statut` = '0minirezo'");
        while ($row = sql_fetch($req)) {
            $auteurs[] = $row['login'];
        }
        $f_upload = preg_files('upload', -1, 10000, $auteurs);
        $repertoire = _DIR_TRANSFERT;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($auteurs as $login) {
            if (is_dir('upload/' . $login)) {
                $sous_repertoire = sous_repertoire(_DIR_TRANSFERT, $login);
            }
        }
        foreach ($f_upload as $f) {
            @copy($f, _DIR_TMP . $f);
        }
        /* deplacement des dumps */
        $f_session = preg_files('data', 'dump');
        $repertoire = _DIR_DUMP;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($f_session as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        maj_version('1.925');
    }
    // Ajout de MP4
    if (upgrade_vers(1.926, $version_installee, $version_cible)) {
        spip_query("INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mp4', 'MPEG4', 'embed')");
        spip_query("UPDATE spip_types_documents SET `mime_type`='application/mp4' WHERE `extension`='mp4'");
        maj_version('1.926');
    }
}
예제 #24
0
파일: visites.php 프로젝트: rhertzog/lcs
function calculer_visites($t) {
	include_spip('base/abstract_sql');

	// Initialisations
	$visites = array(); # visites du site
	$visites_a = array(); # tableau des visites des articles
	$referers = array(); # referers du site
	$referers_a = array(); # tableau des referers des articles

	// charger un certain nombre de fichiers de visites,
	// et faire les calculs correspondants

	// Traiter jusqu'a 100 sessions datant d'au moins 30 minutes
	$sessions = preg_files(sous_repertoire(_DIR_TMP, 'visites'));

	$compteur = _CRON_LOT_FICHIERS_VISITE;
	$date_init = time()-30*60;
	foreach ($sessions as $item) {
		if (($d=@filemtime($item)) < $date_init) {
			if (!$d) $d = $date_init; // si le fs ne donne pas de date, on prend celle du traitement, mais tout cela risque d'etre bien douteux
			$d = date("Y-m-d",$d);
			spip_log("traite la session $item");
			compte_fichier_visite($item,
				$visites[$d], $visites_a[$d], $referers[$d], $referers_a[$d]);
			spip_unlink($item);
			if (--$compteur <= 0)
				break;
		}
		#else spip_log("$item pas vieux");
	}
	if (!count($visites))
		return;

	include_spip('genie/popularites');
	list($a,$b) = genie_popularite_constantes(24*3600);

	// Maintenant on dispose de plusieurs tableaux qu'il faut ventiler dans
	// les tables spip_visites, spip_visites_articles, spip_referers
	// et spip_referers_articles ; attention a affecter tout ca a la bonne
	// date (celle de la visite, pas celle du traitement)
	foreach(array_keys($visites) as $date)
		if ($visites[$date]) {

			// 1. les visites du site (facile)
			if (!sql_countsel('spip_visites', "date='$date'"))
				sql_insertq('spip_visites',
					array('date' => $date, 'visites' => $visites[$date]));
			else 
				sql_update('spip_visites', array('visites' => "visites+".intval($visites[$date])), "date='$date'");
		
			// 2. les visites des articles 
			if ($visites_a[$date]) {
				$ar = array();	# tableau num -> liste des articles ayant num visites
				foreach($visites_a[$date] as $id_article => $n) {
					if (!sql_countsel('spip_visites_articles',
						 "id_article=$id_article AND date='$date'")){
						sql_insertq('spip_visites_articles',
								array('id_article' => $id_article,
								      'visites' => 0,
								      'date' => $date));
					}
					$ar[$n][] = $id_article;
				}
				foreach ($ar as $n => $liste) {
					$tous = sql_in('id_article', $liste);
					sql_update('spip_visites_articles',
						array('visites' => "visites+$n"),
						   "date='$date' AND $tous");
		
					$ref = $noref = array();
					foreach($liste as $id) {
						if (isset($referers_a[$date][$id]))
							$ref[]= $id ;
						else $noref[]=$id;
					}
					// il faudrait ponderer la popularite ajoutee ($n) par son anciennete eventuelle
					// sur le modele de ce que fait genie/popularites
					if (count($noref))
						sql_update('spip_articles',
							array('visites' => "visites+$n",
							 'popularite' => "popularite+".round($n*$b,2),
							 'maj' => 'maj'),
							sql_in('id_article',$noref));
							   
					if (count($ref))
						sql_update('spip_articles',
							   array('visites' => "visites+".($n+1),
							 'popularite' => "popularite+".round($n*$b,2),
							 'maj' => 'maj'),
							sql_in('id_article',$ref));
							   
					## Ajouter un JOIN sur le statut de l'article ?
				}
			}
			// 3. Les referers du site
			// insertion pour les nouveaux, au tableau des increments sinon
			if ($referers[$date]) {
				$ar = array();
				$trouver_table = charger_fonction('trouver_table', 'base');
				$desc = $trouver_table('referers');
				$n = preg_match('/(\d+)/',$desc['field']['referer'], $r);
				$n = $n ? $r[1] : 255;
				foreach ($referers[$date] as $referer => $num) {
					$referer_md5 = sql_hex(substr(md5($referer), 0, 15));
					$referer = substr($referer,0,$n);
					if (!sql_countsel('spip_referers', "referer_md5=$referer_md5"))
						sql_insertq('spip_referers',
							array('visites' => $num,
							      'visites_jour' => $num,
							      'visites_veille' => $num,
							      'date' => $date,
							      'referer' => $referer,
							      'referer_md5' => $referer_md5));
					else $ar[$num][] = $referer_md5;
				}
		
			// appliquer les increments sur les anciens
			// attention on appelle sql_in en mode texte et pas array
			// pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849
				foreach ($ar as $num => $liste) {
					sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), sql_in('referer_md5',join(', ', $liste)));
				}
			}
			
			// 4. Les referers d'articles
			if ($referers_a[$date]) {
				$ar = array();
				$insert = array();
				// s'assurer d'un slot pour chacun
				foreach ($referers_a[$date] as $id_article => $referers)
					foreach ($referers as $referer => $num) {
						$referer_md5 = sql_hex(substr(md5($referer), 0, 15));
						$prim = "(id_article=$id_article AND referer_md5=$referer_md5)";
						if (!sql_countsel('spip_referers_articles', $prim))
							sql_insertq('spip_referers_articles',
							     array('visites' => $num,
								   'id_article' => $id_article,
								   'referer' => $referer,
								   'referer_md5' => $referer_md5));
						else $ar[$num][] = $prim;
					}
				// ajouter les visites
				foreach ($ar as $num => $liste) {
					sql_update('spip_referers_articles', array('visites' => "visites+$num"), join(" OR ", $liste));
					## Ajouter un JOIN sur le statut de l'article ?
				}
			}
		}

	// S'il reste des fichiers a manger, le signaler pour reexecution rapide
	if ($compteur==0) {
		spip_log("il reste des visites a traiter...");
		return -$t;
	}
}
예제 #25
0
/**
 * Parcourt récursivement le repertoire `$dir`, et renvoie les
 * fichiers dont le chemin vérifie le pattern (preg) donné en argument.
 *
 * En cas d'echec retourne un `array()` vide
 *
 * @example
 *     ```
 *     $x = preg_files('ecrire/data/', '[.]lock$');
 *     // $x array()
 *     ```
 *
 * @note
 *   Attention, afin de conserver la compatibilite avec les repertoires '.plat'
 *   si `$dir = 'rep/sous_rep_'` au lieu de `rep/sous_rep/` on scanne `rep/` et on
 *   applique un pattern `^rep/sous_rep_`
 *
 * @param string $dir
 *     Répertoire à parcourir
 * @param int|string $pattern
 *     Expression régulière pour trouver des fichiers, tel que `[.]lock$`
 * @param int $maxfiles
 *     Nombre de fichiers maximums retournés
 * @param array $recurs
 *     false pour ne pas descendre dans les sous répertoires
 * @return array
 *     Chemins des fichiers trouvés.
 **/
function preg_files($dir, $pattern = -1, $maxfiles = 10000, $recurs = array())
{
    $nbfiles = 0;
    if ($pattern == -1) {
        $pattern = "^{$dir}";
    }
    $fichiers = array();
    // revenir au repertoire racine si on a recu dossier/truc
    // pour regarder dossier/truc/ ne pas oublier le / final
    $dir = preg_replace(',/[^/]*$,', '', $dir);
    if ($dir == '') {
        $dir = '.';
    }
    if (@is_dir($dir) and is_readable($dir) and $d = @opendir($dir)) {
        while (($f = readdir($d)) !== false && $nbfiles < $maxfiles) {
            if ($f[0] != '.' and $f != 'CVS' and $f != 'remove.txt' and is_readable($f = "{$dir}/{$f}")) {
                if (is_file($f)) {
                    if (preg_match(";{$pattern};iS", $f)) {
                        $fichiers[] = $f;
                        $nbfiles++;
                    }
                } else {
                    if (is_dir($f) and is_array($recurs)) {
                        $rp = @realpath($f);
                        if (!is_string($rp) or !strlen($rp)) {
                            $rp = $f;
                        }
                        # realpath n'est peut etre pas autorise
                        if (!isset($recurs[$rp])) {
                            $recurs[$rp] = true;
                            $beginning = $fichiers;
                            $end = preg_files("{$f}/", $pattern, $maxfiles - $nbfiles, $recurs);
                            $fichiers = array_merge((array) $beginning, (array) $end);
                            $nbfiles = count($fichiers);
                        }
                    }
                }
            }
        }
        closedir($d);
    }
    sort($fichiers);
    return $fichiers;
}
예제 #26
0
/**
 * Trouve tous les fichiers du path correspondants à un pattern
 *
 * Pour un nom de fichier donné, ne retourne que le premier qui sera trouvé
 * par un `find_in_path()`
 *
 * @api
 * @uses creer_chemin()
 * @uses preg_files()
 *
 * @param string $dir
 * @param string $pattern
 * @param bool $recurs
 * @return array
 */
function find_all_in_path($dir, $pattern, $recurs = false)
{
    $liste_fichiers = array();
    $maxfiles = 10000;
    // Parcourir le chemin
    foreach (creer_chemin() as $d) {
        $f = $d . $dir;
        if (@is_dir($f)) {
            $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? array() : $recurs);
            foreach ($liste as $chemin) {
                $nom = basename($chemin);
                // ne prendre que les fichiers pas deja trouves
                // car find_in_path prend le premier qu'il trouve,
                // les autres sont donc masques
                if (!isset($liste_fichiers[$nom])) {
                    $liste_fichiers[$nom] = $chemin;
                }
            }
        }
    }
    return $liste_fichiers;
}
예제 #27
0
파일: session.php 프로젝트: rhertzog/lcs
function actualiser_sessions($auteur) {
	if (!$id_auteur=intval($auteur['id_auteur']))
		return;

	// memoriser l'auteur courant (celui qui modifie la fiche)
	$sauve = $GLOBALS['visiteur_session'];

	// .. mettre a jour les sessions de l'auteur cible
	foreach(preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php') as $session) {
		$GLOBALS['visiteur_session'] = array();
		include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible

		$auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
		ecrire_fichier_session($session, $auteur);
	}

	// restaurer l'auteur courant
	$GLOBALS['visiteur_session'] = $sauve;

	// si c'est le meme, rafraichir les valeurs
	if (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur'])
		verifier_session();
}
예제 #28
0
/**
 * purger un petit cache (tidy ou recherche) qui ne doit pas contenir de
 * vieux fichiers ; (cette fonction ne sert que dans des plugins obsoletes)
 *
 * http://code.spip.net/@nettoyer_petit_cache
 *
 * @param string $prefix
 * @param int $duree
 * @return void
 */
function nettoyer_petit_cache($prefix, $duree = 300)
{
    // determiner le repertoire a purger : 'tmp/CACHE/rech/'
    $dircache = sous_repertoire(_DIR_CACHE, $prefix);
    if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) {
        foreach (preg_files($dircache, '[.]txt$') as $f) {
            if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) {
                spip_unlink($f);
            }
        }
    }
}
예제 #29
0
/**
 * Liste les bases de données disponibles
 *
 * @param string $serveur
 *     Nom du connecteur
 * @param bool $requeter
 *     Inutilisé
 * @return array
 *     Liste des noms de bases
**/
function spip_sqlite_listdbs($serveur = '', $requeter = true)
{
    _sqlite_init();
    if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
        return array();
    }
    include_spip('inc/flock');
    $bases = preg_files($d, $pattern = '(.*)\\.sqlite$');
    $bds = array();
    foreach ($bases as $b) {
        // pas de bases commencant pas sqlite
        // (on s'en sert pour l'installation pour simuler la presence d'un serveur)
        // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
        if (strpos($b, '_sqlite')) {
            continue;
        }
        $bds[] = preg_replace(";.*/{$pattern};iS", '$1', $b);
    }
    return $bds;
}
/**
 * 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();
}