'']; $value['VALUE'] ??= null; if (!is_string($value['VALUE'])) { $value['VALUE'] = ''; } if ($value['VALUE'] !== '') { $arCoords = explode(self::VALUE_SEPARATOR, $value['VALUE'], 2); $lat = (float)($arCoords[0] ?? 0); $lng = (float)($arCoords[1] ?? 0); if ($lat && $lng) { $arResult['VALUE'] = $lat . self::VALUE_SEPARATOR . $lng; } } return $arResult; } public static function ConvertToDB($arProperty, $value) { $arResult = ['VALUE' => '']; $value['VALUE'] ??= null; if (!is_string($value['VALUE'])) { $value['VALUE'] = ''; } if ($value['VALUE'] !== '') { $arCoords = explode(self::VALUE_SEPARATOR, $value['VALUE'], 2); $lat = (float)($arCoords[0] ?? 0); $lng = (float)($arCoords[1] ?? 0); if ($lat && $lng) { $arResult['VALUE'] = $lat . self::VALUE_SEPARATOR . $lng; } } return $arResult; } public static function _GetMapKey($map_type, &$strDomain) { $MAP_KEY = ''; $strMapKeys = COPtion::GetOptionString('fileman', 'map_'.$map_type.'_keys'); $strDomain = $_SERVER['HTTP_HOST']; $wwwPos = mb_strpos($strDomain, 'www.'); if ($wwwPos === 0) $strDomain = mb_substr($strDomain, 4); if ($strMapKeys) { $arMapKeys = unserialize($strMapKeys, ['allowed_classes' => false]); if (array_key_exists($strDomain, $arMapKeys)) $MAP_KEY = $arMapKeys[$strDomain]; } return $MAP_KEY; } } class CIBlockPropertyMapGoogle extends CIBlockPropertyMapInterface { public static function GetUserTypeDescription() { return array( "PROPERTY_TYPE" => "S", "USER_TYPE" => "map_google", "DESCRIPTION" => GetMessage("IBLOCK_PROP_MAP_GOOGLE"), "GetPropertyFieldHtml" => array(__CLASS__,"GetPropertyFieldHtml"), "GetPublicViewHTML" => array(__CLASS__,"GetPublicViewHTML"), "ConvertToDB" => array(__CLASS__,"ConvertToDB"), "ConvertFromDB" => array(__CLASS__,"ConvertFromDB"), "GetSettingsHTML" => array(__CLASS__, "GetSettingsHTML"), "PrepareSettings" => array(__CLASS__, "PrepareSettings"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), 'GetUIEntityEditorPropertyEditHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyEditHtml'), 'GetUIEntityEditorPropertyViewHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyViewHtml'), ); } public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields) { $arPropertyFields = array( 'HIDE' => array('ROW_COUNT', 'COL_COUNT', 'SMART_FILTER', 'FILTRABLE', 'SEARCHABLE', 'WITH_DESCRIPTION'), 'SET' => array('SMART_FILTER' => 'N', 'FILTRABLE' => 'N', 'SEARCHABLE' => 'N') ); $settings = \CIBlockPropertyMapGoogle::PrepareSettings($arProperty); $settings = $settings['USER_TYPE_SETTINGS']; $apiKey = isset($settings['API_KEY']) ? htmlspecialcharsbx($settings['API_KEY']) : ''; return ' '.GetMessage('IBLOCK_PROP_G_MAP_API_KEY').': '; } public static function PrepareSettings($arProperty) { $arProperty['SMART_FILTER'] = 'N'; $arProperty['FILTRABLE'] = 'N'; $arProperty['SEARCHABLE'] = 'N'; $arProperty['USER_TYPE_SETTINGS'] = array( 'API_KEY' => isset($arProperty['USER_TYPE_SETTINGS']['API_KEY']) ? $arProperty['USER_TYPE_SETTINGS']['API_KEY'] : '' ); return $arProperty; } public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { global $APPLICATION; static $googleMapLastNumber = 0; static $googleMapID = ''; if (($arProperty['MULTIPLE'] == 'Y' && $googleMapID !== $arProperty['ID']) || $arProperty['MULTIPLE'] == 'N') $googleMapLastNumber = 0; if ($arProperty['MULTIPLE'] == 'Y') $googleMapID = $arProperty['ID']; $apiKey = isset($arProperty['USER_TYPE_SETTINGS']['API_KEY']) ? $arProperty['USER_TYPE_SETTINGS']['API_KEY'] : ''; $value['VALUE'] ??= null; if ($strHTMLControlName["MODE"] != "FORM_FILL") return ''; if ($value['VALUE'] <> '') { list($POINT_LAT, $POINT_LON) = explode(',', $value['VALUE'], 2); $bHasValue = true; } else { $POINT_LAT = doubleval(GetMessage('IBLOCK_PROP_MAP_GOOGLE_INIT_LAT')); $POINT_LON = doubleval(GetMessage('IBLOCK_PROP_MAP_GOOGLE_INIT_LON')); $bHasValue = false; } ob_start(); if ($arProperty['MULTIPLE'] == 'Y' && isset($GLOBALS['GOOGLE_MAP_PROPERTY'][$arProperty['ID']])) { // property is multimple and map is already showed $MAP_ID = $GLOBALS['GOOGLE_MAP_PROPERTY'][$arProperty['ID']]; } else { $MAP_ID = 'map_google_'.$arProperty['CODE'].$arProperty['ID']; $GLOBALS['GOOGLE_MAP_PROPERTY'][$arProperty['ID']] = $MAP_ID; ?> IncludeComponent( 'bitrix:map.google.system', '', array( 'INIT_MAP_TYPE' => 'NORMAL', 'INIT_MAP_LON' => $POINT_LON ? $POINT_LON : 37.64, 'INIT_MAP_LAT' => $POINT_LAT ? $POINT_LAT : 55.76, 'INIT_MAP_SCALE' => 10, 'OPTIONS' => array('ENABLE_SCROLL_ZOOM', 'ENABLE_DRAGGING'), 'CONTROLS' => array('LARGE_MAP_CONTROL', 'HTYPECONTROL', 'MINIMAP', 'SCALELINE', 'SMALL_ZOOM_CONTROL'), 'MAP_WIDTH' => '95%', 'MAP_HEIGHT' => 400, 'MAP_ID' => $MAP_ID, 'DEV_MODE' => 'Y', 'API_KEY' => $apiKey ), false, array('HIDE_ICONS' => 'Y') ); //http://jabber.bx/view.php?id=17908 ?>
,
" value="" /> '') { $value = parent::ConvertFromDB($arProperty, $value); if (($arParams['MODE'] ?? null) == 'CSV_EXPORT') { $s = $value["VALUE"]; } else { $googleMapLastNumber = 0; $apiKey = isset($arProperty['USER_TYPE_SETTINGS']['API_KEY']) ? $arProperty['USER_TYPE_SETTINGS']['API_KEY'] : ''; $arCoords = explode(',', $value['VALUE']); ob_start(); $GLOBALS['APPLICATION']->IncludeComponent( 'bitrix:map.google.view', '', array( 'MAP_DATA' => serialize(array( 'google_lat' => $arCoords[0], 'google_lon' => $arCoords[1], 'PLACEMARKS' => array( array( 'LON' => $arCoords[1], 'LAT' => $arCoords[0], ), ), )), 'MAP_WIDTH' => $arParams['WIDTH'] ?? null, 'MAP_HEIGHT' => $arParams['HEIGHT'] ?? null, 'MAP_ID' => 'MAP_GOOGLE_VIEW_'.$arProperty['IBLOCK_ID'].'_'.$arProperty['ID'].'__n'.$googleMapLastNumber.'_', 'DEV_MODE' => 'Y', 'API_KEY' => $apiKey ), false, array('HIDE_ICONS' => 'Y') ); $s .= ob_get_contents(); ob_end_clean(); } } return $s; } public static function GetUIEntityEditorProperty($settings, $value) { return [ 'type' => 'custom' ]; } public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', 'MODE' => 'FORM_FILL', ]; if ($settings['MULTIPLE'] === 'Y') { $value = []; if (is_array($params['VALUE'])) { foreach ($params['VALUE'] as $element) { $value[] = ['VALUE' => $element]; } } } else { $value = [ 'VALUE' => $params['VALUE'] ?? '' ]; } return static::GetPropertyFieldHtml($settings, $value, $paramsHTMLControl); } public static function GetUIEntityEditorPropertyViewHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', ]; if (isset($params['WIDTH'])) { $paramsHTMLControl['WIDTH'] = $params['WIDTH']; } if (isset($params['HEIGHT'])) { $paramsHTMLControl['HEIGHT'] = $params['HEIGHT']; } if ($settings['MULTIPLE'] === 'Y') { $multipleResult = ''; if (is_array($params['VALUE'])) { foreach ($params['VALUE'] as $element) { $value = ['VALUE' => $element]; $multipleResult .= static::GetPublicViewHTML($settings, $value, $paramsHTMLControl) . '
'; } } return $multipleResult; } else { $value = [ 'VALUE' => $params['VALUE'] ?? '' ]; } return static::GetPublicViewHTML($settings, $value, $paramsHTMLControl); } } class CIBlockPropertyMapYandex extends CIBlockPropertyMapInterface { public static function GetUserTypeDescription() { // This property should be disabled in Ukraine if (Loader::includeModule('bitrix24')) { $licensePrefix = \CBitrix24::getLicensePrefix(); if ($licensePrefix === 'ua' || $licensePrefix === 'ur') { return []; } } elseif (Loader::includeModule('intranet')) { $portalZone = \CIntranetUtils::getPortalZone(); if ($portalZone === 'ua') { return []; } } else { $languageIterator = \Bitrix\Main\Localization\LanguageTable::getList([ 'select' => ['ID'], 'filter' => ['=ID' => 'ru', '=ACTIVE' => 'Y'] ]); $row = $languageIterator->fetch(); unset($languageIterator); if (!empty($row)) { $languageIterator = \Bitrix\Main\Localization\LanguageTable::getList([ 'select' => ['ID'], 'filter' => [ '=ID' => 'ua', '=ACTIVE' => 'Y', ], 'limit' => 1 ]); $row = $languageIterator->fetch(); unset($languageIterator); if (!empty($row)) { return []; } } } return [ "PROPERTY_TYPE" => "S", "USER_TYPE" => "map_yandex", "DESCRIPTION" => GetMessage("IBLOCK_PROP_MAP_YANDEX"), "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"), "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"), "GetPublicEditHTML" => array(__CLASS__, "GetPublicEditHTML"), "ConvertToDB" => array(__CLASS__, "ConvertToDB"), "ConvertFromDB" => array(__CLASS__, "ConvertFromDB"), "GetSettingsHTML" => array(__CLASS__, "GetSettingsHTML"), "PrepareSettings" => array(__CLASS__, "PrepareSettings"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), 'GetUIEntityEditorPropertyEditHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyEditHtml'), 'GetUIEntityEditorPropertyViewHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyViewHtml'), ]; } public static function _DrawKeyInputControl($MAP_ID, $strDomain) { echo BeginNote(); ?>


array('ROW_COUNT', 'COL_COUNT', 'SMART_FILTER', 'FILTRABLE', 'SEARCHABLE', 'WITH_DESCRIPTION'), 'SET' => array('SMART_FILTER' => 'N', 'FILTRABLE' => 'N', 'SEARCHABLE' => 'N') ); return ''; } public static function PrepareSettings($arProperty) { $arProperty['SMART_FILTER'] = 'N'; $arProperty['FILTRABLE'] = 'N'; $arProperty['SEARCHABLE'] = 'N'; $arProperty['USER_TYPE_SETTINGS'] = array(); return $arProperty; } public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { global $APPLICATION; static $yandexMapLastNumber = 0; static $yandexMapID = ''; if (($arProperty['MULTIPLE'] == 'Y' && $yandexMapID !== $arProperty['ID']) || $arProperty['MULTIPLE'] == 'N') $yandexMapLastNumber = 0; if ($arProperty['MULTIPLE'] == 'Y') $yandexMapID = $arProperty['ID']; // TODO: remove this later to use in property default value setting $value['VALUE'] ??= null; if ($strHTMLControlName["MODE"] != "FORM_FILL") return ''; if ($value['VALUE'] <> '') { list($POINT_LAT, $POINT_LON) = explode(',', $value['VALUE'], 2); $bHasValue = true; } else { $POINT_LAT = doubleval(GetMessage('IBLOCK_PROP_MAP_YANDEX_INIT_LAT')); $POINT_LON = doubleval(GetMessage('IBLOCK_PROP_MAP_YANDEX_INIT_LON')); $bHasValue = false; } ob_start(); if ($arProperty['MULTIPLE'] == 'Y' && isset($GLOBALS['YANDEX_MAP_PROPERTY'][$arProperty['ID']])) { // property is multimple and map is already showed $MAP_ID = $GLOBALS['YANDEX_MAP_PROPERTY'][$arProperty['ID']]; } else { $MAP_ID = 'map_yandex_'.$arProperty['CODE'].'_'.$arProperty['ID']; $GLOBALS['YANDEX_MAP_PROPERTY'][$arProperty['ID']] = $MAP_ID; ?> IncludeComponent( 'bitrix:map.yandex.system', '', array( 'INIT_MAP_TYPE' => 'MAP', 'INIT_MAP_LON' => $POINT_LON ? $POINT_LON : 37.64, 'INIT_MAP_LAT' => $POINT_LAT ? $POINT_LAT : 55.76, 'INIT_MAP_SCALE' => 10, 'OPTIONS' => array('ENABLE_SCROLL_ZOOM', 'ENABLE_DRAGGING'), 'CONTROLS' => array('ZOOM', 'MINIMAP', 'TYPECONTROL', 'SCALELINE'), 'MAP_WIDTH' => '95%', 'MAP_HEIGHT' => 400, 'MAP_ID' => $MAP_ID, 'DEV_MODE' => 'Y', //'ONMAPREADY' => 'BXWaitForMap_'.$MAP_ID ), false, array('HIDE_ICONS' => 'Y') ); //http://jabber.bx/view.php?id=17908 ?>
,
" value="" /> '') { [$POINT_LAT, $POINT_LON] = explode(',', $value['VALUE'], 2); $bHasValue = true; } else { $POINT_LAT = doubleval(GetMessage('IBLOCK_PROP_MAP_YANDEX_INIT_LAT')); $POINT_LON = doubleval(GetMessage('IBLOCK_PROP_MAP_YANDEX_INIT_LON')); $bHasValue = false; } ob_start();?>
IncludeComponent( 'bitrix:map.yandex.system', '', array( 'INIT_MAP_TYPE' => 'MAP', 'INIT_MAP_LON' => $POINT_LON ? $POINT_LON : 37.64, 'INIT_MAP_LAT' => $POINT_LAT ? $POINT_LAT : 55.76, 'INIT_MAP_SCALE' => 10, 'OPTIONS' => array('ENABLE_SCROLL_ZOOM', 'ENABLE_DRAGGING'), 'CONTROLS' => array('ZOOM', 'MINIMAP', 'TYPECONTROL', 'SCALELINE'), 'MAP_WIDTH' => 450, 'MAP_HEIGHT' => 400, 'MAP_ID' => $MAP_ID, 'DEV_MODE' => 'Y' ), false, array('HIDE_ICONS' => 'Y') ); ?>
,
" value="" />
'') { $coordValue = parent::ConvertFromDB($arProperty, $value); $s = $coordValue["VALUE"]; } } else { if($value["VALUE"] <> '') { $value = parent::ConvertFromDB($arProperty, $value); $arCoords = explode(',', $value['VALUE']); ob_start(); $GLOBALS['APPLICATION']->IncludeComponent( 'bitrix:map.yandex.view', '', array( 'MAP_DATA' => serialize(array( 'yandex_lat' => $arCoords[0], 'yandex_lon' => $arCoords[1], 'PLACEMARKS' => array( array( 'LON' => $arCoords[1], 'LAT' => $arCoords[0], ), ), )), 'MAP_ID' => 'MAP_YANDEX_VIEW_'.$arProperty['IBLOCK_ID'].'_'.$arProperty['ID'].'_'.rand(), 'DEV_MODE' => 'Y', ), false, array('HIDE_ICONS' => 'Y') ); $s = ob_get_contents(); ob_end_clean(); } } return $s; } public static function GetUIEntityEditorProperty($settings, $value) { return [ 'type' => 'custom' ]; } public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', 'MODE' => 'FORM_FILL' ]; if ($settings['MULTIPLE'] === 'Y') { $value = []; if (is_array($params['VALUE'])) { foreach ($params['VALUE'] as $element) { $value[] = ['VALUE' => $element]; } } } else { $value = [ 'VALUE' => $params['VALUE'] ?? '' ]; } return static::GetPublicEditHTML($settings, $value, $paramsHTMLControl); } public static function GetUIEntityEditorPropertyViewHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', ]; if ($settings['MULTIPLE'] === 'Y') { $multipleResult = ''; if (is_array($params['VALUE'])) { foreach ($params['VALUE'] as $element) { $value = ['VALUE' => $element]; $multipleResult .= static::GetPublicViewHTML($settings, $value, $paramsHTMLControl) . '
'; } } return $multipleResult; } else { $value = [ 'VALUE' => $params['VALUE'] ?? '' ]; } return static::GetPublicViewHTML($settings, $value, $paramsHTMLControl); } } //AddEventHandler("iblock", "OnIBlockPropertyBuildList", array("CIBlockPropertyFileMan", "GetUserTypeDescription")); //RegisterModuleDependences('iblock', 'OnIBlockPropertyBuildList', 'fileman', 'CIBlockPropertyMapGoogle', 'GetUserTypeDescription'); //RegisterModuleDependences('iblock', 'OnIBlockPropertyBuildList', 'fileman', 'CIBlockPropertyMapYandex', 'GetUserTypeDescription'); // ########################## // ####### VIDEO PROPERTIES ###### // ########################## // ### Base class ### class CVideoProperty { public static function BasePrepareSettings($arProperty, $key = "SETTINGS") { $arSet = array( "BUFFER_LENGTH" => "10", "CONTROLBAR" => "bottom", "AUTOSTART" => "N", "VOLUME" => "90", "SKIN" => "", "FLASHVARS" => "", "WMODE_FLV" => "transparent", "BGCOLOR" => "FFFFFF", "COLOR" => "000000", "OVER_COLOR" => "000000", "SCREEN_COLOR" => "000000", "SILVERVARS" => "", "WMODE_WMV" => "windowless", "WIDTH" => "400", "HEIGHT" => "300", ); if(is_array($arProperty[$key])) { if (isset($arProperty[$key]["BUFFER_LENGTH"])) $arSet["BUFFER_LENGTH"] = intval($arProperty[$key]["BUFFER_LENGTH"]); if (isset($arProperty[$key]["CONTROLBAR"])) $arSet["CONTROLBAR"] = $arProperty[$key]["CONTROLBAR"]; if (isset($arProperty[$key]["AUTOSTART"])) $arSet["AUTOSTART"] = $arProperty[$key]["AUTOSTART"] == "Y" ? "Y" : "N"; if (isset($arProperty[$key]["VOLUME"])) $arSet["VOLUME"] = intval($arProperty[$key]["VOLUME"]); if (isset($arProperty[$key]["SKIN"])) $arSet["SKIN"] = $arProperty[$key]["SKIN"]; if (isset($arProperty[$key]["FLASHVARS"])) $arSet["FLASHVARS"] = $arProperty[$key]["FLASHVARS"]; if (isset($arProperty[$key]["WMODE_FLV"])) $arSet["WMODE_FLV"] = $arProperty[$key]["WMODE_FLV"]; if (isset($arProperty[$key]["BGCOLOR"])) $arSet["BGCOLOR"] = $arProperty[$key]["BGCOLOR"]; if (isset($arProperty[$key]["COLOR"])) $arSet["COLOR"] = $arProperty[$key]["COLOR"]; if (isset($arProperty[$key]["OVER_COLOR"])) $arSet["OVER_COLOR"] = $arProperty[$key]["OVER_COLOR"]; if (isset($arProperty[$key]["SCREEN_COLOR"])) $arSet["SCREEN_COLOR"] = $arProperty[$key]["SCREEN_COLOR"]; if (isset($arProperty[$key]["SILVERVARS"])) $arSet["SILVERVARS"] = $arProperty[$key]["SILVERVARS"]; if (isset($arProperty[$key]["WMODE_WMV"])) $arSet["WMODE_WMV"] = $arProperty[$key]["WMODE_WMV"]; if (isset($arProperty[$key]["WIDTH"])) $arSet["WIDTH"] = $arProperty[$key]["WIDTH"]; if (isset($arProperty[$key]["HEIGHT"])) $arSet["HEIGHT"] = $arProperty[$key]["HEIGHT"]; } return $arSet; } public static function BaseGetSettingsHTML($name, $val) { $arSkins = GetSkinsEx(CUserTypeVideo::GetSkinPath()); $name = htmlspecialcharsbx($name); ob_start(); ?> : "/> : : /> : "/> "/> x "/> : " /> : : : "/> : "/> : "/> : "/ > : :
''):?> ''):?> ''){ echo 'style="display: none;"'; }?>>
IncludeComponent( "bitrix:player", "", array( "PLAYER_TYPE" => "auto", "PATH" => $path, "WIDTH" => $val['width'], "HEIGHT" => $val['height'], "FILE_TITLE" => $val['title'], "FILE_DURATION" => intval($val['duration']), "FILE_AUTHOR" => $val['author'], "FILE_DATE" => $val['date'], "FILE_DESCRIPTION" => $val['desc'], "SKIN_PATH" => CVideoProperty::GetSkinPath(), "SKIN" => $set["SKIN"], "CONTROLBAR" => $set["CONTROLBAR"], "WMODE" => $set["WMODE_FLV"], "WMODE_WMV" => $set["WMODE_WMV"], "SHOW_CONTROLS" => $set["CONTROLBAR"] != 'none' ? "Y" : "N", "CONTROLS_BGCOLOR" => $set["CONTROLS_BGCOLOR"], "CONTROLS_COLOR" => $set["CONTROLS_COLOR"], "CONTROLS_OVER_COLOR" => $set["CONTROLS_OVER_COLOR"], "SCREEN_COLOR" => $set["SCREEN_COLOR"], "AUTOSTART" => $set["AUTOSTART"], "VOLUME" => $set["VOLUME"], "ADDITIONAL_FLASHVARS" => $set["FLASHVARS"], "BUFFER_LENGTH" => $set["BUFFER_LENGTH"], "ADDITIONAL_WMVVARS" => $set["SILVERVARS"], "ALLOW_SWF" => "N", "LOGO_POSITION" => "none" ), false, array('HIDE_ICONS' => 'Y') ); ?>
:

