Jacek Kowalski
2012-06-23 175a52e78df3f3462927885ce6d732cb1b36a818
commit | author | age
175a52 1 <?php
JK 2 class ksiazki_cache {
3     static $cache = array();
4     
5     static function cache_get($kod) {
6         $kod = (int)$kod;
7         
8         if(!isset(self::$cache[(int)$kod])) {
9             self::cache_update($kod);
10         }
11         
12         return self::$cache[(int)$kod];
13     }
14     
15     static function cache_add($kod, &$dane) {
16         if($dane['od2']) {
17             $dane['od'] = $dane['od2'];
18             unset($dane['od2']);
19         }
20         self::$cache[(int)$kod] = $dane;
21     }
22     
23     static function cache_addarray(&$dane) {
24         foreach($dane as &$r) {
25             self::cache_add($r['id'], $r);
26         }
27     }
28     
29     static function cache_clear($id=NULL) {
30         if(is_null($id)) {
31             self::$cache = array();
32         }
33         else
34         {
35             unset(self::$cache[(int)$id]);
36         }
37     }
38     
39     static function cache_update($kod) {
40         $dane = db2::escape_data(sql::fetchone(sql::query('SELECT *, (SELECT MAX(`od`) FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id`) as `od2`, (SELECT `do` FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id` AND `od`=`od2`) as `do`, (SELECT `kto` FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id` AND `od`=`od2`) as `kto` FROM `ksiazki` WHERE `id`=\''.sql::escape($kod).'\'')));
41         self::cache_add($kod, $dane);
42     }
43 }
44
45 class ksiazki extends ksiazki_cache {
46     static $LT_API = '';
47     
48     static function okladka($KOD, $ISBN) {
49         return okladki::znajdz($KOD, $ISBN, 'covers');
50     }
51     
52     static function okladka_big($KOD, $ISBN) {
53         return okladki::znajdz($KOD, $ISBN, 'covers_big');
54     }
55     
56     static function dodaj(&$dane) {
57         validate::KOD($dane['id'], FALSE);
58         
59         if($dane['ISBN']) {
60             $t = validate::type($dane['ISBN']);
61             if($t!='ISBN') {
62                 error::add('W polu ISBN znajduje się '.$t);
63             }
64         }
65         if($dane['ISSN']) {
66             $t = validate::type($dane['ISSN']);
67             if($t!='ISSN') {
68                 error::add('W polu ISSN znajduje się '.$t);
69             }
70         }
71         
72         if($dane['jezyk']=='pol') {
73             $dane['jezyk'] = 'polski';
74         }
75         
76         unset($_POST['okladka']);
77         
78         okladki::upload($_FILES['okladka'], $dane['id'], $dane['ISBN']);
79         
80         db2::add('ksiazki', $dane);
81         self::cache_update($dane['id']);
82     }
83     
84     static function exists($kod) {
85         $info = self::cache_get($kod);
86         if(isset($info['id'])) {
87             return TRUE;
88         }
89         else
90         {
91             return FALSE;
92         }
93     }
94     
95     static function edytuj(&$dane) {
96         validate::KOD($dane['id']);
97         $kod = $dane['id'];
98         
99         $old = self::szukaj_KOD($kod);
100         
101         if($dane['id']=='' OR empty($dane['autor']) OR empty($dane['tytul']) OR empty($dane['jezyk'])) {
102             error::add('Brak wymaganych danych o książce (kod, autor, tytuł, język)');
103         }
104         
105         if($dane['nid']!='') {
106             validate::KOD($dane['nid']);
107             $dane['id'] = $dane['nid'];
108         }
109         
110         unset($dane['nid']);
111         
112         if($dane['ISBN']) {
113             $t = validate::type($dane['ISBN']);
114             if($t!='ISBN') {
115                 error::add('W polu ISBN znajduje się '.$t);
116             }
117         }
118         if($dane['ISSN']) {
119             $t = validate::type($dane['ISSN']);
120             if($t!='ISSN') {
121                 error::add('W polu ISSN znajduje się '.$t);
122             }
123         }
124         
125         if(!$dane['wycofana']) {
126             $dane['wycofana'] = 0;
127             $dane['powod'] = NULL;
128         }
129         
130         okladki::przenies($old['id'], $old['ISBN'], $dane['id'], $dane['ISBN']);
131         
132         unset($_POST['okladka']);
133         
134         // Nowa okładka
135         if(isset($_POST['okladka_del']) || (isset($_FILES['okladka']) && is_uploaded_file($_FILES['okladka']['tmp_name']))) {
136             okladki::usun($dane['id'], $dane['ISBN']);
137             unset($_POST['okladka_del']);
138         }
139         
140         okladki::upload($_FILES['okladka'], $dane['id'], $dane['ISBN']);
141         
142         db2::edit('ksiazki', $dane, array('id' => $kod));
143         self::cache_update($kod);
144         if($dane['id']!=$kod) {
145             self::cache_update($dane['id']);
146         }
147     }
148     
149     static function miejsce($regal, $polka, $rzad, $where) {
150         db2::edit('ksiazki', array('regal' => strtoupper($regal), 'polka' => $polka, 'rzad' => $rzad), $where);
151         self::cache_clear();
152     }
153     
154     static function usun(&$kod) {
155         validate::KOD($kod);
156         
157         $dane = self::szukaj_KOD($kod);
158         
159         okladki::usun($dane['id'], $dane['ISBN']);
160         
161         db2::del('ksiazki', array('id' => $kod));
162         self::cache_clear($kod);
163     }
164     
165     static function szukaj_KOD($kod) {
166         validate::KOD($kod, TRUE);
167         
168         return self::cache_get($kod);
169     }
170     
171     static function szukaj_ISBN($ISBN) {
172         validate::EAN($ISBN);
173         
174         return db2::get('ksiazki', '*', array('ISBN' => $ISBN), NULL, 10);
175     }
176     
177     static function szukaj_ISSN($ISSN) {
178         validate::EAN($ISSN);
179         
180         return db2::get('ksiazki', '*', array('ISSN' => $ISSN), NULL, 10);
181     }
182     
183     static function szukaj_info($dane, $order=NULL, $start=NULL, $limit=30) {
184         $allow = array('id', 'tytul', 'autor', 'wydawnictwo', 'miejsce', 'rok', 'wydanie', 'wycofana');
185         $replace = array('tytul' => 'tytul~~', 'autor' => 'autor~~', 'wydawnictwo' => 'wydawnictwo~~');
186         
187         $where = array();
188         
189         foreach($dane as $key => $value) {
190             if(!in_array($key, $allow) OR $value==='') {
191                 continue;
192             }
193             
194             if($replace[$key]) {
195                 $key = $replace[$key];
196             }
197             
198             $where[$key] = $value;
199         }
200         
201         if($where['id']) {
202             validate::$kod = TRUE;
203             switch(validate::type($where['id'])) {
204                 case 'ISBN':
205                     $where['ISBN'] = $where['id'];
206                     unset($where['id']);
207                 break;
208                 case 'ISSN':
209                     $where['ISSN'] = $where['id'];
210                     unset($where['id']);
211                 break;
212                 case 'MSC':
213                     $where['regal'] = $where['id'];
214                     if($dane['polka']) {
215                         $where['polka'] = $dane['polka'];
216                     }
217                     if($dane['rzad']) {
218                         $where['rzad'] = $dane['rzad'];
219                     }
220                     unset($where['id']);
221                 break;
222             }
223             validate::$kod = FALSE;
224         }
225         
226         if(!$where['regal']) {
227             unset($where['polka']);
228             unset($where['rzad']);
229         }
230         
231         if($where['id']) {
232             $ret[] = self::szukaj_KOD($where['id']);
233             $num = count($ret);
234         }
235         else
236         {
237             if($dane['do']) {
238                 $num = db2::num('pozycz', 'id', array('do' => NULL));
239                 if($num==0) {
240                     $ret = array();
241                 }
242                 else
243                 {
244                     $ret = db2::get(array('pozycz', array('J', 'ksiazki', 'USING', 'id')), '*', array('do' => NULL), $order, $start, $limit);
245                 }
246             }
247             else
248             {
249                 $num = db2::num('ksiazki', 'id', $where);
250                 if($num==0) {
251                     $ret = array();
252                 }
253                 else
254                 {
255                     $where = db2::__combine_where($where, TRUE);
256                     $ret = db2::escape_data(sql::fetch(sql::query('SELECT *, (SELECT MAX(`od`) FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id`) as `od2`, (SELECT `do` FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id` AND `od`=`od2`) as `do`, (SELECT `kto` FROM `pozycz` WHERE `pozycz`.`id`=`ksiazki`.`id` AND `od`=`od2`) as `kto`'.(db2::revelance() ? ', '.db2::$revelance : '').' FROM `ksiazki`'.$where.db2::__combine_order($order, TRUE).db2::__combine_limit($start, $limit))));
257                 }
258             }
259             
260             self::cache_addarray($ret);
261         }
262         
263         return array($num, $ret, db2::revelance());
264     }
265 }
266 ?>