Example #1
0
function create_tables()
{
    if (file_exists($GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_config'] . '/' . 'mysql.php')) {
        include $GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_config'] . '/' . 'mysql.php';
    }
    $if_not_exists = $GLOBALS['sgdb'] == 'mysql' ? 'IF NOT EXISTS' : '';
    // SQLite does'nt know these syntaxes.
    $auto_increment = $GLOBALS['sgdb'] == 'mysql' ? 'AUTO_INCREMENT' : '';
    // SQLite does'nt know these syntaxes, but MySQL needs it.
    $GLOBALS['dbase_structure']['links'] = "CREATE TABLE " . $if_not_exists . " links\n\t\t(\n\t\t\tID INTEGER PRIMARY KEY {$auto_increment},\n\t\t\tbt_type CHAR(20),\n\t\t\tbt_id BIGINT,\n\t\t\tbt_content TEXT,\n\t\t\tbt_wiki_content TEXT,\n\t\t\tbt_author TEXT,\n\t\t\tbt_title TEXT,\n\t\t\tbt_tags TEXT,\n\t\t\tbt_link TEXT,\n\t\t\tbt_statut TINYINT\n\t\t); CREATE INDEX dateL ON links ( bt_id );";
    $GLOBALS['dbase_structure']['commentaires'] = "CREATE TABLE " . $if_not_exists . " commentaires\n\t\t(\n\t\t\tID INTEGER PRIMARY KEY {$auto_increment},\n\t\t\tbt_type CHAR(20),\n\t\t\tbt_id BIGINT,\n\t\t\tbt_article_id BIGINT,\n\t\t\tbt_content TEXT,\n\t\t\tbt_wiki_content TEXT,\n\t\t\tbt_author TEXT,\n\t\t\tbt_link TEXT,\n\t\t\tbt_webpage TEXT,\n\t\t\tbt_email TEXT,\n\t\t\tbt_subscribe TINYINT,\n\t\t\tbt_statut TINYINT\n\t\t); CREATE INDEX dateC ON commentaires ( bt_id );";
    $GLOBALS['dbase_structure']['articles'] = "CREATE TABLE " . $if_not_exists . " articles\n\t\t(\n\t\t\tID INTEGER PRIMARY KEY {$auto_increment},\n\t\t\tbt_type CHAR(20),\n\t\t\tbt_id BIGINT,\n\t\t\tbt_date BIGINT,\n\t\t\tbt_title TEXT,\n\t\t\tbt_abstract TEXT,\n\t\t\tbt_notes TEXT,\n\t\t\tbt_link TEXT,\n\t\t\tbt_content TEXT,\n\t\t\tbt_wiki_content TEXT,\n\t\t\tbt_categories TEXT,\n\t\t\tbt_keywords TEXT,\n\t\t\tbt_nb_comments INTEGER,\n\t\t\tbt_allow_comments TINYINT,\n\t\t\tbt_statut TINYINT\n\t\t); CREATE INDEX dateidA ON articles (bt_date, bt_id );";
    /* here bt_ID is a GUID, from the feed, not only a 'YmdHis' date string.*/
    $GLOBALS['dbase_structure']['rss'] = "CREATE TABLE " . $if_not_exists . " rss\n\t\t(\n\t\t\tID INTEGER PRIMARY KEY {$auto_increment},\n\t\t\tbt_id TEXT,\n\t\t\tbt_date BIGINT,\n\t\t\tbt_title TEXT,\n\t\t\tbt_link TEXT,\n\t\t\tbt_feed TEXT,\n\t\t\tbt_content TEXT,\n\t\t\tbt_statut TINYINT,\n\t\t\tbt_folder TEXT\n\t\t); CREATE INDEX dateidR ON rss (bt_date, bt_id );";
    /*
     * SQLite : opens file, check tables by listing them, create the one that miss.
     *
     */
    switch ($GLOBALS['sgdb']) {
        case 'sqlite':
            if (!creer_dossier($GLOBALS['BT_ROOT_PATH'] . '' . $GLOBALS['dossier_db'])) {
                die('Impossible de creer le dossier databases (chmod?)');
            }
            $file = $GLOBALS['BT_ROOT_PATH'] . '' . $GLOBALS['dossier_db'] . '/' . $GLOBALS['db_location'];
            // open tables
            try {
                $db_handle = new PDO('sqlite:' . $file);
                $db_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $db_handle->query("PRAGMA temp_store=MEMORY; PRAGMA synchronous=OFF; PRAGMA journal_mode=WAL;");
                // list tables
                $list_tbl = $db_handle->query("SELECT name FROM sqlite_master WHERE type='table'");
                // make an normal array, need for "in_array()"
                $tables = array();
                foreach ($list_tbl as $j) {
                    $tables[] = $j['name'];
                }
                // check each wanted table (this is because the "IF NOT EXISTS" condition doesn’t exist in lower versions of SQLite.
                $wanted_tables = array('commentaires', 'articles', 'links', 'rss');
                foreach ($wanted_tables as $i => $name) {
                    if (!in_array($name, $tables)) {
                        $results = $db_handle->query($GLOBALS['dbase_structure'][$name]);
                    }
                }
            } catch (Exception $e) {
                die('Erreur 1: ' . $e->getMessage());
            }
            break;
            /*
             * MySQL : create tables with the IF NOT EXISTS condition. Easy.
             *
             */
        /*
         * MySQL : create tables with the IF NOT EXISTS condition. Easy.
         *
         */
        case 'mysql':
            try {
                $options_pdo[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                $db_handle = new PDO('mysql:host=' . $GLOBALS['mysql_host'] . ';dbname=' . $GLOBALS['mysql_db'] . ";charset=utf8;sql_mode=PIPES_AS_CONCAT;", $GLOBALS['mysql_login'], $GLOBALS['mysql_passwd'], $options_pdo);
                // check each wanted table
                $wanted_tables = array('commentaires', 'articles', 'links', 'rss');
                foreach ($wanted_tables as $i => $name) {
                    $results = $db_handle->query($GLOBALS['dbase_structure'][$name] . "DEFAULT CHARSET=utf8");
                    $results->closeCursor();
                }
            } catch (Exception $e) {
                die('Erreur 2: ' . $e->getMessage());
            }
            break;
    }
    return $db_handle;
}
Example #2
0
            redirection('install.php?s=2&l=' . $_POST['langue']);
        }
    } else {
        afficher_form_1();
    }
} elseif ($GLOBALS['step'] == '2') {
    // ID + MOT DE PASSE
    if (isset($_POST['verif_envoi_2'])) {
        if ($err_2 = valid_install_2()) {
            afficher_form_2($err_2);
        } else {
            $config_dir = '../config';
            creer_dossier($config_dir, 1);
            creer_dossier('../' . $GLOBALS['dossier_images'], 0);
            creer_dossier('../' . $GLOBALS['dossier_fichiers'], 0);
            creer_dossier('../' . $GLOBALS['dossier_db'], 1);
            fichier_adv_conf();
            // include it because it contains salt, for passwd
            $adv_options = parse_ini_file($config_dir . '/config-advanced.ini');
            foreach ($adv_options as $option => $value) {
                $GLOBALS[$option] = $value;
            }
            fichier_user();
            include_once $config_dir . '/user.php';
            traiter_install_2();
            redirection('install.php?s=3&l=' . $_POST['langue']);
        }
    } else {
        afficher_form_2();
    }
} elseif ($GLOBALS['step'] == '3') {
Example #3
0
function rafraichir_cache()
{
    creer_dossier($GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_cache'], 1);
    $arr_a = liste_elements("SELECT * FROM articles WHERE bt_statut = 1 ORDER BY bt_date DESC LIMIT 0, 20", array(), 'articles');
    $arr_c = liste_elements("SELECT * FROM commentaires WHERE bt_statut = 1 ORDER BY bt_id DESC LIMIT 0, 20", array(), 'commentaires');
    $arr_l = liste_elements("SELECT * FROM links WHERE bt_statut = 1 ORDER BY bt_id DESC LIMIT 0, 20", array(), 'links');
    $file = $GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_cache'] . '/' . 'cache_rss_array.dat';
    return file_put_contents($file, '<?php /* ' . chunk_split(base64_encode(serialize(array('c' => $arr_c, 'a' => $arr_a, 'l' => $arr_l)))) . ' */');
}
Example #4
0
require_once '../inc/inc.php';
error_reporting($GLOBALS['show_errors']);
operate_session();
$begin = microtime(TRUE);
$GLOBALS['db_handle'] = open_base($GLOBALS['db_location']);
$GLOBALS['liste_fichiers'] = open_serialzd_file($GLOBALS['fichier_liste_fichiers']);
$GLOBALS['liste_flux'] = open_serialzd_file($GLOBALS['fichier_liste_fluxrss']);
afficher_html_head($GLOBALS['lang']['titre_maintenance']);
echo '<div id="top">' . "\n";
afficher_msg();
afficher_topnav('preferences.php', $GLOBALS['lang']['titre_maintenance']);
echo '</div>' . "\n";
echo '<div id="axe">' . "\n";
echo '<div id="page">' . "\n";
// création du dossier des backups
creer_dossier($GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_backup'], 0);
/*
 * reconstruit la BDD des fichiers (qui n’est pas dans SQL, mais un fichier serializé à côte)
*/
function rebuilt_file_db()
{
    $idir = rm_dots_dir(scandir($GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_images']));
    // scans also subdir of img/* (in one single array of paths)
    foreach ($idir as $i => $e) {
        $subelem = $GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_images'] . '/' . $e;
        if (is_dir($subelem)) {
            unset($idir[$i]);
            // rm folder entry itself
            $subidir = rm_dots_dir(scandir($subelem));
            foreach ($subidir as $j => $im) {
                $idir[] = $e . '/' . $im;
Example #5
0
function bdd_fichier($fichier, $quoi, $comment, $sup_var)
{
    if ($fichier['bt_type'] == 'image') {
        $dossier = $GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_images'] . $fichier['bt_path'];
    } else {
        $dossier = $GLOBALS['BT_ROOT_PATH'] . $GLOBALS['dossier_fichiers'];
        $rand_dir = '';
    }
    if (FALSE === creer_dossier($dossier, 0)) {
        die($GLOBALS['lang']['err_file_write']);
    }
    // ajout d’un nouveau fichier
    if ($quoi == 'ajout-nouveau') {
        $prefix = '';
        foreach ($GLOBALS['liste_fichiers'] as $files) {
            if ($fichier['bt_checksum'] == $files['bt_checksum']) {
                $fichier['bt_id'] = $files['bt_id'];
                return $fichier;
            }
        }
        // éviter d’écraser un fichier existant
        while (file_exists($dossier . '/' . $prefix . $fichier['bt_filename'])) {
            $prefix .= rand(0, 9);
        }
        $dest = $prefix . $fichier['bt_filename'];
        $fichier['bt_filename'] = $dest;
        // redéfinit le nom du fichier.
        // copie du fichier physique
        // Fichier uploadé s’il y a (sinon fichier téléchargé depuis l’URL)
        if ($comment == 'upload') {
            $new_file = $sup_var['tmp_name'];
            if (move_uploaded_file($new_file, $dossier . '/' . $dest)) {
                $fichier['bt_checksum'] = sha1_file($dossier . '/' . $dest);
            } else {
                redirection(basename($_SERVER['PHP_SELF']) . '?errmsg=error_fichier_ajout_2');
                exit;
            }
        } elseif ($comment == 'download' and copy($sup_var, $dossier . '/' . $dest)) {
            $fichier['bt_filesize'] = filesize($dossier . '/' . $dest);
        } else {
            redirection(basename($_SERVER['PHP_SELF']) . '?errmsg=error_fichier_ajout');
            exit;
        }
        // si fichier par POST ou par URL == OK, on l’ajoute à la base. (si pas OK, on serai déjà sorti par le else { redirection() }.
        if ($fichier['bt_type'] == 'image') {
            // miniature si c’est une image
            create_thumbnail($dossier . '/' . $dest);
            list($fichier['bt_dim_w'], $fichier['bt_dim_h']) = getimagesize($dossier . '/' . $dest);
        } else {
            $fichier['bt_path'] = '';
        }
        // ajout à la base.
        $GLOBALS['liste_fichiers'][] = $fichier;
        $GLOBALS['liste_fichiers'] = tri_selon_sous_cle($GLOBALS['liste_fichiers'], 'bt_id');
        file_put_contents($GLOBALS['fichier_liste_fichiers'], '<?php /* ' . chunk_split(base64_encode(serialize($GLOBALS['liste_fichiers']))) . ' */');
    } elseif ($quoi == 'editer-existant') {
        $new_filename = $fichier['bt_filename'];
        $old_filename = $sup_var;
        if ($new_filename != $old_filename) {
            // nom du fichier a changé ? on déplace le fichier.
            $prefix = '';
            while (file_exists($dossier . '/' . $prefix . $new_filename)) {
                // évite d’avoir deux fichiers de même nom
                $prefix .= rand(0, 9);
            }
            $new_filename = $prefix . $fichier['bt_filename'];
            $fichier['bt_filename'] = $new_filename;
            // update file name in $fichier array(), with the new prefix.
            // rename file on disk
            if (rename($dossier . '/' . $old_filename, $dossier . '/' . $new_filename)) {
                // si c’est une image : renome la miniature si elle existe, sinon la crée
                if ($fichier['bt_type'] == 'image') {
                    if (($old_thb = chemin_thb_img_test($dossier . '/' . $old_filename)) != $dossier . '/' . $old_filename) {
                        rename($old_thb, chemin_thb_img($dossier . '/' . $new_filename));
                    } else {
                        create_thumbnail($dossier . '/' . $new_filename);
                    }
                }
                // error rename ficher
            } else {
                redirection(basename($_SERVER['PHP_SELF']) . '?file_id=' . $fichier['bt_id'] . '&errmsg=error_fichier_rename');
            }
        }
        list($fichier['bt_dim_w'], $fichier['bt_dim_h']) = getimagesize($dossier . '/' . $new_filename);
        // reupdate filesize.
        // modifie le fichier dans la BDD des fichiers.
        foreach ($GLOBALS['liste_fichiers'] as $key => $entry) {
            if ($entry['bt_id'] == $fichier['bt_id']) {
                $GLOBALS['liste_fichiers'][$key] = $fichier;
                // trouve la bonne entrée dans la base.
            }
        }
        $GLOBALS['liste_fichiers'] = tri_selon_sous_cle($GLOBALS['liste_fichiers'], 'bt_id');
        file_put_contents($GLOBALS['fichier_liste_fichiers'], '<?php /* ' . chunk_split(base64_encode(serialize($GLOBALS['liste_fichiers']))) . ' */');
        // écrit dans le fichier, la liste
        redirection(basename($_SERVER['PHP_SELF']) . '?file_id=' . $fichier['bt_id'] . '&edit&msg=confirm_fichier_edit');
    } elseif ($quoi == 'supprimer-existant') {
        $id = $sup_var;
        // FIXME ajouter un test de vérification de session (security coin)
        foreach ($GLOBALS['liste_fichiers'] as $fid => $fich) {
            if ($id == $fich['bt_id']) {
                $tbl_id = $fid;
                break;
            }
        }
        // remove physical file on disk if it exists
        if (is_file($dossier . '/' . $fichier['bt_filename']) and isset($tbl_id)) {
            $liste_fichiers = rm_dots_dir(scandir($dossier));
            // liste les fichiers réels dans le dossier
            if (TRUE === unlink($dossier . '/' . $fichier['bt_filename'])) {
                // fichier physique effacé
                if ($fichier['bt_type'] == 'image') {
                    // supprimer aussi la miniature si elle existe.
                    @unlink(chemin_thb_img($dossier . '/' . $fichier['bt_filename']));
                    // supprime la thumbnail si y’a
                }
                unset($GLOBALS['liste_fichiers'][$tbl_id]);
                // efface le fichier dans la liste des fichiers.
                $GLOBALS['liste_fichiers'] = tri_selon_sous_cle($GLOBALS['liste_fichiers'], 'bt_id');
                file_put_contents($GLOBALS['fichier_liste_fichiers'], '<?php /* ' . chunk_split(base64_encode(serialize($GLOBALS['liste_fichiers']))) . ' */');
                // enregistre la liste
                return 'success';
            } else {
                // erreur effacement fichier physique
                return 'error_suppr_file_suppr_error';
            }
        }
        // the file in DB does not exists on disk => remove entry from DB
        if (isset($tbl_id)) {
            unset($GLOBALS['liste_fichiers'][$tbl_id]);
            // remove entry from files-list.
        }
        $GLOBALS['liste_fichiers'] = tri_selon_sous_cle($GLOBALS['liste_fichiers'], 'bt_id');
        file_put_contents($GLOBALS['fichier_liste_fichiers'], '<?php /* ' . chunk_split(base64_encode(serialize($GLOBALS['liste_fichiers']))) . ' */');
        // enregistre la liste
        return 'no_such_file_on_disk';
    }
}