static function doInstallModule() { self::$error_message = ""; self::$error = false; if ($_FILES['modulefile']['error'] > 0) { self::$error_message = "Couldn't upload the file, " . $_FILES['modulefile']['error'] . ""; } else { $archive_ext = fs_director::GetFileExtension($_FILES['modulefile']['name']); $module_folder = fs_director::GetFileNameNoExtentsion($_FILES['modulefile']['name']); $module_dir = ctrl_options::GetSystemOption('sentora_root') . 'modules/' . $module_folder; if (!fs_director::CheckFolderExists($module_dir)) { if ($archive_ext != 'zpp') { self::$error_message = "Package type was not detected as a .zpp (Sentora Package) archive."; } else { if (fs_director::CreateDirectory($module_dir)) { if (sys_archive::Unzip($_FILES['modulefile']['tmp_name'], $module_dir . '/')) { if (!fs_director::CheckFileExists($module_dir . '/module.xml')) { self::$error_message = "No module.xml file found in the unzipped archive."; } else { ui_module::ModuleInfoToDB($module_folder); $extra_config = $module_dir . "/deploy/install.run"; if (fs_director::CheckFileExists($extra_config)) { exec(ctrl_options::GetSystemOption('php_exer') . " " . $extra_config . ""); } self::$ok = true; } } else { self::$error_message = "Couldn't unzip the archive (" . $_FILES['modulefile']['tmp_name'] . ") to " . $module_dir . '/'; } } else { self::$error_message = "Couldn't create module folder in " . $module_dir; } } } else { self::$error_message = "The module " . $module_folder . " is already installed on this server!"; } } return; }
/** * This class scans the module directory and will return an array of new modules that are not yet in the database. * @author Bobby Allen (ballen@bobbyallen.me) * @global db_driver $zdbh The ZPX database handle. * @param boolean $init Upon finding modules that don't exist in the database, add them! * @return array List of all new modules. */ static function ScanForNewModules($init = false) { global $zdbh; $new_module_list = array(); $handle = @opendir(ctrl_options::GetSystemOption('zpanel_root') . "modules"); $chkdir = ctrl_options::GetSystemOption('zpanel_root') . "modules/"; if ($handle) { while ($file = readdir($handle)) { if ($file != "." && $file != "..") { if (is_dir($chkdir . $file)) { $sql = $zdbh->prepare("SELECT mo_id_pk FROM x_modules WHERE mo_folder_vc = :file"); $sql->bindParam(':file', $file); $status = $sql->execute(); $match_module = $sql->fetch(); if (!$match_module) { array_push($new_module_list, $file); } } } } closedir($handle); } if ($init == true) { foreach ($new_module_list as $modules_to_import) { ui_module::ModuleInfoToDB($modules_to_import); } } return $new_module_list; }