. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ global $RBAC; $RBAC->requirePermissions("PM_SETUP_ADVANCE"); require_once PATH_CORE . 'methods' . PATH_SEP . 'enterprise' . PATH_SEP . 'enterprise.php'; $response = array(); $status = 1; try { if (!isset($_FILES["form"]["error"]["PLUGIN_FILENAME"]) || $_FILES["form"]["error"]["PLUGIN_FILENAME"] == 1) { $str = "There was an error uploading the file, probably the file size if greater than upload_max_filesize parameter in php.ini, please check this parameter and try again."; throw (new Exception($str)); } //save the file if ($_FILES["form"]["error"]["PLUGIN_FILENAME"] == 0) { $filename = $_FILES["form"]["name"]["PLUGIN_FILENAME"]; $path = PATH_DOCUMENT . "input" . PATH_SEP ; $tempName = $_FILES["form"]["tmp_name"]["PLUGIN_FILENAME"]; G::uploadFile($tempName, $path, $filename ); } if (!$_FILES["form"]["type"]["PLUGIN_FILENAME"] == "application/octet-stream") { $str = "the uploaded files are invalid, expected \"application/octect-stream\" mime type file (". $_FILES["form"]["type"]["PLUGIN_FILENAME"] . ")"; throw (new Exception($str)); } G::LoadThirdParty("pear/Archive","Tar"); $tar = new Archive_Tar($path. $filename); $sFileName = substr($filename, 0, strrpos($filename, ".")); $sClassName = substr($filename, 0, strpos($filename, "-")); $aFiles = $tar->listContent(); $bMainFile = false; $bClassFile = false; if (is_array($aFiles)) { foreach ($aFiles as $key => $val) { if ($val["filename"] == $sClassName . ".php") { $bMainFile = true; } if ($val["filename"] == $sClassName . PATH_SEP . "class." . $sClassName . ".php") { $bClassFile = true; } } } else { $str = "Failed to import the file default by doesn't a plugin or invalid file."; throw (new Exception($str)); } $oPluginRegistry = &PMPluginRegistry::getSingleton(); $pluginFile = $sClassName . '.php'; if ($bMainFile && $bClassFile) { $sAux = $sClassName . 'Plugin'; $fVersionOld = 0.0; if (file_exists(PATH_PLUGINS . $pluginFile)) { if (!class_exists($sAux) && !class_exists($sClassName . 'plugin')) { include PATH_PLUGINS . $pluginFile; } if (!class_exists($sAux)) { $sAux = $sClassName . 'plugin'; } $oClass = new $sAux($sClassName); $fVersionOld = $oClass->iVersion; unset($oClass); } $res = $tar->extract($path); //Verify if not is Enterprise Plugin if (!$oPluginRegistry->isEnterprisePlugin($sClassName, $path)) { throw new Exception(G::LoadTranslation('ID_EEPLUGIN_IMPORT_PLUGIN_NOT_IS_ENTERPRISE', [$filename])); } //Get contents of plugin file $sContent = file_get_contents($path . $pluginFile); $sContent = str_ireplace($sAux, $sAux . '_', $sContent); $sContent = str_ireplace('PATH_PLUGINS', "'".$path."'", $sContent); $sContent = preg_replace("/\\\$oPluginRegistry\s*=\s*&\s*PMPluginRegistry::getSingleton\s*\(\s*\)\s*;/i", null, $sContent); $sContent = preg_replace("/\\\$oPluginRegistry->registerPlugin\s*\(\s*[\"\']" . $sClassName . "[\"\']\s*,\s*__FILE__\s*\)\s*;/i", null, $sContent); //header('Content-Type: text/plain');var_dump($sClassName, $sContent);die; file_put_contents($path . $pluginFile, $sContent); $sAux = $sAux . '_'; include ($path . $pluginFile); $oClass = new $sAux($sClassName); $fVersionNew = $oClass->iVersion; if (!isset($oClass->iPMVersion)) { $oClass->iPMVersion = 0; } $res = $tar->extract(PATH_PLUGINS); } else { $str = "The file $filename doesn't contain class: $sClassName "; throw (new Exception($str)); } if (! file_exists(PATH_PLUGINS . $sClassName . '.php')) { $str = "File '$pluginFile' doesn't exists "; throw (new Exception($str)); } require_once (PATH_PLUGINS . $pluginFile); $oPluginRegistry->registerPlugin($sClassName, PATH_PLUGINS . $sClassName . ".php"); $details = $oPluginRegistry->getPluginDetails($pluginFile); $oPluginRegistry->installPlugin($details->sNamespace); $oPluginRegistry->setupPlugins(); //get and setup enabled plugins $size = file_put_contents(PATH_DATA_SITE . "plugin.singleton", $oPluginRegistry->serializeInstance()); //G::header("Location: pluginsList"); //die; $response["success"] = true; } catch (Exception $e) { $response["message"] = $e->getMessage(); $status = 0; } if ($status == 0) { $response["success"] = false; } G::outRes( G::json_encode($response) );