function action_copier_local_post($id_document) { // Il faut la source du document pour le copier $row = sql_fetsel("fichier, descriptif", "spip_documents", "id_document=$id_document"); $source = $row['fichier']; include_spip('inc/distant'); // pour 'copie_locale' include_spip('inc/documents'); // pour 'set_spip_doc' $fichier = copie_locale($source); if ($fichier) { $fichier = _DIR_RACINE . $fichier; $taille = filesize($fichier); // On le sort du repertoire IMG/distant/ $dest = preg_replace(',^.*/distant/[^/_]+[/_],', '', $fichier); $dest = sous_repertoire(_DIR_IMG, preg_replace(',^.*\.,', '', $fichier)) . $dest; if ($dest != $fichier AND @rename($fichier, $dest)) $fichier = $dest; // On indique l'ancien URL dans le descriptif (pis-aller) $row['descriptif'] .= ($row['descriptif'] ? "\n\n":'') . "[->$source]"; // $fichier contient IMG/distant/... // or, dans la table documents, IMG doit etre exclu. $fichier = set_spip_doc($fichier); spip_log("convertit doc $id_document en local: $source => $fichier"); sql_updateq('spip_documents', array('fichier' =>$fichier, 'distant'=>'non', 'taille'=>$taille, 'descriptif'=> $row['descriptif']),"id_document=".$id_document); } else { spip_log("echec copie locale $source"); } }
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 formulaires_sauvegarde_cfg_traiter_dist() { $message = array(); $fonds = array(); $mode = _request('mode'); if ($mode == 'page') { $fonds[] = _request('fond_a_sauvegarder'); } else { $pages_cfg = explode(':', _SARKASPIP_PAGES_CONFIG); foreach ($pages_cfg as $_page) { if ($_page != 'maintenance') { $fonds[] = "sarkaspip_{$_page}"; } } } $dir_cfg = sous_repertoire(_DIR_TMP, "cfg"); include_spip('inc/sarkaspip_filtres'); $ok = sauvegarder_fonds($fonds, $dir_cfg, 'maintenance'); if (!$ok) { $message['message_nok'] = _T('sarkaspip:cfg_msg_fichier_sauvegarde_nok'); } if ($ok) { if ($mode == 'page') { $message['message_ok'] = _T('sarkaspip:cfg_msg_fichier_sauvegarde_ok', array('nom_fichier' => $nom)); } else { $message['message_ok'] = _T('sarkaspip:cfg_msg_fichiers_sauvegardes_ok'); } } return $message; }
/** * Minifier un fichier JS ou CSS * * Si la source est un chemin, on retourne un chemin avec le contenu minifié * dans _DIR_VAR/cache_$format/ * Si c'est un flux on le renvoit compacté * Si on ne sait pas compacter, on renvoie ce qu'on a recu * * @param string $source * Contenu à minifier ou chemin vers un fichier dont on veut minifier le contenu * @param string $format * Format de la source (js|css). * @return string * - Contenu minifié (si la source est un contenu) * - Chemin vers un fichier ayant le contenu minifié (si source est un fichier) */ function minifier($source, $format = null) { if (!$format and preg_match(',\\.(js|css)$,', $source, $r)) { $format = $r[1]; } include_spip('inc/compresseur_minifier'); if (!function_exists($minifier = 'minifier_' . $format)) { return $source; } // Si on n'importe pas, est-ce un fichier ? if (!preg_match(',[\\s{}],', $source) and preg_match(',\\.' . $format . '$,i', $source, $r) and file_exists($source)) { // si c'est une css, il faut reecrire les url en absolu if ($format == 'css') { $source = url_absolue_css($source); } $f = basename($source, '.' . $format); $f = sous_repertoire(_DIR_VAR, 'cache-' . $format) . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-minify-" . substr(md5("{$source}-minify"), 0, 4) . "\\2", $f, 1) . '.' . $format; if (@filemtime($f) > @filemtime($source) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')) { return $f; } if (!lire_fichier($source, $contenu)) { return $source; } // traiter le contenu $contenu = $minifier($contenu); // ecrire le fichier destination, en cas d'echec renvoyer la source if (ecrire_fichier($f, $contenu, true)) { return $f; } else { return $source; } } // Sinon simple minification de contenu return $minifier($source); }
function install_etape_4_dist() { // creer le repertoire cache, qui sert partout ! if (!@file_exists(_DIR_CACHE)) { $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE); $rep = sous_repertoire(_DIR_TMP, $rep, true, true); } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); echo info_progression_etape(4, 'etape_', 'install/'); echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>"; echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>"; // installer les extensions include_spip('inc/plugin'); $afficher = charger_fonction("afficher_liste", 'plugins'); echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin'); // si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape // car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour) // au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin // et procede alors a l'installation if (!isset($GLOBALS['meta']['version_installee']) or $GLOBALS['spip_version_base'] == str_replace(',', '.', $GLOBALS['meta']['version_installee'])) { plugin_installes_meta(); } // mettre a jour si necessaire l'adresse du site // securite si on arrive plus a se loger include_spip('inc/config'); appliquer_adresse_site(''); // aller a la derniere etape qui clos l'install et redirige $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive')); echo generer_form_ecrire('install', $suite); echo install_fin_html(); }
function revisions_repair_unserialized_fragments() { $res = sql_select("*", "spip_versions_fragments", "compress=" . intval(-1)); $n = sql_count($res); spip_log("{$n} fragments a verifier", "maj"); while ($row = sql_fetch($res)) { $fragment = $row['fragment']; $set = array('compress' => 0); // verifier que le fragment est bien serializable if (unserialize($fragment) === false and strncmp($fragment, "corrompu", 8) !== 0) { $dir_tmp = sous_repertoire(_DIR_TMP, "versions_fragments_corrompus"); $set['fragment'] = revisions_repair_serialise($fragment); if (strncmp($set['fragment'], "corrompu", 8) == 0) { $f = $row['id_fragment'] . "-" . $row['objet'] . "-" . $row['id_objet']; spip_log("Fragment serialize corrompu {$f}", "maj" . _LOG_ERREUR); $f = $f . "-serialize.txt"; ecrire_fichier($dir_tmp . $f, $fragment); } } sql_updateq("spip_versions_fragments", $set, $w = "id_fragment=" . intval($row['id_fragment']) . " AND id_objet=" . intval($row['id_objet']) . " AND objet=" . sql_quote($row['objet']) . " AND version_min=" . intval($row['version_min'])); #spip_log($w,"maj"); if (time() > _TIME_OUT) { return; } } }
/** * Vérifier et préparer l'arborescence jusqu'au répertoire parent * * @param string $dest * @return bool|string * false en cas d'échec * Chemin du répertoire sinon */ function teleporter_verifier_destination($dest) { $dest = rtrim($dest, "/"); $final = basename($dest); $base = dirname($dest); $create = array(); // on cree tout le chemin jusqu'a dest non inclus while (!is_dir($base)) { $create[] = basename($base); $base = dirname($base); } while (count($create)) { if (!is_writable($base)) { return false; } $base = sous_repertoire($base, array_pop($create)); if (!$base) { return false; } } if (!is_writable($base)) { return false; } return $base . "/{$final}"; }
function install_etape_4_dist() { // creer le repertoire cache, qui sert partout ! if (!@file_exists(_DIR_CACHE)) { $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE); $rep = sous_repertoire(_DIR_TMP, $rep, true, true); } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); echo info_progression_etape(4, 'etape_', 'install/'); echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>"; echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>"; // installer les extensions include_spip('inc/plugin'); $afficher = charger_fonction("afficher_liste", 'plugins'); echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin'); plugin_installes_meta(); // mettre a jour si necessaire l'adresse du site // securite si on arrive plus a se loger include_spip('inc/config'); appliquer_adresse_site(''); // aller a la derniere etape qui clos l'install et redirige $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive')); echo generer_form_ecrire('install', $suite); echo install_fin_html(); }
function action_pdf2swf_convert() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_article=XXX $Targs = explode("=", $args[0]); $id_article = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); // if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/pdf2swf/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."pdf2swf/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'pdf2swf')) die (_T('pdfswf:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('pdfswf:err_repertoire_tmp')); // traitement d'un fichier pdf envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_pdf']['name']); if ($_FILES['fichier_pdf']['name'] == '' OR $_FILES['fichier_pdf']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_pdf']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('pdfswf:err_telechargement_fichier')); // conversion du fichier pdf en swf // $command='pdf2swf -t '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; $command='pdf2swf -t -B '. _DIR_PLUGIN_PDF2SWF.'fdplayer.swf '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; exec($command); //attacher le fichier pdf original a l'article if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_swf = $ajouter_documents($rep_dezip.$fichier_zip.'.swf', $fichier_zip.'.swf', "article", $id_article, 'document', 0, $toto=''); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_pdf') == '1') { $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }
function base_dump_dir($meta){ // determine upload va aussi initialiser l'index "restreint" $maindir = determine_upload(); if (!$GLOBALS['visiteur_session']['restreint']) $maindir = _DIR_DUMP; $dir = sous_repertoire($maindir, $meta); return $dir; }
/** * Répertoire de sauvegarde * * Crée et retourne le chemin du répertoire de sauvegarde * * @see _DIR_DUMP * * @return string */ function dump_repertoire() { $repertoire = _DIR_DUMP; if (!@file_exists($repertoire) and !($repertoire = sous_repertoire(_DIR_DUMP, '', false, true))) { $repertoire = preg_replace(',' . _DIR_TMP . ',', '', _DIR_DUMP); $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } return $repertoire; }
/** * Installation des fichiers de configuration/parametrage PAYBOX */ function presta_paybox_install_dist() { $dir = sous_repertoire(_DIR_ETC, 'presta'); $dir = sous_repertoire($dir, 'paybox'); if (!file_exists($dir . "pbx_ids.php")) { $merchant_config = "<" . "?php\n\t\tfunction bank_paybox_pbx_ids(){return array('PBX_IDENTIFIANT'=>'2','PBX_SITE'=>'1999888','PBX_RANG'=>'99');}\n" . "?" . ">"; ecrire_fichier($dir . "pbx_ids.php", $merchant_config); ecrire_meta("bank_paybox_pbx_ids", substr($dir, strlen(_DIR_ETC)) . "pbx_ids.php"); } }
function action_generer_recu_souscription_dist($id_souscription = null, $annee = null) { if (is_null($id_souscription)) { $id_souscription = _request('id_souscription'); $annee = _request('annee'); $hash = _request('hash'); $lowsec = souscription_hash_lowsec($id_souscription, $annee); if ($hash !== $lowsec) { die('Erreur : URL pas autorisee'); } } else { $lowsec = souscription_hash_lowsec($id_souscription, $annee); } $format = _request('format'); if (!in_array($format, array('html', 'pdf'))) { // PDF ou HTML ? si le plugin SPIPDF est la on genere un recu en PDF $format = "html"; if (test_plugin_actif("spipdf")) { $format = "pdf"; } } $numero = souscription_numero_recu($id_souscription, $annee); $dir = sous_repertoire(_DIR_IMG, "attestations"); // securite : dossier inaccessible en http if (!file_exists($f = $dir . ".htaccess")) { ecrire_fichier($f, "deny from all\n"); } $filename = $numero . ".{$format}"; $file = $dir . $filename; if (!file_exists($file)) { $fond = $format == "pdf" ? "attestation_pdf" : "attestation"; $content = recuperer_fond($fond, array("id_souscription" => $id_souscription, "annee" => $annee, "hash" => $lowsec)); ecrire_fichier($file, $content); } $mime = "text/html"; if ($format == "pdf") { $mime = "application/pdf"; } header("Content-type: {$mime}"); if ($format == "pdf") { $filename = preg_replace(",\\W+,", "", $GLOBALS['meta']['nom_site']) . "-Recu-" . $filename; header("Content-Disposition: attachment; filename={$filename}"); //header("Content-Transfer-Encoding: binary"); } // fix for IE catching or PHP bug issue header("Pragma: public"); header("Expires: 0"); // set expiration time header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); if ($cl = filesize($file)) { header("Content-Length: " . $cl); } readfile($file); }
function test_bal($bali, $skel, $contexte = array()) { $dossier = sous_repertoire(_DIR_TMP, 'cache-tests'); $fichier = "{$dossier}{$bali}.html"; if ($handle = fopen($fichier, 'w')) { fwrite($handle, "#CACHE{0}\n[(#REM) " . $bali . " ]\n" . $skel); fclose($handle); return recuperer_fond('tmp/cache-tests/' . $bali, $contexte); } return ''; }
/** * Charger un tgz à partir d'un tableau d'options descriptives * * @uses http_deballe_recherche_racine() * @link http://www.phpconcept.net/pcltar Utilise la librairie PclTar * * @param array $quoi * Tableau d'options * @return array|bool|int|string * En cas de réussite, Tableau décrivant le zip, avec les index suivant : * - files : la liste des fichiers présents dans le zip, * - size : la taille décompressée * - compressed_size : la taille compressée * - dirname : répertoire où les fichiers devront être décompréssés * - tmpname : répertoire temporaire où les fichiers sont décompressés * - target : cible sur laquelle décompresser les fichiers... */ function teleporter_http_charger_tgz($quoi = array()) { if (!$quoi) { return false; } foreach (array('remove' => '', 'rename' => array(), 'edit' => array(), 'root_extract' => false, 'tmp' => sous_repertoire(_DIR_CACHE, 'chargeur')) as $opt => $def) { isset($quoi[$opt]) || ($quoi[$opt] = $def); } if (!@file_exists($fichier = $quoi['fichier'])) { return 0; } include_spip('inc/pcltar'); $racine = ''; if ($list = PclTarList($fichier)) { $racine = http_deballe_recherche_racine($list); $quoi['remove'] = $racine; } else { spip_log('charger_decompresser erreur lecture liste tar ' . PclErrorString() . ' pour paquet: ' . $quoi['archive'], "teleport" . _LOG_ERREUR); return PclErrorString(); } // si pas de racine commune, reprendre le nom du fichier zip // en lui enlevant la racine h+md5 qui le prefixe eventuellement // cf action/charger_plugin L74 if (!strlen($nom = basename($racine))) { $nom = preg_replace(",^h[0-9a-f]{8}-,i", "", basename($fichier, '.zip')); } $dir_export = $quoi['root_extract'] ? $quoi['dest'] : $quoi['dest'] . $nom; $dir_export = rtrim($dir_export, '/') . '/'; $tmpname = $quoi['tmp'] . $nom . '/'; // choisir la cible selon si on veut vraiment extraire ou pas $target = $quoi['extract'] ? $dir_export : $tmpname; // ici, il faut vider le rep cible si il existe deja, non ? if (is_dir($target)) { supprimer_repertoire($target); } $ok = PclTarExtract($fichier, $target, $quoi['remove']); if ($ok == 0) { spip_log('charger_decompresser erreur tar ' . PclErrorString() . ' pour paquet: ' . $quoi['archive'], "teleport" . _LOG_ERREUR); return PclErrorString(); } spip_log('charger_decompresser OK pour paquet: ' . $quoi['archive'], "teleport"); $size = $compressed_size = 0; $removex = ',^' . preg_quote($quoi['remove'], ',') . ','; foreach ($list as $a => $f) { $size += $f['size']; $compressed_size += $f['compressed_size']; $list[$a] = preg_replace($removex, '', $f['filename']); } // Indiquer par un fichier install.log // a la racine que c'est chargeur qui a installe ce plugin ecrire_fichier($target . 'install.log', "installation: charger_plugin\n" . "date: " . gmdate('Y-m-d\\TH:i:s\\Z', time()) . "\n" . "source: " . $quoi['archive'] . "\n"); return array('files' => $list, 'size' => $size, 'compressed_size' => $compressed_size, 'dirname' => $dir_export, 'tmpname' => $tmpname, 'target' => $target); }
function get_fichier() { static $fichier = array(); $cle = $this->param->nom . ' - ' . $this->param->fichier; if (isset($fichier[$cle])) { return $fichier[$cle]; } if (!$this->param->fichier) { $f = _DIR_VAR . 'cfg/' . $this->param->nom . '.php'; } else { $f = _DIR_RACINE . $this->param->fichier; } include_spip('inc/flock'); return $fichier[$cle] = sous_repertoire(dirname($f)) . basename($f); }
function exec_charger_plugin_dist($retour='') { if (!autoriser('configurer', 'plugins')) { include_spip('inc/minipres'); echo minipres(); } else { $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin"); echo "<br />\n"; echo "<br />\n"; echo gros_titre(_T('icone_admin_plugin'),'',false); echo barre_onglets("plugins", "charger_plugin"); echo debut_gauche('plugin',true); echo debut_boite_info(true); $s = ""; $s .= _T('info_gauche_admin_tech'); echo $s; echo fin_boite_info(true); echo pipeline('affiche_gauche', array( 'args'=>array('exec'=>'charger_plugin'), 'data'=>'' ) ); echo debut_droite('plugin', true); // voire si on peut creer le repertoure auto/ sans rien demander sous_repertoire(_DIR_PLUGINS_AUTO, '', true, true); echo "<div class='liste-plugins formulaire_spip'>"; include_spip('inc/charger_plugin'); echo formulaire_charger_plugin($retour); echo "</div>"; echo pipeline('affiche_milieu', array( 'args'=>array('exec'=>'charger_plugin'), 'data'=>'' ) ); echo fin_gauche(), fin_page(); } }
function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$envoyer = true){ $filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre)))); if ($delim == 'TAB') $delim = "\t"; if (!in_array($delim,array(',',';',"\t"))) $delim = ","; $charset = $GLOBALS['meta']['charset']; $importer_charset = null; if ($delim == ',') $extension = 'csv'; else { $extension = 'xls'; # Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut $importer_charset = $charset = 'iso-8859-1'; } $filename = "$filename.$extension"; if ($entetes AND is_array($entetes) AND count($entetes)) $output = exporter_csv_ligne($entetes,$delim,$importer_charset); // on passe par un fichier temporaire qui permet de ne pas saturer la memoire // avec les gros exports $fichier = sous_repertoire(_DIR_CACHE,"export") . $filename; $fp = fopen($fichier, 'w'); $length = fwrite($fp, $output); while ($row=is_array($resource)?array_shift($resource):sql_fetch($resource)){ $output = exporter_csv_ligne($row,$delim,$importer_charset); $length += fwrite($fp, $output); } fclose($fp); if ($envoyer) { Header("Content-Type: text/comma-separated-values; charset=$charset"); Header("Content-Disposition: attachment; filename=$filename"); //non supporte //Header("Content-Type: text/plain; charset=$charset"); Header("Content-Length: $length"); ob_clean(); flush(); readfile($fichier); } return $fichier; }
function creer_repertoire_documents($ext) { $rep = sous_repertoire(_DIR_IMG, $ext); if (!$ext OR !$rep) { spip_log("creer_repertoire_documents '$rep' interdit"); exit; } // Cette variable de configuration peut etre posee par un plugin // par exemple acces_restreint if ($GLOBALS['meta']["creer_htaccess"] == 'oui') { include_spip('inc/acces'); verifier_htaccess($rep); } return $rep; }
function info_maj_cache($nom, $dir, $page='') { $re = '<archives id="a' . $GLOBALS['meta']["alea_ephemere"] . '">'; if (preg_match("/$re/", $page)) return $page; $url = _VERSIONS_SERVEUR . $dir . '/' . _VERSIONS_LISTE; $a = file_exists($nom) ? filemtime($nom) : ''; include_spip('inc/distant'); $res = recuperer_lapage($url, false, 'GET', _COPIE_LOCALE_MAX_SIZE, '',false, $a); // Si rien de neuf (ou inaccessible), garder l'ancienne if ($res) list(, $page) = $res; // Placer l'indicateur de fraicheur $page = preg_replace('/^<archives.*?>/', $re, $page); sous_repertoire(_DIR_CACHE_XML); ecrire_fichier($nom, $page); return $page; }
/** * Generer a la volee un fond a partir d'une table de contenu * * @param string $type * @param string $table * @param string $table_sql * @param array $desc * @param string $ext * * @return string */ function public_echafauder_dist($type, $table, $table_sql, $desc, $ext) { include_spip('public/interfaces'); $primary = id_table_objet($type); if (!$primary and isset($desc['key']["PRIMARY KEY"])) { $primary = $desc['key']["PRIMARY KEY"]; } /* reperer un titre */ $titre = 'titre'; if (isset($GLOBALS['table_titre'][$table])) { $titre = explode(' ', $GLOBALS['table_titre'][$table]); $titre = explode(',', reset($titre)); $titre = reset($titre); } if (isset($desc['field'][$titre])) { unset($desc['field'][$titre]); $titre = "<h1 class='h1 #EDIT{titre}'>#" . strtoupper($titre) . "</h1>"; } else { $titre = ""; } /* reperer une date */ $date = "date"; if (isset($GLOBALS['table_date'][$table])) { $date = $GLOBALS['table_date'][$table]; } if (isset($desc['field'][$date])) { unset($desc['field'][$date]); $date = strtoupper($date); $date = "<p class='info-publi'>[(#{$date}|nom_jour) ][(#{$date}|affdate)][, <span class='auteurs'><:par_auteur:> (#LESAUTEURS)</span>]</p>"; } else { $date = ""; } $content = array(); foreach ($desc['field'] as $champ => $z) { if (!in_array($champ, array('maj', 'statut', 'idx', $primary))) { $content[] = "[<div><strong>{$champ}</strong><div class='#EDIT{" . $champ . "} {$champ}'>(#" . strtoupper($champ) . "|image_reduire{500,0})</div></div>]"; } } $content = implode("\n\t", $content); $scaffold = "#CACHE{0}\n<BOUCLE_contenu({$table_sql}){" . $primary . "}>\n[(#REM) Fil d'Ariane ]\n<p id='hierarchie'><a href='#URL_SITE_SPIP/'><:accueil_site:></a>[ > <strong class='on'>(#TITRE|couper{80})</strong>]</p>\n\n<div class='contenu-principal'>\n\t<div class='cartouche'>\n\t\t{$titre}\n\t\t{$date}\n\t</div>\n\n\t{$content}\n\n</div>\n\n[<div class='notes surlignable'><h2 class='h2 pas_surlignable'><:info_notes:></h2>(#NOTES)</div>]\n</BOUCLE_contenu>"; $dir = sous_repertoire(_DIR_CACHE, "scaffold", false); $dir = sous_repertoire($dir, "contenu", false); $f = $dir . "{$type}"; ecrire_fichier("{$f}.{$ext}", $scaffold); return $f; }
function cfg_php_extraire_infos($lieu) { list($fichier, $casier) = explode(':', $lieu); if (!$casier) { $casier = $fichier; $fichier = ''; } if ($fichier) { sous_repertoire(dirname($f)); $fichier = _DIR_RACINE . $fichier; } else { // le premier element du casier est le nom de base du fichier. on l'enleve $nom = array_shift($casier = explode('/', $casier)); $casier = implode('/', $casier); sous_repertoire(_DIR_VAR . 'cfg'); $fichier = _DIR_VAR . 'cfg/' . $nom . '.php'; } return array($fichier, $casier); }
function sarkaspip_zengarden_activer_theme($flux) { $dir = $flux['args']['dir']; $action = $flux['args']['action']; $dir_cfg = $dir . '/cfg'; $cfg = preg_files($dir_cfg); include_spip('inc/config'); if ($action == 'activer') { // On sauvegarde des valeurs actuelles pour un eventuel rappel $dir_cfg = sous_repertoire(_DIR_TMP, "cfg"); $dir_cfg = sous_repertoire(_DIR_TMP, "themes"); $fonds = array(); foreach ($cfg as $_fichier_cfg) { $fonds[] = basename($_fichier_cfg, '.txt'); } include_spip('inc/sarkaspip_filtres'); $ok = sauvegarder_fonds($fonds, $dir_cfg, 'theme'); // On ecrit la nouvelle configuration n�cessaire au theme choisi $flux['data'] = true; foreach ($cfg as $_fichier_cfg) { lire_fichier($_fichier_cfg, $tableau); $fond = basename($_fichier_cfg, '.txt'); ecrire_config($fond, $tableau); } } else { if ($action == 'effacer') { $fichiers = array(); $flux['data'] = true; foreach ($cfg as $_fichier_cfg) { $fond = basename($_fichier_cfg, '.txt'); effacer_config($fond); $fichiers[] = _DIR_TMP . 'themes/cfg/' . $fond . '.txt'; } include_spip('inc/sarkaspip_filtres'); $ok = restaurer_fonds($fichiers); } else { // action apercevoir : on ne fait rien, on sait pas faire.. } } return $flux; }
function compacte($source, $format = null) { if (!$format AND preg_match(',\.(js|css)$,', $source, $r)) $format = $r[1]; include_spip('inc/compresseur'); if (!function_exists($compacte = 'compacte_'.$format)) return $source; // Si on n'importe pas, est-ce un fichier ? if (!preg_match(',[\s{}],', $source) AND preg_match(',\.'.$format.'$,i', $source, $r) AND file_exists($source)) { // si c'est une css, il faut reecrire les url en absolu if ($format=='css') $source = url_absolue_css($source); $f = basename($source,'.'.$format); $f = sous_repertoire (_DIR_VAR, 'cache-'.$format) . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-compacte-" . substr(md5("$source-compacte"), 0,4) . "\\2", $f, 1) . '.' . $format; if ((@filemtime($f) > @filemtime($source)) AND ($GLOBALS['var_mode'] != 'recalcul')) return $f; if (!lire_fichier($source, $contenu)) return $source; // traiter le contenu $contenu = $compacte($contenu); // ecrire le fichier destination, en cas d'echec renvoyer la source if (ecrire_fichier($f, $contenu, true)) return $f; else return $source; } // Sinon simple compactage de contenu return $compacte($source); }
function install_etape_4_dist() { // creer le repertoire cache, qui sert partout ! if(!@file_exists(_DIR_CACHE)) { $rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE); $rep = sous_repertoire(_DIR_TMP, $rep, true,true); } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); echo info_progression_etape(4,'etape_','install/'); echo "<p>" ._L('Les extensions ci-dessous sont chargées et activées dans le répertoire @extensions@.', array('extensions' => joli_repertoire(_DIR_EXTENSIONS))) ."</p>"; // installer les extensions include_spip('inc/plugin'); $afficher = charger_fonction("afficher_liste",'plugins'); echo $afficher(self(), liste_plugin_files(_DIR_EXTENSIONS),array(), _DIR_EXTENSIONS,'afficher_nom_plugin'); installe_plugins(); echo info_etape(_T('info_derniere_etape'), _T('info_utilisation_spip') ); // mettre a jour si necessaire l'adresse du site // securite si on arrive plus a se loger include_spip('inc/config'); $_POST['adresse_site'] = ''; appliquer_modifs_config(); // aller a la derniere etape qui clos l'install et redirige $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive')); echo generer_form_ecrire('install', $suite); echo install_fin_html(); }
/** * Ecrire les fichiers de config/parametres a la volee avant l'appel a un binaire SIPS * @param string $service * @param string $merchant_id * @param string $certificat * @param string $dir_logo * @return string */ function sips_ecrire_config_merchant($service, $merchant_id, $certificat, $dir_logo) { // creer les fichiers config pour la transaction $pathfile = sous_repertoire(_DIR_TMP, "sips"); $pathfile = sous_repertoire($pathfile, $service); $realdir = realpath($pathfile); $config_file = "DEBUG!NO!\n" . "D_LOGO!" . substr($dir_logo, strlen(_DIR_RACINE)) . "!\n" . "F_DEFAULT!{$realdir}/parmcom.sips!\n" . "F_PARAM!{$realdir}/parmcom!\n" . "F_CERTIFICATE!{$realdir}/certif!"; ecrire_fichier($p = $pathfile . "pathfile", $config_file); // le fichier par defaut if (!file_exists($pathfile . "parmcom.sips")) { copy(_DIR_PLUGIN_BANK . "presta/sips/bin/{$service}/param/parmcom.sips", $pathfile . "parmcom.sips"); } // le fichier du merchant if (!file_exists($pathfile . "parmcom.{$merchant_id}")) { copy(_DIR_PLUGIN_BANK . "presta/sips/bin/{$service}/param/parmcom", $pathfile . "parmcom.{$merchant_id}"); } // le certificat if ($merchant_id) { ecrire_fichier($p = $pathfile . "certif.fr.{$merchant_id}", $certificat); } return $realdir; }
function install_etape_fin_dist() { ecrire_acces(); $f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP); if (file_exists(_FILE_CHMOD_TMP)) { if (!@rename(_FILE_CHMOD_TMP, $f)) { if (@copy(_FILE_CHMOD_TMP, $f)) spip_unlink(_FILE_CHMOD_TMP); } } $f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP); if (file_exists(_FILE_CONNECT_TMP)) { spip_log("renomme $f"); if (!@rename(_FILE_CONNECT_TMP, $f)) { if (@copy(_FILE_CONNECT_TMP, $f)) @spip_unlink(_FILE_CONNECT_TMP); } } // creer le repertoire cache, qui sert partout ! // deja fait en etape 4 en principe, on garde au cas ou if(!@file_exists(_DIR_CACHE)) { $rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE); $rep = sous_repertoire(_DIR_TMP, $rep, true,true); } // Verifier la securite des htaccess // Si elle ne fonctionne pas, prevenir $msg = install_verifier_htaccess(); if ($msg) { $cible = _T('public:accueil_site'); $cible = generer_form_ecrire('accueil', '','', $cible); echo minipres('AUTO', $msg . $cible); // ok, deboucher dans l'espace prive } else redirige_url_ecrire('accueil'); }
/** * Déterminer l'utilisation du vertebreur * * Lorsqu'on inclut le squelette `prive/vertebres:$table`, * vérifier l'autorisation et créer le squelette spécifique * à la table demandée si on la trouve * * @pipeline styliser * @uses base_trouver_table_dist() * @uses public_vertebrer_dist() * * @param array $flux Données du pipeline * @return array Données du pipeline */ function vertebres_styliser($flux) { // si pas de squelette trouve, // on verifie si on demande une vue de table if (!($squelette = $flux['data']) and $fond = $flux['args']['fond'] and strncmp($fond, 'prive/vertebres:', 16) == 0 and $table = substr($fond, 16) and include_spip('inc/autoriser') and autoriser('webmestre')) { $ext = $flux['args']['ext']; $connect = $flux['args']['connect']; // Si pas de squelette regarder si c'est une table // et si l'on a la permission de l'afficher $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table($table, $connect)) { $fond = $table; $base = _DIR_VERTEBRES . 'table_' . $fond . ".{$ext}"; if (!file_exists($base) or defined('_VAR_MODE') and _VAR_MODE) { sous_repertoire(_DIR_VERTEBRES); $vertebrer = charger_fonction('vertebrer', 'public'); ecrire_fichier($base, $vertebrer($desc)); } // sauver les changements $flux['data'] = _DIR_VERTEBRES . 'table_' . $fond; } } return $flux; }
/** * fonction pour la premiere connexion a un serveur SQLite * http://code.spip.net/@_sqlite_init * * @return void */ function _sqlite_init() { if (!defined('_DIR_DB')) { define('_DIR_DB', _DIR_ETC . 'bases/'); } if (!defined('_SQLITE_CHMOD')) { define('_SQLITE_CHMOD', _SPIP_CHMOD); } if (!is_dir($d = _DIR_DB)) { include_spip('inc/flock'); sous_repertoire($d); } }
/** * Produire un fichier statique a partir d'un squelette dynamique * Permet ensuite a apache de le servir en statique sans repasser * par spip.php a chaque hit sur le fichier * si le format (css ou js) est passe dans contexte['format'], on l'utilise * sinon on regarde si le fond finit par .css ou .js * sinon on utilie "html" * * @param string $fond * @param array $contexte * @param array $options * @param string $connect * @return string */ function produire_fond_statique($fond, $contexte = array(), $options = array(), $connect = '') { if (isset($contexte['format'])) { $extension = $contexte['format']; unset($contexte['format']); } else { $extension = "html"; if (preg_match(',[.](css|js|json)$,', $fond, $m)) { $extension = $m[1]; } } // recuperer le contenu produit par le squelette $options['raw'] = true; $cache = recuperer_fond($fond, $contexte, $options, $connect); // calculer le nom de la css $dir_var = sous_repertoire(_DIR_VAR, 'cache-' . $extension); $nom_safe = preg_replace(",\\W,", '_', str_replace('.', '_', $fond)); $filename = $dir_var . $extension . "dyn-{$nom_safe}-" . substr(md5($fond . serialize($contexte) . $connect), 0, 8) . ".{$extension}"; // mettre a jour le fichier si il n'existe pas // ou trop ancien // le dernier fichier produit est toujours suffixe par .last // et recopie sur le fichier cible uniquement si il change if (!file_exists($filename) or !file_exists($filename . ".last") or isset($cache['lastmodified']) and $cache['lastmodified'] and filemtime($filename . ".last") < $cache['lastmodified'] or defined('_VAR_MODE') and _VAR_MODE == 'recalcul') { $contenu = $cache['texte']; // passer les urls en absolu si c'est une css if ($extension == "css") { $contenu = urls_absolues_css($contenu, test_espace_prive() ? generer_url_ecrire('accueil') : generer_url_public($fond)); } // ne pas insérer de commentaire si c'est du json if ($extension != "json") { $comment = "/* #PRODUIRE{fond={$fond}"; foreach ($contexte as $k => $v) { $comment .= ",{$k}={$v}"; } // pas de date dans le commentaire car sinon ca invalide le md5 et force la maj // mais on peut mettre un md5 du contenu, ce qui donne un aperu rapide si la feuille a change ou non $comment .= "}\n md5:" . md5($contenu) . " */\n"; } // et ecrire le fichier ecrire_fichier($filename . ".last", $comment . $contenu); // regarder si on recopie if (!file_exists($filename) or md5_file($filename) !== md5_file($filename . ".last")) { @copy($filename . ".last", $filename); spip_clearstatcache(true, $filename); // eviter que PHP ne reserve le vieux timestamp } } return $filename; }