<?php 
 
class LumiDB 
{ 
    private static $dbPath=''; 
 
    private static $currentDBName=''; 
 
    private static $currentTableName=''; 
 
    private static $dbData=array(); 
 
    private static $tableData=array(); 
 
    public static $error='no'; 
 
    public static $message=''; 
 
    public static function __construct() 
    { 
        $path=CACHES_PATH.'lumidb/'; 
 
        if(!is_dir($path)) 
        { 
            Dir::create($path); 
        } 
 
        self::$dbPath=$path; 
         
    } 
 
    // LumiDB::setPath(''); 
    public static function setPath($newPath='') 
    { 
        self::$dbPath=$newPath; 
    } 
 
    public static function getPath() 
    { 
        return self::$dbPath; 
    } 
 
    public static function getMessage() 
    { 
        return self::$message; 
    } 
 
    public static function setMessage($str='') 
    { 
        self::$error='yes'; 
 
        self::$message=$str; 
    } 
 
    public static function getError() 
    { 
        return self::$error; 
    } 
 
    public static function connectDB($dbName='') 
    { 
        $dbPath=self::$dbPath.'database/'; 
 
        $filePath=$dbPath.$dbName.'.db'; 
 
        if(!file_exists($filePath)) 
        { 
            self::setMessage('Database '.$dbName.' not exists.'); 
            return false; 
        } 
 
        $loadData=file_get_contents($filePath); 
 
        if(isset($loadData[5])) 
        self::$dbData=unserialize($loadData); 
    } 
 
 
    public static function createDB($inputData='') 
    { 
        try { 
            self::createDBProcess($inputData); 
        } catch (Exception $e) { 
            throw new Exception($e->getMessage()); 
        } 
 
        return true; 
    } 
 
    public static function createDBProcess($dbName='') 
    { 
        $dbPath=self::$dbPath.'database/'; 
 
        // $filePath=$dbPath.$dbName; 
 
        // Cache::setPath($dbPath); 
 
        // Cache::saveKey($dbName,''); 
 
        // Cache::resetPath(); 
 
        File::create($dbPath.$dbName.'.db',''); 
    } 
 
    public static function getTables() 
    { 
        if(!isset(self::$currentDBName[1])) 
        { 
            self::setMessage('You must connect to database before get list table.'); 
            return false; 
        } 
 
        return self::$dbData['tables']; 
    } 
 
    public static function createTable($tableName='',$inputData=array()) 
    { 
        /* 
        $inputData=array( 
            'field_name'=>array( 
                'type'=>'int', 
                'length'=>10, 
                'autoincrease'=>true, 
                'null'=>false, 
                'default'=>false 
                ), 
 
            'title'=>array( 
                'type'=>'string', 
                'length'=>255, 
                'autoincrease'=>false, 
                'null'=>true, 
                'default'=>'pending' 
                ) 
            );     
     
        */ 
 
        if(!isset($currentDBName[1])) 
        { 
            self::setMessage('You must connect to database before create table.'); 
 
            return false; 
        } 
 
        if(!isset($tableName[1])) 
        { 
            self::setMessage('Table name not valid.'); 
 
            return false; 
        } 
 
        $totalKeys=count($inputData); 
 
        if($totalKeys==0) 
        { 
            self::setMessage('Data to create table not valid.'); 
 
            return false; 
        } 
 
        $listKeys=array_keys($inputData); 
 
        for ($i=0; $i < $totalKeys; $i++) {  
 
            $fieldName=$listKeys[$i]; 
 
            try { 
                $fieldData=self::autoSetFieldOption($fieldName,$inputData[$fieldName]); 
            } catch (Exception $e) { 
                // throw new Exception($e->getMessage()); 
                self::setMessage($e->getMessage()); 
                return false; 
            } 
        } 
 
 
        $tableData=array( 
            'name'=>$tableName, 
            'fields'=>implode(', ', $listKeys), 
            'totalfield'=>$totalKeys, 
            'totalrow'=>0 
            'fieldsData'=>$inputData 
            ); 
 
        $tableData=serialize($tableData); 
 
        $dbPath=self::$dbPath.'tables/'; 
 
        $filePath=self::$currentDBName.'_'.$tableName; 
 
        // Cache::setPath($dbPath); 
 
        // Cache::saveKey($filePath,''); 
 
        // Cache::resetPath();     
 
        File::create($filePath.'.table',$tableData); 
 
        updateDatabase(array( 
            'type'=>'addTable', 
            'tableName'=>$tableName 
            ));     
 
    } 
 
    public static function autoSetFieldOption($fieldName,$inputData=array()) 
    { 
        if(!isset($inputData['type'])) 
        { 
            throw new Exception($fieldName.' not have data type.'); 
        } 
         
        if(!isset($inputData['length'])) 
        { 
            throw new Exception($fieldName.' not have length.'); 
        } 
 
        $inputData['autoincrease']=isset($inputData['autoincrease'])?$inputData['autoincrease']:false; 
 
        $inputData['null']=isset($inputData['null'])?$inputData['null']:false; 
 
        $inputData['default']=isset($inputData['default'])?$inputData['default']:false; 
 
    } 
 
    public static function updateDatabase($inputData=array()) 
    { 
        $dbName=self::$currentDBName; 
 
        $type=$inputData['type']; 
 
        $tableName=$inputData['tableName']; 
 
        $path=self::$dbPath.'database/'; 
 
        $dbPath=$path.$dbName.'.db'; 
 
        if(!file_exists($dbPath)) 
        { 
            self::setMessage('Database '.$dbName.' not exists.'); 
            return false; 
        } 
 
        $dbData=file_get_contents($dbPath); 
 
        if(!isset($dbData[5])) 
        { 
            $dbData=array(); 
        } 
        else 
        { 
            $dbData=unserialize($dbData); 
        } 
 
        switch ($type) { 
            case 'addTable': 
                 
                $dbData['tables']=isset($dbData['tables'])?$dbData['tables'].$tableName.', ':$tableName; 
 
                $parse=explode(',', $dbData['tables']); 
 
                $total=count($parse); 
 
                $dbData['totaltables']=$total; 
 
                break; 
        } 
 
        $dbData=serialize($dbData); 
 
        File::create($dbPath,$dbData); 
 
    } 
 
 
} 
 
?>
 
 |