<?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());
	}
}
?>