Просмотр файла admin/about/update.php

Размер файла: 10.04Kb
  1. <?php
  2. include '../../engine/includes/start.php';
  3. if (!$creator)
  4. Core::stop();
  5.  
  6. $set['title'] = 'Обновление';
  7. include incDir.'head.php';
  8.  
  9. function pre_update($file)
  10. {
  11. Core::get('zip');
  12. $zip = new Pclzip($file);
  13. $_SESSION['update_file'] = $file;
  14. $_SESSION['update_with_ftp'] = isset($_POST['ftp']);
  15.  
  16. echo '<div class="post">Будут заменены следующие файлы:<br />';
  17. foreach ($zip->listContent() as $file)
  18. {
  19. if ($file['folder'])
  20. continue;
  21.  
  22. echo $file['stored_filename'] .' ('.round($file['size'] / 1024, 2).' kb)<br />';
  23. }
  24. echo '</div><a class="link" href="?">Применить обновление</a>';
  25. }
  26.  
  27. function ftp_update($file)
  28. {
  29. Core::get('zip');
  30. $zip = new Pclzip($file);
  31. $contents = $zip->listContent();
  32.  
  33. if ($contents == 0)
  34. $error = 'Архив поврежден или пуст';
  35. else
  36. {
  37. $config = $zip->extract(PCLZIP_OPT_BY_NAME, 'update.ini', PCLZIP_OPT_EXTRACT_AS_STRING);//, PCLZIP_CB_POST_EXTRACT, 'get_ini');
  38. file_put_contents(tmpDir . 'update.ini', $config[0]['content']);
  39. $config = parse_ini_file(tmpDir . 'update.ini', true);
  40. if (empty($config))
  41. $error = 'update.ini не найден';
  42. else
  43. {
  44. if (empty($config['version']) || version_compare($config['version'], Core::Secwind('version'), '<='))
  45. $error = 'Невозможно установить обновление до версии '. $config['version'] .', когда уже установлена версия '. Core::Secwind('version');
  46. }
  47. }
  48.  
  49. if (!isset($error))
  50. {
  51. @set_time_limit(60);
  52. $zip->delete(PCLZIP_OPT_BY_NAME, 'upload.ini');
  53. //$zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, H);
  54. Core::get('ftp');
  55. $ftp_data = parse_ini_file(H . 'engine/files/data/modules.ini');
  56. $ftp = new ftp;
  57. if (!$ftp->connect($ftp_data['ftp_host'], $ftp_data['ftp_user'], $ftp_data['ftp_pass']))
  58. {
  59. echo "conntecting failed: ";
  60. print_r($ftp->error_no);
  61. print_r($ftp->error_msg);
  62. }
  63. else{
  64. $upd_dir = tmpDir . 'update_to_'.$config['version'] . '/';
  65. mkdir($upd_dir, 0777);
  66. $zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, $upd_dir);
  67. foreach($zip->listContent() as $file)
  68. {
  69. if ($file['folder'])
  70. {
  71. if (!is_dir(H . $file['filename']))
  72. {
  73. mkdir(H . $file['filename'], 0777);
  74. }
  75. }
  76. else
  77. {
  78. //$fil = $zip->extract(PCLZIP_OPT_BY_NAME, $file['filename'], PCLZIP_OPT_EXTRACT_AS_STRING);
  79. $ftp->put($file['filename'], $upd_dir . $file['filename']); //, $fil[0]['content']))
  80. unlink($upd_dir . $file['filename']);
  81. }
  82. }
  83. //file_put_contents('text.txt', serialize($ftp->lastLines));
  84.  
  85. if (!empty($config['sql']))
  86. {
  87. Global $sql;
  88. $sql->from_file(H . $config['sql']);
  89. $sql->free(true);
  90. Core::msg_show('Сделаны запросы из файла ' .$config['sql'], 'menu_razd');
  91. @unlink(H . $config['sql']);
  92. }
  93.  
  94. if (!empty($config['chmod']))
  95. {
  96. $dirs = explode(' ', $config['chmod']);
  97. foreach($dirs as $dir)
  98. {
  99. chmod(H . $dir, 0777);
  100. }
  101. Core::msg_show('Выставлены права доступа 777 на необходимые папки', 'menu_razd');
  102. }
  103.  
  104. Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
  105. $data = unserialize(file_get_contents(H . 'engine/files/data/secwind.db'));
  106. $data['version'] = $config['version'];
  107. if (!empty($config['secwind']))
  108. {
  109. $data = array_merge($data, $config['secwind']);
  110. }
  111. //file_put_contents(H . 'engine/files/data/secwind.db', serialize($data));
  112. }
  113. }
  114. unset($zip, $config, $headers);
  115. if (isset($error))
  116. Core::msg_show($error);
  117. }
  118. function update($file)
  119. {
  120. Core::get('zip');
  121. $zip = new Pclzip($file);
  122. $contents = $zip->listContent();
  123.  
  124. if ($contents == 0)
  125. $error = 'Архив поврежден или пуст';
  126. else
  127. {
  128. $config = $zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, 'update.ini', PCLZIP_OPT_EXTRACT_AS_STRING);//, PCLZIP_CB_POST_EXTRACT, 'get_ini');
  129. file_put_contents(tmpDir . 'update.ini', $config[0]['content']);
  130. $config = parse_ini_file(tmpDir . 'update.ini', true);
  131. if (empty($config))
  132. $error = 'update.ini не найден';
  133. else
  134. {
  135. if (empty($config['version']) || version_compare($config['version'], Core::Secwind('version'), '<='))
  136. $error = 'Невозможно установить обновление до версии '. $config['version'] .', когда уже установлена версия '. Core::Secwind('version');
  137. }
  138. }
  139.  
  140. if (file_exists(tmpDir . 'update.upd'))
  141. unlink(tmpDir . 'update.upd');
  142.  
  143. if (!isset($error))
  144. {
  145. $zip->delete(PCLZIP_OPT_BY_NAME, 'upload.ini');
  146. $zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, H);
  147.  
  148. if (!empty($config['sql']))
  149. {
  150. Global $sql;
  151. $sql->from_file(H . $config['sql']);
  152. $sql->free(true);
  153. Core::msg_show('Сделаны запросы из файла ' .$config['sql'], 'menu_razd');
  154. @unlink(H . $config['sql']);
  155. }
  156.  
  157. if (!empty($config['chmod']))
  158. {
  159. $dirs = explode(' ', $config['chmod']);
  160. foreach($dirs as $dir)
  161. {
  162. chmod(H . $dir, 0777);
  163. }
  164. Core::msg_show('Выставлены права доступа 777 на необходимые папки', 'menu_razd');
  165. }
  166.  
  167. Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
  168. $data = unserialize(file_get_contents(H . 'engine/files/data/secwind.db'));
  169. $data['version'] = $config['version'];
  170. if (!empty($config['secwind']))
  171. {
  172. $data = array_merge($data, $config['secwind']);
  173. }
  174. file_put_contents(H . 'engine/files/data/secwind.db', serialize($data));
  175. }
  176.  
  177. unset($zip, $config, $headers);
  178. if (isset($error))
  179. Core::msg_show($error);
  180. }
  181.  
  182. function get_ini($event, &$file)
  183. {
  184. Return Rename($file['filename'], tmpDir . 'update.upd');
  185. }
  186.  
  187. switch($act)
  188. {
  189. default:
  190. if (
  191. isset($_SESSION['update_file']) &&
  192. (
  193. is_uploaded_file($_SESSION['update_file']) ||
  194. is_file($_SESSION['update_file'])
  195. ))
  196. {
  197. if ($_SESSION['update_with_ftp'])
  198. {
  199. ftp_update($_SESSION['update_file']);
  200. }
  201. else
  202. {
  203. update($_SESSION['update_file']);
  204. }
  205. unset($_SESSION['update_file'], $_SESSION['update_with_ftp']);
  206. }
  207. echo '<div class="link">Ваша версия: '.Core::SecWind('version').'<br />';
  208. $last_version = @json_decode(file_get_contents('http://secwind.ru/?act=get_last_version'), true);
  209.  
  210. if (empty($last_version) || (function_exists('json_last_error') && json_last_error()))
  211. {
  212. echo '</div>';
  213. Core::msg_show('Невозможно проверить на обновление');
  214. }
  215. else
  216. {
  217. echo (version_compare($last_version['last_version'], Core::SecWind('version'), '=') ? 'У вас установлена последняя версия' : 'Последняя: <a href="'.$last_version['link_update'].'">'.$last_version['last_version'] . ' ' .$last_version['status'].'</a>') . '<br />
  218. Дата выхода: '.Core::time($last_version['time_release']) . '<br />
  219. Список изменений в версии '.$last_version['last_version'] .': <br /> '.nl2br($last_version['changelog']).'</div>';
  220. }
  221. ?>
  222. <form class="link" method = "post" action="?act=import">
  223. Ссылка к zip архиву:<br />
  224. <input type="text" name="url" value="http://"/><br />
  225. <label><input type="checkbox" name="ftp"/>Установка по <a href="/admin/modules/settings.php">ftp</a> (beta)</label><br />
  226. <input value = "Импорт" type="submit" />
  227. </form>
  228. <form class="link" method="post" enctype="multipart/form-data" action="?act=upload">
  229. Выберите архив. Расширение файла должен быть "<b>zip</b>" и присутствовать файл "<b>update.ini</b>"<br/>
  230. <input type="file" name="file"/><br />
  231. <label><input type="checkbox" name="ftp"/>Установка по <a href="/admin/modules/settings.php">ftp</a> (beta)</label><br />
  232. <input value = "Загрузить" name="save" type="submit" />
  233. </form>
  234. <?php
  235. break;
  236. case 'import':
  237. if (!empty($_POST['url']))
  238. {
  239. $headers = @get_headers($_POST['url'], 1);
  240.  
  241. if (!$headers)
  242. $error = 'Не удалось получить заголовки по указанному адресу';
  243.  
  244. elseif ($headers['Content-Type'] != 'application/zip')
  245. $error = 'Только zip архивы';
  246. else
  247. {
  248. @set_time_limit(20);
  249.  
  250. $up_file = pathinfo($_POST['url'], PATHINFO_FILENAME);
  251.  
  252. file_put_contents(tmpDir . $up_file, file_get_contents($_POST['url']));
  253. pre_update(tmpDir . $up_file);
  254. }
  255. }
  256. break;
  257.  
  258. case 'upload':
  259.  
  260. if (!empty($_FILES['file']['name']))
  261. {
  262. $pathinfo = pathinfo($_FILES['file']['name']);
  263. if ($pathinfo['extension'] != 'zip')
  264. $error = 'Только zip архивы';
  265. else
  266. {
  267. $up_file = tmpDir . 'update_'.time().'.zip';
  268. move_uploaded_file($_FILES['file']['tmp_name'], $up_file);
  269. pre_update($up_file);
  270. }
  271. }
  272. break;
  273. }
  274.  
  275. ?>
  276. <a href='/admin/?act=about'><div class="link">SecWind</div></a>
  277. <a href='?'><div class="link">Обновление</div></a>
  278. <a href='/admin/'><div class="link">Админка</div></a>
  279. <?php
  280. include incDir.'foot.php';