/** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2013 Bitrix */ /** * Bitrix vars * @global CUser $USER * @global CMain $APPLICATION * @global CDatabase $DB */ use Bitrix\Main\Application; require_once(__DIR__."/../include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client_partner.php"); define("HELP_FILE", "settings/module_admin.php"); if(!$USER->CanDoOperation('edit_other_settings') && !$USER->CanDoOperation('view_other_settings')) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $isAdmin = $USER->CanDoOperation('edit_other_settings'); IncludeModuleLangFile(__FILE__); $id = $_REQUEST["id"] ?? null; $mod = $_REQUEST["mod"] ?? null; $resultMod = $_REQUEST["result"] ?? null; if($isAdmin && $_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST["module"]) && check_bitrix_sessid()) { $moduleId = preg_replace("#[^a-z0-9.,_-]#i", "", $_POST["module"]); if($moduleId <> '') { if(isset($_POST["act"]) && $_POST["act"] == "unnotify") { $cModules = COption::GetOptionString("main", "mp_modules_date", ""); if($cModules <> '') { $arModules = unserialize($cModules, ['allowed_classes' => false]); foreach($arModules as $id => $val) { if($val["ID"] == $moduleId) unset($arModules[$id]); } if(!empty($arModules)) COption::SetOptionString("main", "mp_modules_date", serialize($arModules)); else COption::RemoveOption("main", "mp_modules_date"); } die(); } elseif(isset($_POST["act"]) && $_POST["act"] == "add_opinion") { $arF = Array( "comments" => $GLOBALS["APPLICATION"]->ConvertCharset($_POST["comments"], SITE_CHARSET, "windows-1251"), "lkey" => Application::getInstance()->getLicense()->getPublicHashKey(), "act" => "add_delete_comment", "name" => $GLOBALS["APPLICATION"]->ConvertCharset($USER->GetFullName(), SITE_CHARSET, "windows-1251"), "email" => $USER->GetEmail(), "reason" => $_POST["reason"], ); $ht = new CHTTP(); $ht->Post("https://marketplace.1c-bitrix.ru/solutions/".$moduleId."/", $arF); LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&result=OPAD"); } elseif(isset($_POST["act"]) && $_POST["act"] == "unnotify_mp") { $arrayId = preg_replace("#[^a-z0-9.,_-]#i", "", $_POST["array_id"]); $moduleId = preg_replace("#[^a-z0-9.,_-]#i", "", $_POST["module"]); $cMpModulesResult = COption::GetOptionString("main", "last_mp_modules_result", ""); if ($cMpModulesResult <> '') { $arModulesResult = unserialize($cMpModulesResult, ['allowed_classes' => false]); foreach ($arModulesResult[$arrayId] as $key => $arModule) { if (trim(mb_strtoupper($key)) == trim(mb_strtoupper($moduleId))) { unset ($arModulesResult[$arrayId][$key]); } } } COption::SetOptionString("main", "last_mp_modules_result", serialize($arModulesResult)); die(); } } } $arModules = array(); function OnModuleInstalledEvent($id, $installed, $Module) { foreach(GetModuleEvents("main", "OnModuleInstalled", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($id, $installed)); } $cModules = COption::GetOptionString("main", "mp_modules_date", ""); $arModules = array(); if($cModules <> '') $arModules = unserialize($cModules, ['allowed_classes' => false]); if($installed == "Y") { $arModules[] = array("ID" => $id, "NAME" => htmlspecialcharsbx($Module->MODULE_NAME), "TMS" => time()); if(count($arModules) > 3) $arModules = array_slice($arModules, -3); COption::SetOptionString("main", "mp_modules_date", serialize($arModules)); } else { foreach($arModules as $arid => $val) { if($val["ID"] == $id) unset($arModules[$arid]); } if(!empty($arModules)) COption::SetOptionString("main", "mp_modules_date", serialize($arModules)); else COption::RemoveOption("main", "mp_modules_date"); $_SESSION["MP_MOD_DELETED"] = array("ID" => $id, "NAME" => $Module->MODULE_NAME); } } $folders = array( "/local/modules", "/bitrix/modules", ); foreach($folders as $folder) { if(file_exists($_SERVER["DOCUMENT_ROOT"].$folder)) { $handle = opendir($_SERVER["DOCUMENT_ROOT"].$folder); if($handle) { while (false !== ($dir = readdir($handle))) { if(!isset($arModules[$dir]) && is_dir($_SERVER["DOCUMENT_ROOT"].$folder."/".$dir) && $dir!="." && $dir!=".." && strpos($dir, ".") !== false) { $module_dir = $_SERVER["DOCUMENT_ROOT"].$folder."/".$dir; if($info = CModule::CreateModuleObject($dir)) { $arModules[$dir]["MODULE_ID"] = $info->MODULE_ID; $arModules[$dir]["MODULE_NAME"] = $info->MODULE_NAME; $arModules[$dir]["MODULE_DESCRIPTION"] = $info->MODULE_DESCRIPTION; $arModules[$dir]["MODULE_VERSION"] = $info->MODULE_VERSION; $arModules[$dir]["MODULE_VERSION_DATE"] = $info->MODULE_VERSION_DATE; $arModules[$dir]["MODULE_SORT"] = $info->MODULE_SORT; $arModules[$dir]["MODULE_PARTNER"] = $info->PARTNER_NAME; $arModules[$dir]["MODULE_PARTNER_URI"] = $info->PARTNER_URI; $arModules[$dir]["IsInstalled"] = $info->IsInstalled(); if(defined(str_replace(".", "_", $info->MODULE_ID)."_DEMO")) { $arModules[$dir]["DEMO"] = "Y"; if($info->IsInstalled()) { if(CModule::IncludeModuleEx($info->MODULE_ID) != MODULE_DEMO_EXPIRED) { $arModules[$dir]["DEMO_DATE"] = ConvertTimeStamp($GLOBALS["SiteExpireDate_".str_replace(".", "_", $info->MODULE_ID)], "SHORT"); } else $arModules[$dir]["DEMO_END"] = "Y"; } } } } } closedir($handle); } } } \Bitrix\Main\Type\Collection::sortByColumn( $arModules, ['MODULE_SORT' => SORT_ASC, 'MODULE_NAME' => SORT_STRING], '', null, true ); $stableVersionsOnly = COption::GetOptionString("main", "stable_versions_only", "Y"); $arRequestedModules = CUpdateClientPartner::GetRequestedModules(""); $arUpdateList = CUpdateClientPartner::GetUpdatesList($errorMessage, LANG, $stableVersionsOnly, $arRequestedModules, Array("fullmoduleinfo" => "Y")); $strError_tmp = ""; $arClientModules = CUpdateClientPartner::GetCurrentModules($strError_tmp); $linkToBuy = false; $linkToBuyUpdate = false; if(LANGUAGE_ID == "ru") { $linkToBuy = "https://marketplace.1c-bitrix.ru"."/tobasket.php?ID=#CODE#"; $linkToBuyUpdate = "https://marketplace.1c-bitrix.ru"."/tobasket.php?ID=#CODE#&lckey=" . Application::getInstance()->getLicense()->getPublicHashKey(); } $bHaveNew = false; $modules = Array(); $modulesNew = Array(); if(!empty($arUpdateList["MODULE"])) { foreach($arUpdateList["MODULE"] as $k => $v) { if(!array_key_exists($v["@"]["ID"], $arClientModules)) { $bHaveNew = true; $modulesNew[] = Array( "NAME" => htmlspecialcharsBack($v["@"]["NAME"]), "ID" => $v["@"]["ID"], "DESCRIPTION" => $v["@"]["DESCRIPTION"], "PARTNER" => $v["@"]["PARTNER_NAME"], "FREE_MODULE" => $v["@"]["FREE_MODULE"], "DATE_FROM" => $v["@"]["DATE_FROM"], "DATE_TO" => $v["@"]["DATE_TO"], "UPDATE_END" => $v["@"]["UPDATE_END"], ); } else { $modules[$v["@"]["ID"]] = Array( "VERSION" => (isset($v["#"]["VERSION"]) ? $v["#"]["VERSION"][count($v["#"]["VERSION"]) - 1]["@"]["ID"] : ""), "FREE_MODULE" => $v["@"]["FREE_MODULE"], "DATE_FROM" => $v["@"]["DATE_FROM"], "DATE_TO" => $v["@"]["DATE_TO"], "UPDATE_END" => $v["@"]["UPDATE_END"], ); } } } $errorMessage = ""; $errorMessageFull = ""; $fb = ($id == 'fileman' && !$USER->CanDoOperation('fileman_install_control')); if((!empty($_REQUEST["uninstall"]) || !empty($_REQUEST["install"]) || !empty($_REQUEST["clear"])) && $isAdmin && !$fb && check_bitrix_sessid()) { $id = str_replace("\\", "", str_replace("/", "", $id)); if($Module = CModule::CreateModuleObject($id)) { if($Module->IsInstalled() && !empty($_REQUEST["uninstall"])) { OnModuleInstalledEvent($id, 'N', $Module); if(COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") CEventLog::Log("INFO", "MP_MODULE_UNINSTALLED", "main", $id); if($Module->DoUninstall() !== false) { LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&mod=".$id."&result=DELOK"); } else { $errorMessage = GetMessage("MOD_UNINSTALL_ERROR", Array("#CODE#" => $id)); if($e = $APPLICATION->GetException()) $errorMessageFull = $e->GetString(); } } elseif(!$Module->IsInstalled() && !empty($_REQUEST["install"])) { if ($DB->type == "MYSQL" && defined("MYSQL_TABLE_TYPE") && MYSQL_TABLE_TYPE <> '') { $DB->Query("SET storage_engine = '".MYSQL_TABLE_TYPE."'", true); } OnModuleInstalledEvent($id, 'Y', $Module); if(COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") CEventLog::Log("INFO", "MP_MODULE_INSTALLED", "main", $id); if($Module->DoInstall() !== false) { LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&mod=".$id."&result=OK"); } else { $errorMessage = GetMessage("MOD_INSTALL_ERROR", Array("#CODE#" => $id)); if($e = $APPLICATION->GetException()) $errorMessageFull = $e->GetString(); } } elseif(!$Module->IsInstalled() && !empty($_REQUEST["clear"])) { if($Module->MODULE_ID <> '' && ($mdir = getLocalPath("modules/".$Module->MODULE_ID)) !== false) { if(COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") CEventLog::Log("INFO", "MP_MODULE_DELETED", "main", $id); DeleteDirFilesEx($mdir."/"); LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&mod=".$id."&result=CLEAROK"); } } } } $sTableID = "upd_partner_modules_all"; $lAdmin = new CAdminList($sTableID); $sTableID1 = "upd_partner_modules_new"; $lAdmin1 = new CAdminList($sTableID1); $lAdmin->BeginPrologContent(); echo "
".GetMessage("MOD_SMP_AV_MOD_TEXT1")."
".GetMessage("MOD_SMP_AV_MOD_TEXT2")."
".GetMessage("MOD_SMP_BUY_MOD_TEXT1")."
".GetMessage("MOD_SMP_BUY_MOD_TEXT2")."