| Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/modules/iblock/classes/general/ |
| Current File : /var/www/element/data/www/revenuestory.ru/bitrix/modules/iblock/classes/general/prop_datetime.php |
<?
use Bitrix\Main\Localization\Loc,
Bitrix\Main\Type\Date,
Bitrix\Iblock;
Loc::loadMessages(__FILE__);
class CIBlockPropertyDateTime
{
const USER_TYPE = 'DateTime';
public static function GetUserTypeDescription()
{
return array(
"PROPERTY_TYPE" => Iblock\PropertyTable::TYPE_STRING,
"USER_TYPE" => self::USER_TYPE,
"DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_DATETIME_DESC"),
//optional handlers
"GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"),
"GetPublicEditHTML" => array(__CLASS__, "GetPublicEditHTML"),
"GetAdminListViewHTML" => array(__CLASS__, "GetAdminListViewHTML"),
"GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"),
"CheckFields" => array(__CLASS__, "CheckFields"),
"ConvertToDB" => array(__CLASS__, "ConvertToDB"),
"ConvertFromDB" => array(__CLASS__, "ConvertFromDB"),
"GetSettingsHTML" => array(__CLASS__, "GetSettingsHTML"),
"GetAdminFilterHTML" => array(__CLASS__, "GetAdminFilterHTML"),
"GetPublicFilterHTML" => array(__CLASS__, "GetPublicFilterHTML"),
"AddFilterFields" => array(__CLASS__, "AddFilterFields"),
"GetUIFilterProperty" => array(__CLASS__, "GetUIFilterProperty"),
'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'),
);
}
public static function AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered)
{
$filtered = false;
$from = "";
$from_name = $strHTMLControlName["VALUE"].'_from';
if (isset($strHTMLControlName["FILTER_ID"]))
{
$filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID"]);
$filterData = $filterOption->getFilter();
$from = !empty($filterData[$from_name]) ? $filterData[$from_name] : "";
}
elseif (isset($_REQUEST[$from_name]))
{
$from = $_REQUEST[$from_name];
}
elseif(isset($strHTMLControlName["GRID_ID"]) &&
isset($_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$from_name]))
{
$from = $_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$from_name];
}
if($from)
{
if(CheckDateTime($from))
{
$from = static::ConvertToDB($arProperty, array("VALUE"=>$from));
$arFilter[">=PROPERTY_".$arProperty["ID"]] = $from["VALUE"];
$filtered = true;
}
else
{
$arFilter[">=PROPERTY_".$arProperty["ID"]] = $from;
$filtered = true;
}
}
$to = "";
$to_name = $strHTMLControlName["VALUE"].'_to';
if (isset($strHTMLControlName["FILTER_ID"]))
{
$filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID"]);
$filterData = $filterOption->getFilter();
$to = !empty($filterData[$to_name]) ? $filterData[$to_name] : "";
if($to)
{
$dateFormat = Date::convertFormatToPhp(CSite::getDateFormat());
$dateParse = date_parse_from_format($dateFormat, $to);
if(!mb_strlen($dateParse["hour"]) && !mb_strlen($dateParse["minute"]) && !mb_strlen($dateParse["second"]))
{
$timeFormat = Date::convertFormatToPhp(CSite::getTimeFormat());
$to .= " ".date($timeFormat, mktime(23, 59, 59, 0, 0, 0));
}
}
}
elseif (isset($_REQUEST[$to_name]))
{
$to = $_REQUEST[$to_name];
}
elseif(isset($strHTMLControlName["GRID_ID"]) &&
isset($_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$to_name]))
{
$to = $_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$to_name];
}
if($to)
{
if(CheckDateTime($to))
{
$to = static::ConvertToDB($arProperty, array("VALUE"=>$to));
$arFilter["<=PROPERTY_".$arProperty["ID"]] = $to["VALUE"];
$filtered = true;
}
else
{
$arFilter["<=PROPERTY_".$arProperty["ID"]] = $to;
$filtered = true;
}
}
}
public static function GetAdminFilterHTML($arProperty, $strHTMLControlName)
{
$from_name = $strHTMLControlName["VALUE"].'_from';
$to_name = $strHTMLControlName["VALUE"].'_to';
$lAdmin = new CAdminList($strHTMLControlName["TABLE_ID"]);
$lAdmin->InitFilter(array(
$from_name,
$to_name,
));
$from = isset($GLOBALS[$from_name])? $GLOBALS[$from_name]: "";
$to = isset($GLOBALS[$to_name])? $GLOBALS[$to_name]: "";
return CAdminCalendar::CalendarPeriod($from_name, $to_name, $from, $to);
}
public static function GetPublicFilterHTML($arProperty, $strHTMLControlName)
{
/** @var CMain */
global $APPLICATION;
$from_name = $strHTMLControlName["VALUE"].'_from';
$to_name = $strHTMLControlName["VALUE"].'_to';
if (isset($_REQUEST[$from_name]))
$from = $_REQUEST[$from_name];
elseif (
isset($strHTMLControlName["GRID_ID"])
&& isset($_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$from_name])
)
$from = $_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$from_name];
else
$from = "";
if (isset($_REQUEST[$to_name]))
$to = $_REQUEST[$to_name];
elseif (
isset($strHTMLControlName["GRID_ID"])
&& isset($_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$to_name])
)
$to = $_SESSION["main.interface.grid"][$strHTMLControlName["GRID_ID"]]["filter"][$to_name];
else
$to = "";
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:main.calendar',
'',
array(
'FORM_NAME' => $strHTMLControlName["FORM_NAME"],
'SHOW_INPUT' => 'Y',
'INPUT_NAME' => $from_name,
'INPUT_VALUE' => $from,
'INPUT_NAME_FINISH' => $to_name,
'INPUT_VALUE_FINISH' => $to,
'INPUT_ADDITIONAL_ATTR' => 'size="10"',
),
null,
array('HIDE_ICONS' => 'Y')
);
$s = ob_get_contents();
ob_end_clean();
return $s;
}
public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
{
if ($value["VALUE"] <> '')
{
if (!CheckDateTime($value["VALUE"]))
$value = static::ConvertFromDB($arProperty, $value, $strHTMLControlName["DATETIME_FORMAT"]);
if (isset($strHTMLControlName["MODE"]))
{
if ($strHTMLControlName["MODE"] == "CSV_EXPORT")
return $value["VALUE"];
elseif ($strHTMLControlName["MODE"] == "SIMPLE_TEXT")
return $value["VALUE"];
elseif ($strHTMLControlName["MODE"] == "ELEMENT_TEMPLATE")
return $value["VALUE"];
}
return str_replace(" ", " ", htmlspecialcharsEx($value["VALUE"]));
}
return '';
}
public static function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
{
/** @var CMain */
global $APPLICATION;
$s = '<input type="text" name="'.htmlspecialcharsbx($strHTMLControlName["VALUE"]).'" size="25" value="'.htmlspecialcharsbx($value["VALUE"]).'" />';
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:main.calendar',
'',
array(
'FORM_NAME' => $strHTMLControlName["FORM_NAME"],
'INPUT_NAME' => $strHTMLControlName["VALUE"],
'INPUT_VALUE' => $value["VALUE"],
'SHOW_TIME' => "Y",
),
null,
array('HIDE_ICONS' => 'Y')
);
$s .= ob_get_contents();
ob_end_clean();
return $s;
}
public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
{
if($value["VALUE"] <> '')
{
if(!CheckDateTime($value["VALUE"]))
$value = static::ConvertFromDB($arProperty, $value);
return str_replace(" ", " ", htmlspecialcharsex($value["VALUE"]));
}
else
return ' ';
}
//PARAMETERS:
//$arProperty - b_iblock_property.*
//$value - array("VALUE","DESCRIPTION") -- here comes HTML form value
//strHTMLControlName - array("VALUE","DESCRIPTION")
//return:
//safe html
public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
return CAdminCalendar::CalendarDate($strHTMLControlName["VALUE"], $value["VALUE"], 20, true).
($arProperty["WITH_DESCRIPTION"]=="Y" && '' != trim($strHTMLControlName["DESCRIPTION"]) ?
' <input type="text" size="20" name="'.$strHTMLControlName["DESCRIPTION"].'" value="'.htmlspecialcharsbx($value["DESCRIPTION"]).'">'
:''
);
}
//PARAMETERS:
//$arProperty - b_iblock_property.*
//$value - array("VALUE",["DESCRIPTION"]) -- here comes HTML form value
//return:
//array of error messages
public static function CheckFields($arProperty, $value)
{
$arResult = array();
if($value["VALUE"] <> '' && !CheckDateTime($value["VALUE"]))
$arResult[] = Loc::getMessage("IBLOCK_PROP_DATETIME_ERROR_NEW", array("#FIELD_NAME#" => $arProperty["NAME"]));
return $arResult;
}
//PARAMETERS:
//$arProperty - b_iblock_property.*
//$value - array("VALUE",["DESCRIPTION"]) -- here comes HTML form value
//return:
//DB form of the value
public static function ConvertToDB($arProperty, $value)
{
if ($value["VALUE"] <> '')
{
try
{
$time = Bitrix\Main\Type\DateTime::createFromUserTime($value['VALUE']);
$value['VALUE'] = $time->format("Y-m-d H:i:s");
}
catch(Bitrix\Main\ObjectException $e)
{
}
}
return $value;
}
public static function ConvertFromDB($arProperty, $value, $format = '')
{
if ($value["VALUE"] <> '')
{
try
{
$time = new Bitrix\Main\Type\DateTime($value['VALUE'], "Y-m-d H:i:s");
$time->toUserTime();
if ($format === 'SHORT')
$phpFormat = $time->convertFormatToPhp(FORMAT_DATE);
elseif ($format === 'FULL')
$phpFormat = $time->convertFormatToPhp(FORMAT_DATETIME);
elseif ($format)
$phpFormat = $time->convertFormatToPhp($format);
else
$phpFormat = $time->getFormat();
$value["VALUE"] = $time->format($phpFormat);
$value["VALUE"] = str_replace(" 00:00:00", "", $value["VALUE"]);
}
catch(Bitrix\Main\ObjectException $e)
{
}
}
return $value;
}
public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
{
$arPropertyFields = array(
"HIDE" => array("ROW_COUNT", "COL_COUNT"),
);
return '';
}
/**
* @param array $property
* @param array $strHTMLControlName
* @param array &$fields
* @return void
*/
public static function GetUIFilterProperty($property, $strHTMLControlName, &$fields)
{
$fields["type"] = "date";
$fields["time"] = true;
$fields["filterable"] = "";
$fields["operators"] = array(
"default" => "=",
"exact" => "=",
"range" => "><",
"more" => ">",
"less" => "<"
);
}
public static function GetUIEntityEditorProperty($settings, $value)
{
return [
'type' => ($settings['MULTIPLE'] === 'Y') ? 'multidatetime' : 'datetime',
'data' => [
'enableTime' => true,
'dateViewFormat' => \Bitrix\Main\Context::getCurrent()->getCulture()->getLongDateFormat().' '.\Bitrix\Main\Context::getCurrent()->getCulture()->getShortTimeFormat(),
]
];
}
}