%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(); }