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); }
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; }
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; }
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]; }
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; } }
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; }
/** * 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; }
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; }
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; }
/** * 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; }
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; }
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; }
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> </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> </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><:$aff_nom_module$raccourci:></b></td>\n<td class='arial2'>".$val."</td></tr>"; } echo "</table>",fin_cadre_relief(true); }
/** * 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; }
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; }
/** * 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); }
/** * 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; } }
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); }
/** * 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(); }
function calcul_visiteurs_connectes() { $nb = count(preg_files(_DIR_TMP . 'visites/', '.')); return $nb; }
/** * 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; }
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'); } }
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; } }
/** * 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; }
/** * 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; }
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(); }
/** * 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); } } } }
/** * 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(); }