dokuwiki-indexmenu-plugin – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | <?php |
2 | class repo_indexmenu_plugin { |
||
3 | /** |
||
4 | * Send a zipped theme |
||
5 | * |
||
6 | * @author Samuele Tognini <samuele@samuele.netsons.org> |
||
7 | */ |
||
8 | |||
9 | function send_theme($file) { |
||
10 | require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php'); |
||
11 | $idxm = new syntax_plugin_indexmenu_indexmenu(); |
||
12 | //clean the file name |
||
13 | $file = cleanID($file); |
||
14 | //check config |
||
15 | if(!$idxm->getConf('be_repo') || empty($file)) return false; |
||
16 | $repodir = INDEXMENU_IMG_ABSDIR."/repository"; |
||
17 | $zipfile = $repodir."/$file.zip"; |
||
18 | $localtheme = INDEXMENU_IMG_ABSDIR."/$file/"; |
||
19 | //theme does not exists |
||
20 | if(!file_exists($localtheme)) return false; |
||
21 | if(!io_mkdir_p($repodir)) return false; |
||
22 | $lm = @filemtime($zipfile); |
||
23 | //no cached zip or older than 1 day |
||
24 | if($lm < time() - (60 * 60 * 24)) { |
||
25 | //create the zip |
||
26 | require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php"); |
||
27 | @unlink($zipfile); |
||
28 | $zip = new PclZip($zipfile); |
||
29 | $status = $zip->add($localtheme, PCLZIP_OPT_REMOVE_ALL_PATH); |
||
30 | //error |
||
31 | if($status == 0) return false; |
||
32 | } |
||
33 | $len = (int) filesize($zipfile); |
||
34 | //don't send large zips |
||
35 | if($len > 2 * 1024 * 1024) return false; |
||
36 | //headers |
||
37 | header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0'); |
||
38 | header('Pragma: public'); |
||
39 | header('Content-Type: application/zip'); |
||
40 | header('Content-Disposition: attachment; filename="'.basename($zipfile).'";'); |
||
41 | header("Content-Transfer-Encoding: binary"); |
||
42 | //send zip |
||
43 | $fp = @fopen($zipfile, 'rb'); |
||
44 | if($fp) { |
||
45 | $ct = @fread($fp, $len); |
||
46 | print $ct; |
||
47 | } |
||
48 | @fclose($fp); |
||
49 | return true; |
||
50 | } |
||
51 | } |