first commit. dokuwiki.
[h2N7SspZmY.git] / lib / plugins / indexmenu / inc / repo.class.php
blob04dc75675487ac3a4eb4012aadd353ef49862f8d
1 <?php
2 class repo_indexmenu_plugin {
3 /**
4 * Send a zipped theme
6 * @author Samuele Tognini <samuele@netsons.org>
7 */
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;
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;
48 @fclose($fp);
49 return true;