SMETI store ITEMS
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

110 Zeilen
3.9 KiB

<?php
function clearLine()
{
    echo "\033[2K\r";
}
function replaceOut($str)
{
    $numNewLines = substr_count($str, "\n");
    echo chr(27) . "[0G"; // Set cursor to first column
    echo $str;
    echo chr(27) . "[" . $numNewLines ."A"; // Set cursor up x lines
}
function progressBar($n, $m)
{
    static $maxsize  = 80;
    static $linesize = 0;
    static $even     = 0;
    if (0 == ($linesize % $maxsize))
    {
        $even = 1 - $even;
        $linesize = 0;
        echo chr(27) . "[0G";
        printf('[ %010d / %010d ] ', $n, $m);
    }
    $linesize += 1;
    if ($even == 1) echo '.';
    else echo 'X';
}
class SMETI_db 
{
    static $plugin = 0;
    static $libelle = '';
    static $item = 0;
    static $code = '';
    static $link = 0;
    static $child = 0;
    static $parent = 0;
    static $rank = 0;
    static $pdo;
    static $req0;
    static $req1;
    static $req2;
    static $req3;
    static function init($pdo_cn_string = 'sqlite:../data/base.sqlite')
    {
        try{
            self::$pdo = new PDO($pdo_cn_string);
            self::$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ERRMODE_WARNING | ERRMODE_EXCEPTION | ERRMODE_SILENT
        } catch(Exception $e) {
            echo "Impossible d'accéder à la base de données SQLite : ".$e->getMessage();
            die();
        }
        self::$req0 = self::$pdo->prepare('INSERT INTO plugins(libelle) VALUES(:libelle)');
        self::$req0->bindParam('libelle', self::$libelle, PDO::PARAM_STR);
        self::$req1 = self::$pdo->prepare('INSERT INTO items(plugin, code, libelle) VALUES(:plugin, :code, :libelle)');
        self::$req1->bindParam('plugin', self::$plugin, PDO::PARAM_INT);
        self::$req1->bindParam('code', self::$code, PDO::PARAM_STR);
        self::$req1->bindParam('libelle', self::$libelle, PDO::PARAM_STR);
        self::$req2 = self::$pdo->prepare('INSERT INTO links(link, item) VALUES(:link, :item)');
        self::$req2->bindParam('link', self::$link, PDO::PARAM_INT);
        self::$req2->bindParam('item', self::$item, PDO::PARAM_INT);
        self::$req3 = self::$pdo->prepare('INSERT INTO nodes(child, parent, rank) VALUES(:child, :parent, :rank)');
        self::$req3->bindParam('child', self::$child, PDO::PARAM_INT);
        self::$req3->bindParam('parent', self::$parent, PDO::PARAM_INT);
        self::$req3->bindParam('rank', self::$rank, PDO::PARAM_INT);
    }
    static function removePlugin($plugin_name)
    {
        $select_clause="SELECT id FROM plugins WHERE libelle = '$plugin_name'";
        // Parce que je n'ai pas réussi à faire correctement marcher le DELETE CASCADE !
        self::$pdo->exec("DELETE FROM nodes WHERE parent IN (SELECT DISTINCT id FROM v_items WHERE plugin IN ( $select_clause ))");
        self::$pdo->exec("DELETE FROM nodes WHERE child IN (SELECT DISTINCT id FROM v_items WHERE plugin IN ( $select_clause ))");
        self::$pdo->exec("DELETE FROM links WHERE item IN (SELECT DISTINCT id FROM items WHERE plugin IN ( $select_clause ))");
        self::$pdo->exec("DELETE FROM links WHERE link = 1 AND id IN ( SELECT id FROM v_items_tree WHERE parent IS NULL)");
        self::$pdo->exec("DELETE FROM items WHERE plugin IN ( $select_clause)");
        self::$pdo->exec("DELETE FROM plugins WHERE libelle = '$plugin_name' ");
        // Parce que je n'ai pas réussi à faire correctement marcher le DELETE CASCADE !
        self::$pdo->exec('VACUUM');
    }
    static function addPlugin($plugin_name)
    {
        self::$libelle = $plugin_name;
        self::$req0->execute();
        self::$plugin = self::$pdo->lastInsertId();
    }
    static function setCurPlugin($plugin_name)
    {
        $sql = self::$pdo->prepare("SELECT id FROM plugins WHERE libelle = '$plugin_name'");
        $sql->execute();
        $row = $sql->fetch(PDO::FETCH_NUM);
        self::$plugin = $row[0];
    }
}
?>