Esempio n. 1
0
 /**
  * Обновление конкретного модуля.
  */
 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;
 }