''];
$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;
?>
echo GetMessage('IBLOCK_PROP_MAP_GOOGLE_INSTR_VALUE').'
';
?>
echo GetMessage('IBLOCK_PROP_MAP_GOOGLE_INSTR').'
';
?>
$APPLICATION->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="=htmlspecialcharsEx($value["VALUE"])?>" />
$out = ob_get_contents();
ob_end_clean();
if ($arProperty['MULTIPLE'] == 'Y')
$googleMapLastNumber++;
return $out;
}
public static function GetPublicViewHTML($arProperty, $value, $arParams)
{
$s = '';
$value['VALUE'] ??= null;
if($value["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();
?>
echo EndNote();
?>
} // _DrawKeyInputControl()
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')
);
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;
?>
echo GetMessage('IBLOCK_PROP_MAP_YANDEX_INSTR_VALUE').'
';
?>
echo GetMessage('IBLOCK_PROP_MAP_YANDEX_INSTR').'
';
?>
$APPLICATION->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="=htmlspecialcharsEx($value["VALUE"])?>" />
$out = ob_get_contents();
ob_end_clean();
if ($arProperty['MULTIPLE'] == 'Y')
$yandexMapLastNumber++;
return $out;
}
public static function GetPublicEditHTML($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'];
$value['VALUE'] ??= null;
if ($value['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();?>
if ($arProperty['MULTIPLE'] == 'Y' && isset($GLOBALS['YANDEX_MAP_PROPERTY'][$arProperty['ID']]))
{
$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;
?>
echo GetMessage('IBLOCK_PROP_MAP_YANDEX_INSTR_VALUE').'
';
?>
echo GetMessage('IBLOCK_PROP_MAP_YANDEX_INSTR').'
';
?>
$APPLICATION->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="=htmlspecialcharsEx($value["VALUE"])?>" />
$out = ob_get_contents();
ob_end_clean();
if ($arProperty['MULTIPLE'] == 'Y')
$yandexMapLastNumber++;
return $out;
}
public static function GetPublicViewHTML($arProperty, $value, $arParams)
{
$s = '';
$value['VALUE'] ??= null;
if (($arParams['MODE'] ?? null) == 'CSV_EXPORT')
{
if ($value["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();
?>
|
|
| = GetMessage('IBLOCK_PROP_VIDEO_BOTH_SET')?> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_BUFFER')?>: |
"/>
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_CONTROLBAR')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_AUTOSTART')?>: |
/>
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_VOLUME')?>: |
"/>
|
| = GetMessage('IBLOCK_PROP_VIDEO_SIZE')?> |
"/>
x
"/>
|
| = GetMessage('IBLOCK_PROP_VIDEO_FLV_SET')?> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_SKIN')?>: |
" />
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_FLASHVARS')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_WMODE_FLV')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_WMV_SET')?> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_BGCOLOR')?>: |
"/> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_COLOR')?>: |
"/> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_OVER_COLOR')?>: |
"/> |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_SCREEN_COLOR')?>: |
"/ > |
| = GetMessage('IBLOCK_PROP_VIDEO_SET_SILVERVARS')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_SET_WMODE_WMV')?>: |
|
$result = ob_get_contents();
ob_end_clean();
return $result;
}
public static function BaseGetEditFormHTML($set, $val, $name, $controlMode=false)
{
global $APPLICATION;
$id = str_replace(array("[","]",":"), "_", $name);
$path = $val["path"];
$name = htmlspecialcharsbx($name);
if (intval($val['width']) <= 0)
$val['width'] = intval($set['WIDTH']);
if (intval($val['height']) <= 0)
$val['height'] = intval($set['HEIGHT']);
ob_start();
?>
| = GetMessage('IBLOCK_PROP_VIDEO_PARAMS_TITLE')?> |
if ($controlMode != "iblock_element_admin"): ?>
if($path <> ''):?>
| = GetMessage('IBLOCK_PROP_VIDEO_PARAMS_TITLE_VIEW')?> |
|
$APPLICATION->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')
); ?>
|
| |
| = GetMessage('IBLOCK_PROP_VIDEO_PARAMS_TITLE_MAIN')?> |
if($path <> ''):?>
| = GetMessage('IBLOCK_PROP_VIDEO_FILE')?>: |
|
if(CVideoProperty::CheckFileInUploadDir($path)):?>
|
|
''){ echo 'style="display: none;"'; }?>>
| = GetMessage($path <> '' ? 'IBLOCK_PROP_VIDEO_PATH_NEW' : 'IBLOCK_PROP_VIDEO_PATH')?>: |
CAdminFileDialog::ShowScript(Array
(
"event" => "OpenFileBrowser_".$id,
"arResultDest" => Array("FUNCTION_NAME" => "SetVideoPath".$id),
"arPath" => Array(),
"select" => 'F',// F - file only, D - folder only
"operation" => 'O',// O - open, S - save
"showUploadTab" => false,
"showAddToMenuTab" => false,
"fileFilter" => 'flv,mp4,mp3,wmv',
"allowAllFiles" => true,
"SaveConfig" => true
)
);
CMedialib::ShowBrowseButton(
array(
"id" => 'OpenFileBrowser_but_'.$id,
"event" => "OpenFileBrowser_".$id,
'MedialibConfig' => array(
"event" => "OpenFileBrowser_ml_".$id,
"arResultDest" => array("FUNCTION_NAME" => "SetVideoPath".$id)
)
));?>
= GetMessage('IBLOCK_PROP_VIDEO_PATH_FROM_PC')?>
|
| = GetMessage('IBLOCK_PROP_VIDEO_FILE')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_SIZE')?>: |
x
|
| = GetMessage('IBLOCK_PROP_VIDEO_PARAMS_TITLE_INFO')?> |
| = GetMessage('IBLOCK_PROP_VIDEO_TITLE')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_DURATION')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_AUTHOR')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_DATE')?>: |
|
| = GetMessage('IBLOCK_PROP_VIDEO_DESC')?>: |
|
$s = ob_get_contents();
ob_end_clean();
return $s;
}
public static function BaseConvertToDB($value)
{
$io = CBXVirtualIo::GetInstance();
$arRes = array("path" => "");
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'] : "";
?>
$APPLICATION->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')
); ?>
$s = ob_get_contents();
ob_end_clean();
return $s;
}
public static function BaseOnSearchContent($val)
{
if(!is_array($val) && is_string($val))
{
$val = unserialize($val, ['allowed_classes' => 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;
}
}