<?php class ksiazki_cache { static $cache = array(); static function cache_get($kod) { $kod = (int)$kod; if(!isset(self::$cache[(int)$kod])) { self::cache_update($kod); } return self::$cache[(int)$kod]; } static function cache_add($kod, &$dane) { self::$cache[(int)$kod] = $dane; } static function cache_addarray(&$dane) { foreach($dane as &$r) { self::cache_add($r['id'], $r); } } static function cache_clear($id=NULL) { if(is_null($id)) { self::$cache = array(); } else { unset(self::$cache[(int)$id]); } } static function cache_update($kod) { $dane = db2::escape_data(sql::fetchone(sql::query('SELECT `ksiazki`.*, `pozycz`.`od`, `pozycz`.`kto` FROM `ksiazki` LEFT OUTER JOIN `pozycz` ON `pozycz`.`id`=`ksiazki`.`id` WHERE `ksiazki`.`id`='.sql::escape($kod)))); self::cache_add($kod, $dane); } } class ksiazki extends ksiazki_cache { static function okladka($KOD, $ISBN) { return okladki::znajdz($KOD, $ISBN, 'covers'); } static function okladka_big($KOD, $ISBN) { return okladki::znajdz($KOD, $ISBN, 'covers_big'); } static function dodaj(&$dane) { validate::KOD($dane['id'], FALSE); if($dane['ISBN']) { $t = validate::type($dane['ISBN']); if($t!='ISBN') { errorclass::add('W polu ISBN znajduje się '.$t); } } if($dane['ISSN']) { $t = validate::type($dane['ISSN']); if($t!='ISSN') { errorclass::add('W polu ISSN znajduje się '.$t); } } if($dane['jezyk']=='pol') { $dane['jezyk'] = 'polski'; } unset($_POST['okladka']); okladki::upload($_FILES['okladka'], $dane['id'], $dane['ISBN']); db2::add('ksiazki', $dane); self::cache_update($dane['id']); } static function exists($kod) { $info = self::cache_get($kod); if(isset($info['id'])) { return TRUE; } else { return FALSE; } } static function edytuj(&$dane) { validate::KOD($dane['id']); $kod = $dane['id']; $old = self::szukaj_KOD($kod); if($dane['id']=='' OR empty($dane['autor']) OR empty($dane['tytul']) OR empty($dane['jezyk'])) { errorclass::add('Brak wymaganych danych o książce (kod, autor, tytuł, język)'); } if($dane['nid']!='') { validate::KOD($dane['nid']); $dane['id'] = $dane['nid']; } unset($dane['nid']); if($dane['ISBN']) { $t = validate::type($dane['ISBN']); if($t!='ISBN') { errorclass::add('W polu ISBN znajduje się '.$t); } } if($dane['ISSN']) { $t = validate::type($dane['ISSN']); if($t!='ISSN') { errorclass::add('W polu ISSN znajduje się '.$t); } } if(!$dane['wycofana']) { $dane['wycofana'] = 0; $dane['powod'] = NULL; } okladki::przenies($old['id'], $old['ISBN'], $dane['id'], $dane['ISBN']); unset($_POST['okladka']); // Nowa okładka if(isset($_POST['okladka_del']) || (isset($_FILES['okladka']) && is_uploaded_file($_FILES['okladka']['tmp_name']))) { okladki::usun($dane['id'], $dane['ISBN']); unset($_POST['okladka_del']); } okladki::upload($_FILES['okladka'], $dane['id'], $dane['ISBN']); db2::edit('ksiazki', $dane, array('id' => $kod)); self::cache_update($kod); if($dane['id']!=$kod) { self::cache_update($dane['id']); } } static function miejsce($regal, $polka, $rzad, $where) { db2::edit('ksiazki', array('regal' => strtoupper($regal), 'polka' => $polka, 'rzad' => $rzad), $where); self::cache_clear(); } static function usun(&$kod) { validate::KOD($kod); $dane = self::szukaj_KOD($kod); okladki::usun($dane['id'], $dane['ISBN']); db2::del('ksiazki', array('id' => $kod)); self::cache_clear($kod); } static function szukaj_KOD($kod) { validate::KOD($kod, TRUE); return self::cache_get($kod); } static function szukaj_ISBN($ISBN) { validate::EAN($ISBN); return db2::get('ksiazki', '*', array('ISBN' => $ISBN), NULL, 10); } static function szukaj_ISSN($ISSN) { validate::EAN($ISSN); return db2::get('ksiazki', '*', array('ISSN' => $ISSN), NULL, 10); } static function szukaj_info($dane, $order=NULL, $start=NULL, $limit=30) { $allow = array('id', 'tytul', 'autor', 'wydawnictwo', 'miejsce', 'rok', 'wydanie', 'wycofana'); $replace = array('tytul' => 'tytul~~', 'autor' => 'autor~~', 'wydawnictwo' => 'wydawnictwo~~'); $where = array(); foreach($dane as $key => $value) { if(!in_array($key, $allow) OR $value==='') { continue; } if($replace[$key]) { $key = $replace[$key]; } $where[$key] = $value; } if($where['id']) { validate::$kod = TRUE; switch(validate::type($where['id'])) { case 'ISBN': $where['ISBN'] = $where['id']; unset($where['id']); break; case 'ISSN': $where['ISSN'] = $where['id']; unset($where['id']); break; case 'MSC': $where['regal'] = $where['id']; if($dane['polka']) { $where['polka'] = $dane['polka']; } if($dane['rzad']) { $where['rzad'] = $dane['rzad']; } unset($where['id']); break; } validate::$kod = FALSE; } if(!$where['regal']) { unset($where['polka']); unset($where['rzad']); } if($where['id']) { $ret[] = self::szukaj_KOD($where['id']); $num = count($ret); } else { if($dane['do']) { $num = db2::num('pozycz', 'id'); if($num == 0) { $ret = array(); } else { $ret = db2::get(array('pozycz', array('J', 'ksiazki', 'USING', 'id')), '*', NULL, $order, $start, $limit); } } else { $num = db2::num('ksiazki', 'id', $where); if($num == 0) { $ret = array(); } else { $where = db2::__combine_where($where, TRUE); $ret = db2::escape_data(sql::fetch(sql::query('SELECT `ksiazki`.*, `pozycz`.`od`, `pozycz`.`kto`'.(db2::revelance() ? ', '.db2::$revelance : '').' FROM `ksiazki` LEFT OUTER JOIN `pozycz` ON `pozycz`.`id`=`ksiazki`.`id` '.$where.db2::__combine_order($order, TRUE).db2::__combine_limit($start, $limit)))); } } self::cache_addarray($ret); } return array($num, $ret, db2::revelance()); } } ?>