forked from legale/rapida
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate_distro.php
111 lines (86 loc) · 2.77 KB
/
create_distro.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
session_start();
if(!isset($_SESSION['admin'])){
exit('Who the hell are you?');
}
define( 'PCLZIP_TEMPORARY_DIR', './' );
require_once('api/Simpla.php');
require_once('simpla/pclzip/pclzip.lib.php');
$simpla = new Simpla();
//корневая директория системы
$dir = dirname(__FILE__) . '/';
//имя создаваемого архива
$filename = $dir.'distro/rapida_'.$simpla->config->version.'.zip';
$dbfile = 'rapida.sql';
//функция для фильтрации того, что нужно архивировать, а что нет
function precheck($p_event, &$p_header){
//это мы точно включаем
$include = array(
'/^design\/default\/.*/i',
'/^simpla\/files\/backup\/empty\.zip/i',
'/^simpla\/files\/import\/example\.csv/i',
'/^simpla\/files\/export$/i',
'/^simpla\/files\/watermark\/watermark\.png/i',
'/\.htaccess$/i',
'/^rapida\.sql$/i',
);
//это точно исключаем
$exclude = array(
'/\/[\.][^\/]*/i', //файлы начинающиеся с точки
'/^[\.].*/i', //каталоги с точки
'/^sandbox\/.*$/i',
'/^tmp\/.*$/i',
'/^tests\/.*$/i',
'/^create_distro\.php$/i',
'/^install\.php$/i',
'/rapida.*?\.zip$/i',
'/^img\/.*/i',
'/^compiled\/.*/i',
'/^simpla\/files\/.*/i',
'/^simpla\/log.txt$/i',
'/^cache\/.*/i',
'/^distro\/.*/i',
'/^design\/.*/i',
'/^simpla\/design\/compiled\/.*/i',
'/^simpla\/files\/.*/i',
'/^config\/db.ini$/i',
);
$fname = $p_header['stored_filename'];
foreach($include as $p){
if(preg_match($p, $fname) ){
return true;
}
}
foreach($exclude as $p){
if(preg_match($p, $fname) ){
return false;
}
}
//если не попало под фильтры, значит включаем в архив
return true;
}
//***************************************************************************************************
//КОД ПРОЦЕССА СОЗДАНИЯ ДИСТРИБУТИВА
//Делаем дамп базы
$simpla->db->dump($dir.$dbfile);
chmod($dir.$dbfile, 0777);
//Архивируем
$zip = new PclZip('rapida_source.zip');
$v_list = $zip->create(array($dir), PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_CB_PRE_ADD, "precheck");
if ($v_list == 0)
{
trigger_error('Не могу заархивировать '.$zip->errorInfo(true));
}
//Архивируем полученный архив README.md и install.php
$zip = new PclZip($filename);
$v_list = $zip->create(array('README.md','install.php','rapida_source.zip'));
if ($v_list == 0)
{
trigger_error('Не могу заархивировать '.$zip->errorInfo(true));
}
//удаляет файл архива для дистрибутива
@unlink('rapida_source.zip');
//удаляет файл БД
//~ @unlink($dir.$dbfile);
//Finish
print "\n DONE!";