| | |
| | | |
| | | /** |
| | | * Nazwa modułu, którego zmienne klasa przetwarza |
| | | * @var string max. 40 znaków |
| | | * @var string max. 40 znaków |
| | | */ |
| | | var $class; |
| | | protected $class = ''; |
| | | protected $class_empty = TRUE; |
| | | |
| | | private $user; |
| | | |
| | | |
| | | /** |
| | | * Inicjuje klasę w zależności od użytkownika |
| | |
| | | $this->user = sha1($user); |
| | | $this->user_struct = parse_url($user); |
| | | |
| | | $this->class = ''; |
| | | $this->class_empty = FALSE; |
| | | } |
| | | |
| | | private function init() { |
| | | if(strlen($this->class) == 0 && !$this->class_empty) { |
| | | throw new Exception('Przed użyciem $msg->session należy ustawić nazwę modułu za pomocą metody setClass - patrz "Poradnik tworzenia modułów", dział "Klasa BotMessage", rozdział "Pole $session".'); |
| | | } |
| | | |
| | | if($this->PDO) { |
| | | return NULL; |
| | | } |
| | |
| | | $this->PDO = new PDO('sqlite:'.BOT_TOPDIR.'/database/'.sha1($this->user).'.sqlite'); |
| | | $this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
| | | $this->PDO->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); |
| | | |
| | | $st = $this->PDO->query('SELECT value FROM data WHERE class=\'\' AND name=\'_version\''); |
| | | if($st->rowCount > 0) { |
| | | $row = $st->fetch(PDO::FETCH_ASSOC); |
| | | $version = (int)$row['value']; |
| | | } |
| | | else |
| | | { |
| | | $version = 0; |
| | | } |
| | | $st->closeCursor(); |
| | | |
| | | if($version < 1) { |
| | | $this->PDO->query('UPDATE data SET class=\'kino\' WHERE class=\'\' AND name=\'kino\''); |
| | | $this->PDO->query('INSERT OR REPLACE INTO data (class, name, value) VALUES (\'\', \'_version\', 1)'); |
| | | $version = 1; |
| | | } |
| | | |
| | | if($version < 2) { |
| | | $this->PDO->query('DELETE FROM data WHERE class=NULL AND name=\'user_struct\''); |
| | | $this->PDO->query('INSERT OR REPLACE INTO data (class, name, value) VALUES (\'\', \'_version\', 2)'); |
| | | $version = 2; |
| | | } |
| | | |
| | | return; |
| | | } |
| | | |
| | |
| | | ); |
| | | |
| | | $files = glob(BOT_TOPDIR.'/db/*/'.$this->user_struct['user'].'.ggdb'); |
| | | if(!$files) { |
| | | return; |
| | | } |
| | | |
| | | $this->PDO->beginTransaction(); |
| | | $st = $this->PDO->prepare('INSERT OR REPLACE INTO data (class, name, value) VALUES (?, ?, ?)'); |
| | | |
| | | $st->execute(array('', '_version', 2)); |
| | | |
| | | foreach($files as $file) { |
| | | $data = unserialize(file_get_contents($file)); |
| | |
| | | } |
| | | } |
| | | catch(Exception $e) { |
| | | @unlink(BOT_TOPDIR.'/database/'.sha1($this->user).'.sqlite'); |
| | | if(file_exists(BOT_TOPDIR.'/database/'.sha1($this->user).'.sqlite')) { |
| | | @unlink(BOT_TOPDIR.'/database/'.sha1($this->user).'.sqlite'); |
| | | } |
| | | throw $e; |
| | | } |
| | | } |
| | |
| | | return $return; |
| | | } |
| | | |
| | | function setClass($class) { |
| | | $this->class = $class; |
| | | } |
| | | |
| | | function truncate() { |
| | | $this->init(); |
| | | |