%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/local/components/p4/p.castings.edit/
Upload File :
Create Path :
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();
}

Zerion Mini Shell 1.0