'' ? 'IBLOCK_PROP_VIDEO_PATH_NEW' : 'IBLOCK_PROP_VIDEO_PATH')?>:

:
: x
:
:
:
:
:
""); if (!is_array($value)) $value = array(); //In case of DB value just serialize it if (implode("|", array_keys($value)) === 'path|width|height|title|duration|author|date|desc') return serialize($value); if ($value["B_NEW_FILE"] != "N") // New video or replacing old { if ($value["CUR_PATH"] <> '' && $value["DEL_CUR_FILE"] == "Y" && CIBlockPropertyVideo::CheckFileInUploadDir($value["CUR_PATH"])) { // del current file $cur_path_ = $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $value["CUR_PATH"]); $flTmp = $io->GetFile($cur_path_); $flSzTmp = $flTmp->GetFileSize(); if($io->Delete($cur_path_)) { // Quota if(COption::GetOptionInt("main", "disk_space") > 0) CDiskQuota::updateDiskQuota("file", $flSzTmp, "delete"); } } // Get video if ($value["PATH"] <> '' ) { $arRes["path"] = $value["PATH"]; } else if (isset($value["FILE"]) && $value["FILE"]["tmp_name"] <> '') { $pathToDir = CIBlockPropertyVideo::GetUploadDirPath(); if (!$io->DirectoryExists($_SERVER["DOCUMENT_ROOT"].$pathToDir)) CFileMan::CreateDir($pathToDir); // 1. Convert name $name = preg_replace("/[^a-zA-Z0-9_:\.]/is", "_", $value["FILE"]["name"]); $baseNamePart = mb_substr($name, 0, mb_strrpos($name, '.')); $ext = GetFileExtension($name); if($ext <> '' && !HasScriptExtension($name) && mb_substr($name, 0, 1) != ".") { $ind = 0; // 2. Check if file already exists while($io->FileExists($_SERVER["DOCUMENT_ROOT"].Rel2Abs($pathToDir, $name))) $name = $baseNamePart."_(".++$ind.").".$ext; // 3. Rename $pathto = Rel2Abs($pathToDir, $name); if (is_uploaded_file($value["FILE"]["tmp_name"]) && $io->Copy($value["FILE"]["tmp_name"], $_SERVER["DOCUMENT_ROOT"].$pathto)) { $arRes["path"] = Rel2Abs("/", $pathto); // Quota if(COption::GetOptionInt("main", "disk_space") > 0) CDiskQuota::updateDiskQuota("file", $value["FILE"]["size"], "add"); } } } } elseif ($value["CUR_PATH"] <> '') // save current file { if(preg_match("/^(http|https):\\/\\//", $value["CUR_PATH"])) $arRes["path"] = $value["CUR_PATH"]; else $arRes["path"] = Rel2Abs("/", $value["CUR_PATH"]); } // Width & height $arRes["width"] = intval($value["WIDTH"]); $arRes["height"] = intval($value["HEIGHT"]); if ($arRes["width"] < 0) $arRes["width"] = 400; if ($arRes["height"] < 0) $arRes["height"] = 300; // Video info $arRes["title"] = $value["TITLE"]; $arRes["duration"] = $value["DURATION"]; $arRes["author"] = $value["AUTHOR"]; $arRes["date"] = $value["DATE"]; $arRes["desc"] = $value["DESC"]; $strRes = serialize($arRes); if ($arRes["path"] == "" && $arRes["title"] == "" && $arRes["author"] == "") return ""; return $strRes; } public static function BaseConvertFromDB($val = "") { if (!is_array($val) && $val <> '') { $val = unserialize($val, ['allowed_classes' => false]); } return $val ? $val : array(); } public static function BaseCheckFields($val) { if (!is_array($val)) return []; $errors = []; if ($val["B_NEW_FILE"] != "N" && isset($val["FILE"]) && $val['DEL_CUR_FILE'] != 'Y') { if(!empty($val["FILE"]["error"])) // !UPLOAD_ERR_OK { $fileName = isset($val["FILE"]["name"]) ? $val["FILE"]["name"] : ''; if($val["FILE"]["error"] === UPLOAD_ERR_INI_SIZE || $val["FILE"]["error"] === UPLOAD_ERR_FORM_SIZE) { $errors[] = GetMessage("IBLOCK_PROP_VIDEO_SIZE_ERROR", Array('#FILE_NAME#' => $fileName)); } elseif($val["FILE"]["error"] !== UPLOAD_ERR_NO_FILE) { $errors[] = GetMessage("IBLOCK_PROP_VIDEO_UPLOAD_ERROR"); } } if($val["FILE"]["tmp_name"] <> '') { $name = $val["FILE"]["name"]; $name = preg_replace("/[^a-zA-Z0-9_:\.]/is", "_", $name); $ext = GetFileExtension($name); if($ext == '' || HasScriptExtension($name) || mb_substr($name, 0, 1) == ".") { $errors[] = GetMessage("IBLOCK_PROP_VIDEO_INCORRECT_EXT", array("#EXT#" => mb_strtoupper($ext))); } elseif (!is_uploaded_file($val["FILE"]["tmp_name"])) { $errors[] = GetMessage("IBLOCK_PROP_VIDEO_UPLOAD_ERROR"); } else { $quota = new CDiskQuota(); if (!$quota->checkDiskQuota(array("FILE_SIZE" => $val["FILE"]["size"]))) { $errors[] = GetMessage("IBLOCK_PROP_VIDEO_QUOTE_ERROR"); } } } } return $errors; } public static function BaseGetAdminListViewHTML($val) { if (!is_array($val) || $val["path"] == '') return ''; return ''.GetMessage("IBLOCK_PROP_VIDEO").' ['.htmlspecialcharsex($val["path"]).']'; } public static function BaseGetPublicHTML($set, $val) { if ($val["path"] == '') return ''; global $APPLICATION; ob_start(); $title = $val['title'] <> '' ? $val['title'] : ""; ?>
IncludeComponent( "bitrix:player", "", array( "PLAYER_TYPE" => "auto", "PATH" => $val["path"], "WIDTH" => $val['width'], "HEIGHT" => $val['height'], "FILE_TITLE" => $val['title'], "FILE_DURATION" => intval($val['duration']), "FILE_AUTHOR" => $val['author'], "FILE_DATE" => $val['date'], "FILE_DESCRIPTION" => $val['desc'], "SKIN_PATH" => CIBlockPropertyVideo::GetSkinPath(), "SKIN" => $set["SKIN"], "CONTROLBAR" => $set["CONTROLBAR"], "WMODE" => $set["WMODE_FLV"], "WMODE_WMV" => $set["WMODE_WMV"], "SHOW_CONTROLS" => $set["CONTROLBAR"] != 'none' ? "Y" : "N", "CONTROLS_BGCOLOR" => $set["CONTROLS_BGCOLOR"], "CONTROLS_COLOR" => $set["CONTROLS_COLOR"], "CONTROLS_OVER_COLOR" => $set["CONTROLS_OVER_COLOR"], "SCREEN_COLOR" => $set["SCREEN_COLOR"], "AUTOSTART" => $set["AUTOSTART"], "VOLUME" => $set["VOLUME"], "ADDITIONAL_FLASHVARS" => $set["FLASHVARS"], "BUFFER_LENGTH" => $set["BUFFER_LENGTH"], "ADDITIONAL_WMVVARS" => $set["SILVERVARS"], "ALLOW_SWF" => "N", "LOGO_POSITION" => "none" ), $APPLICATION->getCurrentIncludedComponent(), array('HIDE_ICONS' => 'Y') ); ?>
false]); } if(!is_array($val)) { return ''; } $str = ''; if (!empty($val['path'])) { if (!empty($val['title'])) $str .= $val['title']." \n"; if (!empty($val['author'])) $str .= $val['author']." \n"; if (!empty($val['desc'])) $str .= $val['desc']." \n"; } return $str; } public static function CheckFileInUploadDir($path = '') { $pathToDir = CVideoProperty::GetUploadDirPath(); return mb_substr($path, 0, mb_strlen($pathToDir)) == $pathToDir; } public static function GetUploadDirPath() { return "/upload/video/"; } public static function GetSkinPath() { return "/bitrix/components/bitrix/player/mediaplayer/skins"; } } if (!function_exists('getSkinsEx')) { function getSkinsEx($path) { $basePath = $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $path); $arSkins = Array(); if (!is_dir($basePath)) // Not valid folder return $arSkins; $arSkins = getSkinsFromDir($path); $handle = @opendir($basePath); while(false !== ($skinDir = @readdir($handle))) { if(!is_dir($basePath.'/'.$skinDir) || $skinDir == "." || $skinDir == ".." ) continue; $arSkins = array_merge($arSkins,getSkinsFromDir($path.'/'.$skinDir)); } return $arSkins; } function getSkinsFromDir($path) //http://jabber.bx/view.php?id=28856 { $basePath = $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $path); $arSkinExt = array('swf', 'zip', 'css'); $arPreviewExt = array('png', 'gif', 'jpg', 'jpeg'); $prExtCnt = count($arPreviewExt); $arSkins = Array(); $handle = @opendir($basePath); while(false !== ($f = @readdir($handle))) { if($f == "." || $f == ".." || $f == ".htaccess" || !is_file($basePath.'/'.$f)) continue; $ext = mb_strtolower(GetFileExtension($f)); if (in_array($ext, $arSkinExt)) // We find skin { $name = mb_substr($f, 0, -mb_strlen($ext) - 1); // name of the skin if ($name == '') continue; if (mb_strpos($name, '.min') !== false) continue; $Skin = array('filename' => $f); $Skin['name'] = mb_strtoupper(mb_substr($name, 0, 1)).mb_strtolower(mb_substr($name, 1)); $Skin['the_path'] = $path; // Try to find preview for ($i = 0; $i < $prExtCnt; $i++) { if (file_exists($basePath.'/'.$name.'.'.$arPreviewExt[$i])) { $Skin['preview'] = $name.'.'.$arPreviewExt[$i]; break; } } $arSkins[] = $Skin; } } return $arSkins; } } // ### Iblock property ### class CIBlockPropertyVideo extends CVideoProperty { public static function GetUserTypeDescription() { if (Loader::includeModule("bitrix24")) { return []; } return array( "PROPERTY_TYPE" => "S", "USER_TYPE" => "video", "DESCRIPTION" => GetMessage("IBLOCK_PROP_VIDEO"), "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"), "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"), "ConvertToDB" => array(__CLASS__, "ConvertToDB"), "ConvertFromDB" => array(__CLASS__, "ConvertFromDB"), "CheckFields" => array(__CLASS__, "CheckFields"), "GetSearchContent" => array(__CLASS__, "GetSearchContent"), "GetSettingsHTML" => array(__CLASS__, "GetSettingsHTML"), "PrepareSettings" => array(__CLASS__, "PrepareSettings"), "GetAdminListViewHTML" => array(__CLASS__, "GetAdminListViewHTML"), "GetLength" => array(__CLASS__, "GetLength"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), 'GetUIEntityEditorPropertyEditHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyEditHtml'), 'GetUIEntityEditorPropertyViewHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyViewHtml'), ); } public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { $dbVal = CUserTypeVideo::BaseConvertToDB($value["VALUE"]); $val = CUserTypeVideo::BaseConvertFromDB($dbVal); return CIBlockPropertyVideo::BaseGetEditFormHTML($arProperty["USER_TYPE_SETTINGS"], $val, $strHTMLControlName["VALUE"], $strHTMLControlName["MODE"]); } public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName) { return CIBlockPropertyVideo::BaseGetAdminListViewHTML($value["VALUE"]); } public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName) { $pathExist = (isset($value['VALUE']['path']) && $value['VALUE']['path'] != ''); if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'CSV_EXPORT') return ($pathExist ? $value['VALUE']['path'] : ''); elseif (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'SIMPLE_TEXT') return ($pathExist ? $value['VALUE']['path'] : ''); else return CIBlockPropertyVideo::BaseGetPublicHTML($arProperty["USER_TYPE_SETTINGS"], $value["VALUE"]); } public static function ConvertFromDB($arProperty, $value) { $value['VALUE'] = CIBlockPropertyVideo::BaseConvertFromDB($value['VALUE'] ?? null) ?: ''; return $value; } public static function ConvertToDB($arProperty, $value) { return ["VALUE" => CIBlockPropertyVideo::BaseConvertToDB($value["VALUE"])]; } public static function CheckFields($arProperty, $value) { return CIBlockPropertyVideo::BaseCheckFields($value["VALUE"]); } public static function GetLength($arProperty, $value) { if( is_array($value) && array_key_exists("VALUE", $value) && is_array($value["VALUE"]) ) { if( array_key_exists("PATH", $value["VALUE"]) && trim($value["VALUE"]["PATH"]) <> '' ) return 1; if( array_key_exists("FILE", $value["VALUE"]) && is_array($value["VALUE"]["FILE"]) && $value["VALUE"]["FILE"]["error"] === 0 ) return 1; if( array_key_exists("CUR_PATH", $value["VALUE"]) && mb_strlen(trim($value["VALUE"]["CUR_PATH"])) && !($value["VALUE"]["B_NEW_FILE"] === "Y" && $value["VALUE"]["DEL_CUR_FILE"] === "Y") ) return 1; } return 0; } public static function PrepareSettings($arProperty) { $arResult = CUserTypeVideo::BasePrepareSettings($arProperty, "USER_TYPE_SETTINGS"); $arFields['SMART_FILTER'] = 'N'; $arFields['FILTRABLE'] = 'N'; $arFields['USER_TYPE_SETTINGS'] = $arResult; return $arFields; } public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields) { $arPropertyFields = array( "HIDE" => array("FILTRABLE", "ROW_COUNT", "COL_COUNT", "DEFAULT_VALUE", "SMART_FILTER"), //will hide the field "SET" => array("FILTRABLE" => "N", "SMART_FILTER" => "N"), //if set then hidden field will get this value "USER_TYPE_SETTINGS_TITLE" => GetMessage("IBLOCK_PROP_VIDEO_SET_NAME") ); $arSettings = CIBlockPropertyVideo::PrepareSettings($arProperty); if (isset($arSettings['USER_TYPE_SETTINGS'])) $arSettings = $arSettings['USER_TYPE_SETTINGS']; return CIBlockPropertyVideo::BaseGetSettingsHTML($strHTMLControlName["NAME"], $arSettings); } public static function GetSearchContent($arProperty, $value, $strHTMLControlName) { return CIBlockPropertyVideo::BaseOnSearchContent($value["VALUE"]); } public static function GetUIEntityEditorProperty($settings, $value) { return [ 'type' => 'custom' ]; } public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; if ($settings['MULTIPLE'] === 'Y') { if (is_array($params['VALUE'])) { $editor = ''; for($index = 0; $index < $params['SETTINGS']['MULTIPLE_CNT']; $index++) { $value = [ 'VALUE' => $params['VALUE'][$index] ?? [] ]; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] . '[' . $index . ']' ?? '[' . $index . ']', ]; $editor .= static::GetPropertyFieldHtml($settings, $value, $paramsHTMLControl); } return $editor; } } $value = [ 'VALUE' => $params['VALUE'] ?? [] ]; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', ]; return static::GetPropertyFieldHtml($settings, $value, $paramsHTMLControl); } public static function GetUIEntityEditorPropertyViewHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; $paramsHTMLControl = [ 'VALUE' => $params['FIELD_NAME'] ?? '', ]; if ($settings['MULTIPLE'] === 'Y') { $multipleResult = ''; if (is_array($params['VALUE'])) { foreach ($params['VALUE'] as $element) { $value = [ 'VALUE' => empty($element) ? [] : $element ]; $multipleResult .= static::GetPublicViewHTML($settings, $value, $paramsHTMLControl) . '
'; } } return $multipleResult; } else { $value = [ 'VALUE' => empty($params['VALUE']) ? [] : $params['VALUE'] ]; } return static::GetPublicViewHTML($settings, $value, $paramsHTMLControl); } } // ### UserType for main module ### class CUserTypeVideo extends CVideoProperty { public static function GetUserTypeDescription() { return array( "USER_TYPE_ID" => "video", "CLASS_NAME" => "CUserTypeVideo", "DESCRIPTION" => GetMessage("IBLOCK_PROP_VIDEO"), "BASE_TYPE" => "string" ); } public static function GetDBColumnType($arUserField) { $connection = \Bitrix\Main\Application::getConnection(); $helper = $connection->getSqlHelper(); return $helper->getColumnTypeByField(new \Bitrix\Main\ORM\Fields\TextField('x')); } public static function PrepareSettings($arProperty) { return CUserTypeVideo::BasePrepareSettings($arProperty, "SETTINGS"); } public static function GetSettingsHTML($arUserField, $arHtmlControl, $bVarsFromForm) { if(!is_array($arUserField)) $arUserField = array(); $arUserField["SETTINGS"] = $bVarsFromForm ? $GLOBALS[$arHtmlControl["NAME"]] : CUserTypeVideo::PrepareSettings($arUserField); return CUserTypeVideo::BaseGetSettingsHTML($arHtmlControl["NAME"], $arUserField["SETTINGS"]); } public static function GetEditFormHTML($arUserField, $arHtmlControl) { $val = CUserTypeVideo::BaseConvertFromDB(htmlspecialcharsback($arHtmlControl["VALUE"])); // Unserialize array return CUserTypeVideo::BaseGetEditFormHTML($arUserField["SETTINGS"], $val, $arHtmlControl["NAME"]); } public static function OnBeforeSave($arUserField, $value) { return CUserTypeVideo::BaseConvertToDB($value); } public static function GetAdminListViewHTML($arUserField, $arHtmlControl) { $val = CUserTypeVideo::BaseConvertFromDB(htmlspecialcharsback($arHtmlControl["VALUE"])); // Unserialize array return CUserTypeVideo::BaseGetAdminListViewHTML($val); } public static function CheckFields($arUserField, $value) { $result = CUserTypeVideo::BaseCheckFields($value); if(!empty($result) && is_array($result)) { foreach($result as $idx => $message) { $result[$idx] = ['text' => $message]; } } return $result; } public static function OnSearchIndex($arUserField) { return CIBlockPropertyVideo::BaseOnSearchContent($arUserField["VALUE"]); } public static function GetPublicViewHTML($arUserField, $arHtmlControl) { $val = CUserTypeVideo::BaseConvertFromDB(htmlspecialcharsback($arHtmlControl["VALUE"])); // Unserialize array return CUserTypeVideo::BaseGetPublicHTML($arUserField["SETTINGS"], $val); } public static function canUseArrayValueForSingleField(): bool { return true; } }