/** * Check test requirements (e.g. max_execution_time) * * @param array $params * @throws CSecurityRequirementsException * @return bool */ public function checkRequirements($params = array()) { if (extension_loaded('tokenizer') !== true) { throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_TOKENIZER_NOT_FOUND")); } $maxExecutionTime = ini_get("max_execution_time"); if ($maxExecutionTime > 0 && $maxExecutionTime <= 20) { throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_EXECUTION_TIME")); } $memoryLimit = CUtil::Unformat(ini_get("memory_limit")); if ($memoryLimit > 0 && $memoryLimit <= 250 * 1024 * 1024) { throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_MEMORY_LIMIT")); } return true; }
function ResizeImageFile($sourceFile, &$destinationFile, $arSize, $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL, $arWaterMark = array(), $jpgQuality = false, $arFilters = false) { $io = CBXVirtualIo::GetInstance(); if (!$io->FileExists($sourceFile)) { return false; } $bNeedCreatePicture = false; if ($resizeType != BX_RESIZE_IMAGE_EXACT && $resizeType != BX_RESIZE_IMAGE_PROPORTIONAL_ALT) { $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL; } if (!is_array($arSize)) { $arSize = array(); } if (!array_key_exists("width", $arSize) || intval($arSize["width"]) <= 0) { $arSize["width"] = 0; } if (!array_key_exists("height", $arSize) || intval($arSize["height"]) <= 0) { $arSize["height"] = 0; } $arSize["width"] = intval($arSize["width"]); $arSize["height"] = intval($arSize["height"]); $arSourceSize = array("x" => 0, "y" => 0, "width" => 0, "height" => 0); $arDestinationSize = array("x" => 0, "y" => 0, "width" => 0, "height" => 0); $arSourceFileSizeTmp = CFile::GetImageSize($sourceFile); if (!in_array($arSourceFileSizeTmp[2], array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_BMP))) { return false; } if (class_exists("imagick") && function_exists('memory_get_usage')) { //When memory limit reached we'll try to use ImageMagic $memoryNeeded = round(($arSourceFileSizeTmp[0] * $arSourceFileSizeTmp[1] * $arSourceFileSizeTmp['bits'] * ($arSourceFileSizeTmp['channels'] > 0 ? $arSourceFileSizeTmp['channels'] : 1) / 8 + pow(2, 16)) * 1.65); $memoryLimit = CUtil::Unformat(ini_get('memory_limit')); if (memory_get_usage() + $memoryNeeded > $memoryLimit) { if ($arSize["width"] <= 0 || $arSize["height"] <= 0) { $arSize["width"] = $arSourceFileSizeTmp[0]; $arSize["height"] = $arSourceFileSizeTmp[1]; } CFile::ScaleImage($arSourceFileSizeTmp[0], $arSourceFileSizeTmp[1], $arSize, $resizeType, $bNeedCreatePicture, $arSourceSize, $arDestinationSize); if ($bNeedCreatePicture) { $new_image = CTempFile::GetFileName(bx_basename($sourceFile)); CheckDirPath($new_image); $im = new Imagick(); try { $im->setSize($arDestinationSize["width"], $arDestinationSize["height"]); $im->readImage($io->GetPhysicalName($sourceFile)); $im->setImageFileName($new_image); $im->thumbnailImage($arDestinationSize["width"], $arDestinationSize["height"], true); $im->writeImage(); $im->destroy(); } catch (ImagickException $e) { $new_image = ""; } if ($new_image != "") { $sourceFile = $new_image; $arSourceFileSizeTmp = CFile::GetImageSize($io->GetPhysicalName($sourceFile)); } } } } if ($io->Copy($sourceFile, $destinationFile)) { switch ($arSourceFileSizeTmp[2]) { case IMAGETYPE_GIF: $sourceImage = imagecreatefromgif($io->GetPhysicalName($sourceFile)); $bHasAlpha = true; break; case IMAGETYPE_PNG: $sourceImage = imagecreatefrompng($io->GetPhysicalName($sourceFile)); $bHasAlpha = true; break; case IMAGETYPE_BMP: $sourceImage = CFile::ImageCreateFromBMP($io->GetPhysicalName($sourceFile)); $bHasAlpha = false; break; default: $sourceImage = imagecreatefromjpeg($io->GetPhysicalName($sourceFile)); $bHasAlpha = false; break; } $sourceImageWidth = intval(imagesx($sourceImage)); $sourceImageHeight = intval(imagesy($sourceImage)); if ($sourceImageWidth > 0 && $sourceImageHeight > 0) { if ($arSize["width"] <= 0 || $arSize["height"] <= 0) { $arSize["width"] = $sourceImageWidth; $arSize["height"] = $sourceImageHeight; } CFile::ScaleImage($sourceImageWidth, $sourceImageHeight, $arSize, $resizeType, $bNeedCreatePicture, $arSourceSize, $arDestinationSize); if ($bNeedCreatePicture) { if (CFile::IsGD2()) { $picture = ImageCreateTrueColor($arDestinationSize["width"], $arDestinationSize["height"]); if ($arSourceFileSizeTmp[2] == IMAGETYPE_PNG) { $transparentcolor = imagecolorallocatealpha($picture, 0, 0, 0, 127); imagefilledrectangle($picture, 0, 0, $arDestinationSize["width"], $arDestinationSize["height"], $transparentcolor); imagealphablending($picture, false); imagecopyresampled($picture, $sourceImage, 0, 0, $arSourceSize["x"], $arSourceSize["y"], $arDestinationSize["width"], $arDestinationSize["height"], $arSourceSize["width"], $arSourceSize["height"]); imagealphablending($picture, true); } elseif ($arSourceFileSizeTmp[2] == IMAGETYPE_GIF) { imagepalettecopy($picture, $sourceImage); //Save transparency for GIFs $transparentcolor = imagecolortransparent($sourceImage); if ($transparentcolor >= 0 && $transparentcolor < imagecolorstotal($sourceImage)) { $RGB = imagecolorsforindex($sourceImage, $transparentcolor); $transparentcolor = imagecolorallocate($picture, $RGB["red"], $RGB["green"], $RGB["blue"]); imagecolortransparent($picture, $transparentcolor); imagefilledrectangle($picture, 0, 0, $arDestinationSize["width"], $arDestinationSize["height"], $transparentcolor); } imagecopyresampled($picture, $sourceImage, 0, 0, $arSourceSize["x"], $arSourceSize["y"], $arDestinationSize["width"], $arDestinationSize["height"], $arSourceSize["width"], $arSourceSize["height"]); } else { imagecopyresampled($picture, $sourceImage, 0, 0, $arSourceSize["x"], $arSourceSize["y"], $arDestinationSize["width"], $arDestinationSize["height"], $arSourceSize["width"], $arSourceSize["height"]); } } else { $picture = ImageCreate($arDestinationSize["width"], $arDestinationSize["height"]); imagecopyresized($picture, $sourceImage, 0, 0, $arSourceSize["x"], $arSourceSize["y"], $arDestinationSize["width"], $arDestinationSize["height"], $arSourceSize["width"], $arSourceSize["height"]); } } else { $picture = $sourceImage; } if (is_array($arFilters)) { foreach ($arFilters as $arFilter) { $bNeedCreatePicture |= CFile::ApplyImageFilter($picture, $arFilter, $bHasAlpha); } } if (is_array($arWaterMark)) { $arWaterMark["name"] = "watermark"; $bNeedCreatePicture |= CFile::ApplyImageFilter($picture, $arWaterMark, $bHasAlpha); } if ($bNeedCreatePicture) { if ($io->FileExists($destinationFile)) { $io->Delete($destinationFile); } switch ($arSourceFileSizeTmp[2]) { case IMAGETYPE_GIF: imagegif($picture, $io->GetPhysicalName($destinationFile)); break; case IMAGETYPE_PNG: imagealphablending($picture, false); imagesavealpha($picture, true); imagepng($picture, $io->GetPhysicalName($destinationFile)); break; default: if ($arSourceFileSizeTmp[2] == IMAGETYPE_BMP) { $destinationFile .= ".jpg"; } if ($jpgQuality === false) { $jpgQuality = intval(COption::GetOptionString('main', 'image_resize_quality', '95')); } if ($jpgQuality <= 0 || $jpgQuality > 100) { $jpgQuality = 95; } imagejpeg($picture, $io->GetPhysicalName($destinationFile), $jpgQuality); break; } imagedestroy($picture); } } return true; } return false; }
public static function getMaximumFileUploadSize() { return min(CUtil::Unformat(ini_get('post_max_size')), CUtil::Unformat(ini_get('upload_max_filesize'))); }
<?php $pathJS = '/bitrix/js/main/core'; $pathCSS = '/bitrix/js/main/core/css'; $pathCSSPanel = '/bitrix/panel/main'; $pathLang = BX_ROOT . '/modules/main/lang/' . LANGUAGE_ID; //WARNING: Don't use CUserOptions here! CJSCore::Init can be called from php_interface/init.php where no $USER exists $arJSCoreConfig = array('ajax' => array('js' => $pathJS . '/core_ajax.js'), 'admin' => array('js' => $pathJS . '/core_admin.js', 'css' => array($pathCSS . '/core_panel.css', $pathCSSPanel . '/admin-public.css'), 'lang' => $pathLang . '/js_core_admin.php', 'rel' => array('ajax'), 'use' => CJSCore::USE_PUBLIC), 'admin_interface' => array('js' => $pathJS . '/core_admin_interface.js', 'lang' => $pathLang . '/js_core_admin_interface.php', 'css' => $pathCSSPanel . '/admin-public.css', 'rel' => array('ajax', 'popup', 'window', 'date', 'fx'), 'lang_additional' => array('TITLE_PREFIX' => CUtil::JSEscape(COption::GetOptionString("main", "site_name", $_SERVER["SERVER_NAME"])) . " - ")), "admin_login" => array('js' => $pathJS . "/core_admin_login.js", 'css' => $pathCSSPanel . "/login.css", 'rel' => array("ajax", "window")), 'autosave' => array('js' => $pathJS . '/core_autosave.js', 'lang' => $pathLang . '/js_core_autosave.php', 'rel' => array('ajax')), 'fx' => array('js' => $pathJS . '/core_fx.js'), 'dd' => array('js' => $pathJS . '/core_dd.js'), 'webrtc' => array('js' => $pathJS . '/core_webrtc.js'), 'popup' => array('js' => $pathJS . '/core_popup.js', 'css' => $pathCSS . '/core_popup.css'), 'tags' => array('js' => $pathJS . '/core_tags.js', 'css' => $pathCSS . '/core_tags.css', 'lang' => $pathLang . '/js_core_tags.php', 'rel' => array('popup')), 'timer' => array('js' => $pathJS . '/core_timer.js'), 'tooltip' => array('js' => $pathJS . '/core_tooltip.js', 'css' => $pathCSS . '/core_tooltip.css', 'rel' => array('ajax'), 'lang_additional' => array('TOOLTIP_ENABLED' => IsModuleInstalled("socialnetwork") && COption::GetOptionString("socialnetwork", "allow_tooltip", "Y") == "Y" ? "Y" : "N")), 'translit' => array('js' => $pathJS . '/core_translit.js', 'lang' => $pathLang . '/js_core_translit.php', 'lang_additional' => array('YANDEX_KEY' => COption::GetOptionString('main', 'translate_key_yandex', ''))), 'image' => array('js' => $pathJS . '/core_image.js', 'css' => $pathCSS . '/core_image.css', 'rel' => array('ls')), 'viewer' => array('js' => $pathJS . '/core_viewer.js', 'css' => $pathCSS . '/core_viewer.css', 'lang' => $pathLang . '/js_core_viewer.php', 'rel' => array('ls', 'ajax', 'popup')), 'window' => array('js' => $pathJS . '/core_window.js', 'css' => $pathCSSPanel . '/popup.css', 'rel' => array('ajax')), 'access' => array('js' => $pathJS . '/core_access.js', 'css' => $pathCSS . '/core_access.css', 'rel' => array('popup', 'ajax', 'finder'), 'lang' => $pathLang . '/js_core_access.php'), 'finder' => array('js' => $pathJS . '/core_finder.js', 'css' => $pathCSS . '/core_finder.css', 'rel' => array('popup', 'ajax')), 'date' => array('js' => $pathJS . '/core_date.js', 'css' => $pathCSS . '/core_date.css', 'lang' => $pathLang . '/date_format.php', 'lang_additional' => array('WEEK_START' => CSite::GetWeekStart()), 'rel' => array('popup')), 'ls' => array('js' => $pathJS . '/core_ls.js', 'rel' => array('json')), 'db' => array('js' => $pathJS . '/core_db.js'), 'fc' => array('js' => $pathJS . '/core_frame_cache.js', 'rel' => array('db', 'ajax', 'ls')), 'jquery' => array('js' => '/bitrix/js/main/jquery/jquery-1.8.3.min.js', 'skip_core' => true), 'jquery_src' => array('js' => '/bitrix/js/main/jquery/jquery-1.8.3.js', 'skip_core' => true), 'json' => array('js' => '/bitrix/js/main/json/json2.min.js', 'skip_core' => true), 'json_src' => array('js' => '/bitrix/js/main/json/json2.js', 'skip_core' => true), 'canvas' => array('js' => $pathJS . '/core_canvas.js', 'css' => $pathCSS . '/core_canvas.css', 'lang' => $pathLang . '/js_core_canvas.php', 'rel' => array('popup')), 'uploader' => array('js' => array($pathJS . '/core_uploader/common.js', $pathJS . '/core_uploader/uploader.js', $pathJS . '/core_uploader/file.js', $pathJS . '/core_uploader/queue.js'), 'lang_additional' => array("phpMaxFileUploads" => ini_get("max_file_uploads"), "phpPostMaxSize" => CUtil::Unformat(ini_get("post_max_size")), "phpUploadMaxFilesize" => CUtil::Unformat(ini_get("upload_max_filesize"))), 'lang' => $pathLang . '/js_core_uploader.php', 'rel' => array('ajax', 'dd'))); foreach ($arJSCoreConfig as $ext => $arExt) { CJSCore::RegisterExt($ext, $arExt); }
'js' => $pathJS.'/core_canvas.js', 'css' => $pathCSS.'/core_canvas.css', 'lang' => $pathLang.'/js_core_canvas.php', 'rel' => array('popup'), ), 'uploader' => array( 'js' => array( $pathJS.'/core_uploader/common.js', $pathJS.'/core_uploader/uploader.js', $pathJS.'/core_uploader/file.js', $pathJS.'/core_uploader/queue.js', ), 'lang_additional' => array( "phpMaxFileUploads" => ini_get("max_file_uploads"), "phpPostMaxSize" => CUtil::Unformat(ini_get("post_max_size")), "phpUploadMaxFilesize" => CUtil::Unformat(ini_get("upload_max_filesize")), "bxImageExtensions" => CFile::GetImageExtensions() ), 'lang' => $pathLang.'/js_core_uploader.php', 'rel' => array('ajax', 'dd') ), 'site_speed' => array( 'js' => $pathJS.'/site_speed/site_speed.js', 'lang' => $pathLang.'/js_site_speed.php', 'rel' => array('amcharts_serial', 'ajax', "date") ), 'qrcode' => array( 'js' => array( '/bitrix/js/main/qrcode/qrcode.js' ) ),
$arParams["~" . strToUpper($URL) . "_URL"] = $arParams[strToUpper($URL) . "_URL"]; $arParams[strToUpper($URL) . "_URL"] = htmlspecialcharsbx($arParams["~" . strToUpper($URL) . "_URL"]); } $arParams["CONVERT_PATH"] = strPos($arParams["~SECTIONS_URL"], "?") === false; if (!$arParams["CONVERT_PATH"]) { $arParams["CONVERT_PATH"] = strPos($arParams["~SECTIONS_URL"], "?") > strPos($arParams["~SECTIONS_URL"], "#PATH#"); } $arParams["CONVERT_PATH"] = strToLower($arParams["CONVERT"]) == "full" ? true : $arParams["CONVERT_PATH"]; /***************** ADDITIONAL **************************************/ $arParams["WORKFLOW"] = !$ob->workflow ? "N" : $ob->workflow; $arParams["DOCUMENT_ID"] = $arParams["DOCUMENT_TYPE"] = $arParams["OBJECT"]->wfParams["DOCUMENT_TYPE"]; $arParams["DOCUMENT_ID"][2] = 0; $arParams["UPLOAD_MAX_FILE"] = intVal(!empty($arParams["UPLOAD_MAX_FILE"]) ? $arParams["UPLOAD_MAX_FILE"] : 1); $arParams["UPLOAD_MAX_FILE"] = 1; $iUploadMaxFilesize = CUtil::Unformat(ini_get('upload_max_filesize')); $iPostMaxSize = CUtil::Unformat(ini_get('post_max_size')); $arParams["UPLOAD_MAX_FILESIZE"] = intVal($arParams["UPLOAD_MAX_FILESIZE"]); if ($arParams["UPLOAD_MAX_FILESIZE"] > 0) { $arParams["UPLOAD_MAX_FILESIZE"] = min($iUploadMaxFilesize, $iPostMaxSize, $arParams["UPLOAD_MAX_FILESIZE"]); } else { $arParams["UPLOAD_MAX_FILESIZE"] = min($iUploadMaxFilesize, $iPostMaxSize); } $arParams["UPLOAD_MAX_FILESIZE_BYTE"] = $arParams["UPLOAD_MAX_FILESIZE"] * 1024 * 1024; /***************** STANDART ****************************************/ if (!isset($arParams["CACHE_TIME"])) { $arParams["CACHE_TIME"] = 3600; } if ($arParams["CACHE_TYPE"] == "Y" || $arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y") { $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]); } else { $arParams["CACHE_TIME"] = 0;
<?php $pathJS = '/bitrix/js/main/core'; $pathCSS = '/bitrix/js/main/core/css'; $pathCSSPanel = '/bitrix/panel/main'; $pathLang = BX_ROOT . '/modules/main/lang/' . LANGUAGE_ID; //WARNING: Don't use CUserOptions here! CJSCore::Init can be called from php_interface/init.php where no $USER exists $amChartsPath = '/bitrix/js/main/amcharts/3.13/'; $arJSCoreConfig = array('ajax' => array('js' => $pathJS . '/core_ajax.js'), 'admin' => array('js' => $pathJS . '/core_admin.js', 'css' => array($pathCSS . '/core_panel.css', $pathCSSPanel . '/admin-public.css'), 'lang' => $pathLang . '/js_core_admin.php', 'rel' => array('ajax'), 'use' => CJSCore::USE_PUBLIC), 'admin_interface' => array('js' => $pathJS . '/core_admin_interface.js', 'lang' => $pathLang . '/js_core_admin_interface.php', 'css' => $pathCSSPanel . '/admin-public.css', 'rel' => array('ajax', 'popup', 'window', 'date', 'fx'), 'lang_additional' => array('TITLE_PREFIX' => CUtil::JSEscape(COption::GetOptionString("main", "site_name", $_SERVER["SERVER_NAME"])) . " - ")), "admin_login" => array('js' => $pathJS . "/core_admin_login.js", 'css' => $pathCSSPanel . "/login.css", 'rel' => array("ajax", "window")), 'autosave' => array('js' => $pathJS . '/core_autosave.js', 'lang' => $pathLang . '/js_core_autosave.php', 'rel' => array('ajax')), 'fx' => array('js' => $pathJS . '/core_fx.js'), 'dd' => array('js' => $pathJS . '/core_dd.js'), 'webrtc' => array('js' => $pathJS . '/core_webrtc.js'), 'popup' => array('js' => $pathJS . '/core_popup.js', 'css' => $pathCSS . '/core_popup.css'), 'tags' => array('js' => $pathJS . '/core_tags.js', 'css' => $pathCSS . '/core_tags.css', 'lang' => $pathLang . '/js_core_tags.php', 'rel' => array('popup')), 'timer' => array('js' => $pathJS . '/core_timer.js'), 'tooltip' => array('js' => $pathJS . '/core_tooltip.js', 'css' => $pathCSS . '/core_tooltip.css', 'rel' => array('ajax'), 'lang_additional' => array('TOOLTIP_ENABLED' => IsModuleInstalled("socialnetwork") && COption::GetOptionString("socialnetwork", "allow_tooltip", "Y") == "Y" ? "Y" : "N")), 'translit' => array('js' => $pathJS . '/core_translit.js', 'lang' => $pathLang . '/js_core_translit.php', 'lang_additional' => array('YANDEX_KEY' => COption::GetOptionString('main', 'translate_key_yandex', ''))), 'image' => array('js' => $pathJS . '/core_image.js', 'css' => $pathCSS . '/core_image.css', 'rel' => array('ls')), 'viewer' => array('js' => $pathJS . '/core_viewer.js', 'css' => $pathCSS . '/core_viewer.css', 'lang' => $pathLang . '/js_core_viewer.php', 'rel' => array('ls', 'ajax', 'popup')), 'window' => array('js' => $pathJS . '/core_window.js', 'css' => $pathCSSPanel . '/popup.css', 'rel' => array('ajax')), 'access' => array('js' => $pathJS . '/core_access.js', 'css' => $pathCSS . '/core_access.css', 'rel' => array('popup', 'ajax', 'finder'), 'lang' => $pathLang . '/js_core_access.php'), 'finder' => array('js' => $pathJS . '/core_finder.js', 'css' => $pathCSS . '/core_finder.css', 'rel' => array('popup', 'ajax', 'db_indexeddb')), 'date' => array('js' => $pathJS . '/core_date.js', 'css' => $pathCSS . '/core_date.css', 'lang' => $pathLang . '/date_format.php', 'lang_additional' => array('WEEK_START' => CSite::GetWeekStart()), 'rel' => array('popup')), 'ls' => array('js' => $pathJS . '/core_ls.js', 'rel' => array('json')), 'db' => array('js' => $pathJS . '/core_db.js'), 'db_indexeddb' => array('js' => $pathJS . '/core_db_indexeddb.js'), 'fc' => array('js' => $pathJS . '/core_frame_cache.js', 'rel' => array('db', 'ajax', 'ls', 'fx')), 'canvas' => array('js' => $pathJS . '/core_canvas.js', 'css' => $pathCSS . '/core_canvas.css', 'lang' => $pathLang . '/js_core_canvas.php', 'rel' => array('popup')), 'uploader' => array('js' => array($pathJS . '/core_uploader/common.js', $pathJS . '/core_uploader/uploader.js', $pathJS . '/core_uploader/file.js', $pathJS . '/core_uploader/queue.js'), 'lang_additional' => array("phpMaxFileUploads" => ini_get("max_file_uploads"), "phpPostMaxSize" => CUtil::Unformat(ini_get("post_max_size")), "phpUploadMaxFilesize" => CUtil::Unformat(ini_get("upload_max_filesize")), "bxImageExtensions" => CFile::GetImageExtensions(), "bxUploaderLog" => COption::GetOptionString("main", "uploaderLog", "N")), 'lang' => $pathLang . '/js_core_uploader.php', 'rel' => array('ajax', 'dd')), 'site_speed' => array('js' => $pathJS . '/site_speed/site_speed.js', 'lang' => $pathLang . '/js_site_speed.php', 'rel' => array('amcharts_serial', 'ajax', "date")), 'qrcode' => array('js' => array('/bitrix/js/main/qrcode/qrcode.js')), 'fileinput' => array('js' => $pathJS . '/core_fileinput.js', 'css' => $pathCSS . '/core_fileinput.css', 'lang' => $pathLang . '/js_core_fileinput.php', 'rel' => array("ajax", "window", "popup", "uploader", "canvas", "dd")), 'jquery' => array('js' => '/bitrix/js/main/jquery/jquery-1.8.3.min.js', 'skip_core' => true), 'jquery_src' => array('js' => '/bitrix/js/main/jquery/jquery-1.8.3.js', 'skip_core' => true), 'jquery2' => array('js' => '/bitrix/js/main/jquery/jquery-2.1.3.min.js', 'skip_core' => true), 'jquery2_src' => array('js' => '/bitrix/js/main/jquery/jquery-2.1.3.js', 'skip_core' => true), 'json' => array('js' => '/bitrix/js/main/json/json2.min.js', 'skip_core' => true), 'json_src' => array('js' => '/bitrix/js/main/json/json2.js', 'skip_core' => true), 'amcharts' => array('js' => $amChartsPath . 'amcharts.js', 'lang_additional' => array('AMCHARTS_PATH' => $amChartsPath, 'AMCHARTS_IMAGES_PATH' => $amChartsPath . 'images/'), 'skip_core' => true), 'amcharts_funnel' => array('js' => $amChartsPath . 'funnel.js', 'rel' => array('amcharts'), 'skip_core' => true), 'amcharts_gauge' => array('js' => $amChartsPath . 'gauge.js', 'rel' => array('amcharts'), 'skip_core' => true), 'amcharts_pie' => array('js' => $amChartsPath . 'pie.js', 'rel' => array('amcharts'), 'skip_core' => true), 'amcharts_radar' => array('js' => $amChartsPath . 'radar.js', 'rel' => array('amcharts'), 'skip_core' => true), 'amcharts_serial' => array('js' => $amChartsPath . 'serial.js', 'rel' => array('amcharts'), 'skip_core' => true), 'amcharts_xy' => array('js' => $amChartsPath . 'xy.js', 'rel' => array('amcharts'), 'skip_core' => true), 'helper' => array('js' => '/bitrix/js/main/helper/helper.js', 'css' => '/bitrix/js/main/helper/css/helper.css')); foreach ($arJSCoreConfig as $ext => $arExt) { CJSCore::RegisterExt($ext, $arExt); }