/** * Requires the entry from $_FILES of a zip file. */ public static function install($source) { try { Zipper::unzip($source['tmp_name']); } catch (Exception $e) { self::$error = $e->getMessage(); return false; } $folder = Zipper::find_folder($source['name']); // Get config and verify it if (!file_exists($folder . '/elefant.json')) { self::$error = __('Verification failed: No configuration file found.'); return false; } $conf = json_decode(file_get_contents($folder . '/elefant.json')); if ($conf === false) { self::$error = __('Verification failed: Invalid configuration file.'); return false; } if (!self::verify($conf)) { // self::$error already set by verify() return false; } // Move files over if ($conf->type === 'app') { if (!rename($folder, 'apps/' . $conf->folder)) { self::$error = __('Unable to write to apps folder.'); return false; } chmod_recursive('apps/' . $conf->folder, 0777); } else { if (!rename($folder, 'layouts/' . $conf->folder)) { self::$error = __('Unable to write to layouts folder.'); } chmod_recursive('layouts/' . $conf->folder, 0777); } // Remove the original zip file @unlink($source['tmp_name']); return $conf; }