%PDF- %PDF-
| Direktori : /home/bitrix/www/local/components/UB/adbase.offer.edit/ |
| Current File : //home/bitrix/www/local/components/UB/adbase.offer.edit/component.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
$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 ($arParams['AJAX_REF']=='Y' && $_SERVER["REQUEST_METHOD"]=="GET") {
$rs = CIBlockProperty::GetByID('COUNTRY', $arParams['IBLOCK_ID']);
if($ar_res=$rs->GetNext()) {
if ($_GET['REF']=='CITY') { // Список городов для текущего региона пользователя
$arFilter = Array("ID"=>$_GET["SID"]);
$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 == "s1") ? $ar_res["UF_NAME_RU"] : $arNav['NAME']; }
$region .= $nam_region.(($arNav['ID']==$arCity['IBLOCK_SECTION_ID'])?'':', ');
}
?><optgroup label="<?=$region?>"><?
$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 == "s1") ? $ar_result["PROPERTY_NAME_RU_VALUE"] : $ar_result["NAME"];
?><option value="<?=$ar_result['ID']?>"><?=$nam_reg?></option><?
}
?></optgroup><?
}
}
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 == "s1") ? $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 == "s1") ? $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 ($_SERVER["REQUEST_METHOD"]=="POST" && 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 ($_REQUEST['ACTION']=='STOP') { // Снятие с публикации
$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 ($_REQUEST['ACTION']=='COPY') { // Повторить
}
elseif ($_REQUEST['ACTION']=='EDIT') { // Редактировать
$rsProps = CIBlockElement::GetProperty($arParams['IBLOCK_ID'], $arItem['ID'], array(), array());
while ($ob = $rsProps->GetNext())
{
if ($ob['MULTIPLE']=='Y') {
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 ($_REQUEST['ACTION']=='DELETE') { // Удалить
}
} else {
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><? print_r($arFile); ?></pre><?
}
// $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'];
if (intval($arParams['IBLOCK_ID']) == 12) {
$_POST['CASTING_PROPS']['UB_ONLY'] = "Y";
};
$_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><? print_r($arResult); ?></pre><?
}
}
}
// Формируем поля-справочники из ИБ
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'];
}
}
$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();
}