/** * Обновление конкретного модуля. */ public static function updateModule($name) { $db = self::getAllModules(); if (!array_key_exists($name, $db)) { throw new RuntimeException(t('Нет информации о модуле %name.', array('%name' => $name))); } if (empty($db[$name]['url'])) { Logger::log("no url for module {$name}, not updated."); return false; } $head = http::head($url = $db[$name]['url']); if (200 != $head['_status']) { Logger::log('updateModule: file not found: ' . $url); return false; } $tmp = http::fetch($url); foreach (array('sha1' => 'sha1_file') as $k => $func) { if (!empty($db[$name][$k]) and $db[$name][$k] != $func($tmp)) { Logger::log($k . ' hash mismatch for ' . $url); return false; } } $existed = is_dir($path = os::path('lib', 'modules', $name)); zip::unzipToFolder($tmp, $path); if ($existed) { Logger::log($name . ': updated from v' . $db[$name]['version.local'] . ' to v' . $db[$name]['version'] . '.'); } else { Logger::log($name . ': installed v' . $db[$name]['version'] . '.'); } return true; }