%PDF- %PDF-
| Direktori : /home/bitrix/www/local/components/p4/p.castings.edit/ |
| Current File : //home/bitrix/www/local/components/p4/p.castings.edit/component.php |
<?if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
/* @var array $arParams */
/* @var array $arResult */
/* @global CMain $APPLICATION */
/* @global CUser $USER */
$arResult['BX_SESSION_CHECK'] = bitrix_sessid_post();
$isDebug = false;
if ($isDebug) { // Отладка
$arResult['CASTING']['NAME'] = GetMessage('IT_REQUIRES_THE_SUPER_MIRACLE');
$arResult['CASTING_PROPS']['CASTING_TEXT'] = GetMessage('EVERY_WHIM_FOR_YOUR_MONEY');
$arResult['CASTING_PROPS']['COMPENSATION'] = '100';
$arResult['CASTING_PROPS']['SECTIONS'] = array(7);
$arResult['CASTING_PROPS']['JOB_DATE'] = GetMessage('MARCH_28_2015');
}
// Режим AJAX-подгрузки справочников
if ('Y' == $arParams['AJAX_REF'] && 'GET' == $_SERVER['REQUEST_METHOD']) {
$rs = CIBlockProperty::GetByID('COUNTRY', $arParams['IBLOCK_ID']);
if ($ar_res = $rs->GetNext()) {
if ('CITY' == $_GET['REF']) { // Список городов для текущего региона пользователя
if (strlen($_GET['SID']) > 0) {
$sidd = $_GET['SID'];
$ds = true;
} else {
$sidd = 329; // Москва
$ds = false;
}
$arFilter = array('ID' => $sidd);
$arSelect = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'PROPERTY_NAME_RU');
$rsCity = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
if ($arCity = $rsCity->GetNext()) {
$rsNav = CIBlockSection::GetNavChain(false, $arCity['IBLOCK_SECTION_ID']);
$region = '';
while ($arNav = $rsNav->GetNext()) {
$arFilterR = array('ID' => $arNav['ID'], 'IBLOCK_ID' => 6);
$arSelectR = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'UF_NAME_RU');
$res = CIBlockSection::GetList(array(), $arFilterR, false, $arSelectR, false);
if ($ar_res = $res->GetNext()) {
$nam_region = (isset($ar_res['UF_NAME_RU']) && SITE_ID == 'ru') ? $ar_res['UF_NAME_RU'] : $arNav['NAME'];
}
$region .= $nam_region.(($arNav['ID'] == $arCity['IBLOCK_SECTION_ID']) ? '' : ', ');
} ?>
<?if ($ds) {
?><optgroup label="<?=$region; ?>"><?php
$res = CIBlockElement::GetList(array('SORT' => 'ASC', 'NAME' => 'ASC'), array('IBLOCK_ID' => $ar_res['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y', 'SECTION_ID' => $arCity['IBLOCK_SECTION_ID'], 'INCLUDE_SUBSECTIONS' => 'Y'), false, false, $arSelect);
while ($ar_result = $res->GetNext()) {
$nam_reg = (isset($ar_result['PROPERTY_NAME_RU_VALUE']) && SITE_ID == 'ru') ? $ar_result['PROPERTY_NAME_RU_VALUE'] : $ar_result['NAME']; ?><option value="<?=$ar_result['ID']; ?>"><?=$nam_reg; ?></option><?php
} ?></optgroup><?php
} else {
?>
<optgroup label="">
<option value=""></option>
</optgroup>
<?php
} ?><?php
}
} elseif (!empty($_GET['term'])) {
$arSelect = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'PROPERTY_NAME_RU');
$response = array();
$arFilt = array('IBLOCK_ID' => $ar_res['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y', 'INCLUDE_SUBSECTIONS' => 'Y',
array(
'LOGIC' => 'OR',
array('NAME' => '%'.$_GET['term'].'%'),
array('PROPERTY_NAME_RU' => '%'.$_GET['term'].'%'),
),
);
$rsCity = CIBlockElement::GetList(array('SORT' => 'ASC', 'NAME' => 'ASC'), $arFilt, false, false, $arSelect);
while ($arCity = $rsCity->GetNext()) {
if (!array_key_exists($arCity['IBLOCK_SECTION_ID'], $response)) {
$rsNav = CIBlockSection::GetNavChain(false, $arCity['IBLOCK_SECTION_ID']);
$region = '';
while ($arNav = $rsNav->GetNext()) {
$arFilterR = array('ID' => $arNav['ID'], 'IBLOCK_ID' => 6);
$arSelectR = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'UF_NAME_RU');
$resr = CIBlockSection::GetList(array(), $arFilterR, false, $arSelectR, false);
if ($ar_resr = $resr->GetNext()) {
$nam_reg_t = (isset($ar_resr['UF_NAME_RU']) && SITE_ID == 'ru') ? $ar_resr['UF_NAME_RU'] : $arNav['NAME'];
}
$region .= $nam_reg_t.(($arNav['ID'] == $arCity['IBLOCK_SECTION_ID']) ? '' : ', ');
}
$response[$arCity['IBLOCK_SECTION_ID']] = array(
'group' => true,
'text' => $region,
'items' => array(),
);
}
$nam_r = (isset($arCity['PROPERTY_NAME_RU_VALUE']) && SITE_ID == 'ru') ? $arCity['PROPERTY_NAME_RU_VALUE'] : $arCity['NAME'];
$response[$arCity['IBLOCK_SECTION_ID']]['items'][] = array('value' => $arCity['ID'], 'text' => $nam_r);
}
echo json_encode($response);
} else {
echo json_encode($_REQUEST);
}
}
define('PUBLIC_AJAX_MODE', true);
require_once $_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/include/epilog_after.php';
die();
}
// Публикация объявления доступна только для пользователей, обладающих публичных профилем
/*if ($USER->IsAuthorized()) {
if (!($arParams['NEED_PROFILE']=='Y'?
isUserProfile($USER->GetID()):isJobUser($USER->GetID()))
) {
$arResult["ERROR_ACCESS_DENIED"] = 'Y';
}
elseif (intval($arParams['SILENT_PERIOD'])>0 && !$USER->IsAdmin()) {
$rsOffers = CIBlockElement::GetList(Array("id"=>"desc"),
Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'],'CREATED_BY'=>$USER->GetID(),'ACTIVE'=>'Y'));
if ($arLastOffer = $rsOffers->GetNext()) {
$silentPeriod = round((mktime() - MakeTimeStamp($arLastOffer['DATE_CREATE'],CLang::GetDateFormat("FULL"))) / 60 / 24);
if ($silentPeriod<IntVal($arParams['SILENT_PERIOD'])) {
$arResult["ERROR_SILENT_PERIOD"] = 'Y';
$silentPeriod = IntVal($arParams['SILENT_PERIOD']) - $silentPeriod;
if ($silentPeriod==0) $s=GetMessage("LESS_THAN_ONE_HOUR");
elseif ($silentPeriod==1) $s=$silentPeriod.GetMessage("HOUR");
elseif ($silentPeriod>1 && $silentPeriod<5) $s=$silentPeriod.GetMessage("HOURS_A");
else $s=$silentPeriod.GetMessage("HOURS_OV");
$arResult["SILENT_PERIOD"] = $s;
}
}
}
}
else {
$arResult["ERROR_ACCESS_DENIED"] = 'Y';
}*/
/*
function checkDateFormat($datetime) {
$format = "DD.MM.YYYY";
if ($arr = ParseDateTime($datetime, $format)) return true;
else return false;
}
*/
function clearDateMask($date)
{
if ('__.__.____' == $date || '__/__/____' == $date) {
return '';
} else {
return $date;
}
}
if ('POST' == $_SERVER['REQUEST_METHOD'] && check_bitrix_sessid()) {
if (!empty($_REQUEST['ACTION']) && intval($_REQUEST['ID']) > 0) {
$response = '';
$rsItem = CIBlockElement::GetByID(intval($_REQUEST['ID']));
if ($arItem = $rsItem->GetNext()) {
if ($arItem['CREATED_BY'] != $USER->GetID()) {
$response = GetMessage('YOU_ARE_NOT_THE_AUTHOR_OF_AD').$_REQUEST['ID'];
}
} else {
$response = GetMessage('AD_ID').$_REQUEST['ID'].GetMessage('NOT_FOUND');
}
if (!empty($response)) { // Выход по ошибке
echo $response;
define('PUBLIC_AJAX_MODE', true);
require_once $_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/include/epilog_after.php';
die();
}
if ('STOP' == $_REQUEST['ACTION']) { // Снятие с публикации
$el = new CIBlockElement();
if ($el->Update($arItem['ID'], array('ACTIVE' => 'N'))) {
$response = GetMessage('AD_IS_REMOVED_FROM_PUBLICATION');
} else {
$response = GetMessage('AN_ERROR_HAS_OCCURRED_WHEN_REMOVING_AD_ID').$_REQUEST['ID'].GetMessage('FROM_PUBLICATION_PLEASE_CONTACT');
}
echo $response;
define('PUBLIC_AJAX_MODE', true);
require_once $_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/include/epilog_after.php';
die();
} elseif ('COPY' == $_REQUEST['ACTION']) { // Повторить
} elseif ('EDIT' == $_REQUEST['ACTION']) { // Редактировать
$rsProps = CIBlockElement::GetProperty($arParams['IBLOCK_ID'], $arItem['ID'], array(), array());
while ($ob = $rsProps->GetNext()) {
if ('Y' == $ob['MULTIPLE']) {
if (array_key_exists($ob['CODE'], $arProps)) {
$arProps[$ob['CODE']][] = $ob['VALUE'];
} else {
$arProps[$ob['CODE']] = array($ob['VALUE']);
}
} else {
$arProps[$ob['CODE']] = $ob['VALUE'];
}
}
$arResult['CASTING'] = $arItem;
$arResult['CASTING_PROPS'] = $arProps;
} elseif ('DELETE' == $_REQUEST['ACTION']) { // Удалить
}
} else {
// AddMessage2Log("Casting posting");
// AddMessage2Log(print_r($_POST,true));
CModule::IncludeModule('bizproc');
if (isset($_POST['CASTING_PROPS']['JOB_DATE'])) {
$_POST['CASTING_PROPS']['JOB_DATE'] = clearDateMask($_POST['CASTING_PROPS']['JOB_DATE']);
}
if (isset($_POST['CASTING_PROPS']['START_DATE'])) {
$_POST['CASTING_PROPS']['START_DATE'] = clearDateMask($_POST['CASTING_PROPS']['START_DATE']);
}
if (isset($_POST['CASTING_PROPS']['END_DATE'])) {
$_POST['CASTING_PROPS']['END_DATE'] = clearDateMask($_POST['CASTING_PROPS']['END_DATE']);
}
$rsCity = CIBlockElement::GetByID($_POST['CASTING_PROPS']['CITY']);
if ($arCity = $rsCity->GetNext()) {
$rsNav = CIBlockSection::GetNavChain(false, $arCity['IBLOCK_SECTION_ID']);
if ($arNav = $rsNav->GetNext()) {
$_POST['CASTING_PROPS']['COUNTRY'] = $arNav['ID'];
}
$_POST['CASTING']['PREVIEW_TEXT'] = $arParams['PREFIX'].$_POST['CASTING']['NAME']."\n".$arNav['NAME'].' / '.$arCity['NAME'];
}
if (!empty($_POST['NEW_IMAGE'])) { // Загружаем изображение
$tmpdir = $_SERVER['DOCUMENT_ROOT'].'/tmp';
$tmpfname = tempnam($tmpdir, 'OFFER').'.jpg';
$image = explode(',', $_POST['NEW_IMAGE']);
file_put_contents($tmpfname, base64_decode($image[1]));
$arFile = CFile::MakeFileArray($tmpfname);
if ($isDebug) {
?><pre><?php print_r($arFile); ?></pre><?php
}
// $arFile['old_file'] = $ar_fields['DETAIL_PICTURE']; ДЛЯ УДАЛЕНИЯ ПРИ ОБНОВЛЕНИИ
$_POST['CASTING']['DETAIL_PICTURE'] = $arFile;
}
/*
else { // Подгружаем аватар (если не задано изображение)
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$USER->GetID()), false, false,
array("IBLOCK_ID", "ID", "NAME", "DETAIL_PICTURE"));
if($ar_fields = $r->GetNext()) {
$avatar = $ar_fields["DETAIL_PICTURE"];
if ($avatar>0) {
$image = CFile::CopyFile($avatar);
$_POST['CASTING']['DETAIL_PICTURE'] = CFile::MakeFileArray($image);
}
}
}
*/
$rsEnum = CIBlockPropertyEnum::GetList(array(), array('ID' => intval($_POST['CASTING_PROPS']['PUBLIC_DATE'])));
if ($arEnum = $rsEnum->GetNext()) {
$publicDays = $arEnum['XML_ID'];
}
// Используется для вывода в ЛК до модерации (БП устаналивает значения от даты модерации)
$_POST['CASTING']['DATE_ACTIVE_FROM'] = date($DB->DateFormatToPHP(CLang::GetDateFormat('FULL')), mktime());
$_POST['CASTING']['DATE_ACTIVE_TO'] = date($DB->DateFormatToPHP(CLang::GetDateFormat('FULL')),
mktime(date('H'), date('i'), date('s'), date('m'), date('d') + intval($publicDays), date('Y')));
$el = new CIBlockElement();
if (intval($_POST['CASTING']['ID']) > 0) {
$response = '';
$rsItem = CIBlockElement::GetByID(intval($_POST['CASTING']['ID']));
if ($arItem = $rsItem->GetNext()) {
if ($arItem['CREATED_BY'] != $USER->GetID()) {
$response = GetMessage('YOU_ARE_NOT_THE_AUTHOR_OF_AD').$_POST['CASTING']['ID'];
}
} else {
$response = GetMessage('AD_ID').$_POST['CASTING']['ID'].GetMessage('NOT_FOUND');
}
if (!empty($response)) { // Выход по ошибке
echo $response;
define('PUBLIC_AJAX_MODE', true);
require_once $_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/include/epilog_after.php';
die();
}
// Редактирование
if ($el->Update($_POST['CASTING']['ID'], $_POST['CASTING'])) {
$arResult['CASTING_ID'] = $_POST['CASTING']['ID'];
CIBlockElement::SetPropertyValuesEx($arResult['CASTING_ID'], false, $_POST['CASTING_PROPS']);
} else {
$arResult['ERRORS'] = GetMessage('ERROR_AD_REGISTRATION').'<br/>'.$el->LAST_ERROR;
}
} else { // Создание
$_POST['CASTING']['IBLOCK_ID'] = $arParams['IBLOCK_ID'];
$_POST['CASTING_PROPS']['SECTIONS'] = array(7);
$_POST['CASTING_PROPS']['P4_ONLY'] = 'Y';
$_POST['CASTING_PROPS']['LINK_P4'] = 'http://port4lio.pro/castings/';
$_POST['CASTING']['PROPERTY_VALUES'] = $_POST['CASTING_PROPS'];
if ($CASTING_ID = $el->Add($_POST['CASTING'])) {
$arResult['CASTING_ID'] = $CASTING_ID;
$arResult['CASTING']['ID'] = $CASTING_ID;
} else {
$arResult['ERRORS'] = GetMessage('ERROR_AD_REGISTRATION').'<br/>'.$el->LAST_ERROR;
}
}
if (isset($tmpfname)) {
unlink($tmpfname);
}
if ($arResult['CASTING_ID'] > 0) { // Запускаем БП
$bpList = CBPDocument::GetWorkflowTemplatesForDocumentType(array('iblock', 'CIBlockDocument', 'iblock_'.$arParams['IBLOCK_ID']));
foreach ($bpList as $bp) {
if ($bp['AUTO_EXECUTE'] & 1) {
$arErrorsTmp = array();
CBPDocument::StartWorkflow($bp['ID'], array('iblock', 'CIBlockDocument', $arResult['CASTING_ID']), array(), $arErrorsTmp);
if (count($arErrorsTmp) > 0) {
$arResult['ERRORS'] = print_r($arErrorsTmp, true);
}
}
}
}
$arResult['CASTING'] = $_POST['CASTING'];
$arResult['CASTING_PROPS'] = $_POST['CASTING_PROPS'];
if ($isDebug) {
?><pre><?php print_r($arResult); ?></pre><?php
}
}
}
// Формируем поля-справочники из ИБ
if (CModule::IncludeModule('iblock')) {
// Разделы
$res = CIBlockProperty::GetByID('SECTIONS', $arParams['IBLOCK_ID']);
if ($ar_res = $res->GetNext()) {
$rs = CIBlockSection::GetList(array('SORT' => 'ASC', 'NAME' => 'ASC'), array('IBLOCK_ID' => $ar_res['LINK_IBLOCK_ID'], /*'UF_PROF'=>1,*/'ACTIVE' => 'Y'));
while ($ar = $rs->GetNext()) {
$arResult['SECTIONS'][$ar['ID']] = $ar['DESCRIPTION'];
}
}
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'GENRES'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['GENRES'][$enum_fields['ID']] = $enum_fields;
}
$arResult['PREVIEW_IMG'] = '';
if (intval($arResult['CASTING']['DETAIL_PICTURE']) > 0) {
$arResult['AVATAR'] = CFile::ShowImage($arResult['CASTING']['DETAIL_PICTURE'], 140, 97, 'border=0');
$arResult['PREVIEW_IMG'] = $arResult['AVATAR'];
}
// Город и аватар
if ($USER->GetID() > 0) {
$r = CIBlockElement::GetList(array(), array('IBLOCK_ID' => IBLOCK_PROFILE_ID, 'PROPERTY_ACCOUNT' => $USER->GetID()), false, false,
array('IBLOCK_ID', 'ID', 'NAME', 'DETAIL_PICTURE', 'PROPERTY_REGION'));
if ($ar_fields = $r->GetNext()) {
if (empty($arResult['CASTING_PROPS']['CITY'])) {
$arResult['CASTING_PROPS']['CITY'] = $ar_fields['PROPERTY_REGION_VALUE'];
}
if (empty($arResult['AVATAR'])) {
$arResult['AVATAR'] = CFile::ShowImage($ar_fields['DETAIL_PICTURE'], 140, 97, 'border=0');
}
} else { // Заказчик
$arUser = CUser::GetByID($USER->GetID())->Fetch();
if (empty($arResult['CASTING_PROPS']['CITY'])) {
$arResult['CASTING_PROPS']['CITY'] = $arUser['PERSONAL_CITY'];
}
if (empty($arResult['AVATAR'])) {
$arResult['AVATAR'] = CFile::ShowImage($arUser['PERSONAL_PHOTO'], 140, 97, 'border=0');
}
}
$arResult['NO_EDIT'] = 'Y';
}
// Компенсация валюта
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'COMPENSATION_CURRENCY'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['CURRENCY'][$enum_fields['ID']] = $enum_fields['VALUE'];
}
// Типы компенсации
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'COMPENSATION_TYPE'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['COMPENSATION_TYPE'][$enum_fields['ID']] = $enum_fields['VALUE'];
}
// Пол (если есть)
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'SEX'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['SEX'][$enum_fields['ID']] = $enum_fields['VALUE'];
}
// Обнаженка (если есть)
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'NUDITY'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['NUDITY'][$enum_fields['ID']] = $enum_fields['VALUE'];
}
// Срок публикации
$property_enums = CIBlockPropertyEnum::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => 'PUBLIC_DATE'));
while ($enum_fields = $property_enums->GetNext()) {
$arResult['PUBLIC_DATE'][$enum_fields['ID']] = $enum_fields['VALUE'];
}
}
/* ?><pre><? print_r($arResult); ?></pre><? // */
if (intval($arResult['CASTING_ID']) > 0 && strlen($arParams['OK_URL']) > 0) {
header('Location: '.$arParams['OK_URL'].'&POST_ID='.$arResult['CASTING_ID']);
} else {
$this->IncludeComponentTemplate();
}