Exemple #1
0
    /**
     * Отрисовать одно поле.
     * @param  array  $_field массив с описанием поля
     * @return string HTML-текст
     */
    public static function RenderField($_field)
    {
        if (ToLower($_field['TYPE']) != 'hidden') {
            $result = '<div class="rf_fwrapper_o ' . $_field['WCLASS'] . '" ' . ($_field['WSTYLE'] ? 'style="' . $_field['WSTYLE'] . '" ' : '') . 'id="rf_wrapper_o_' . $_field['ID'] . '">
				<div class="rf_lwrapper" id="rf_lwrapper_' . $_field['ID'] . '">
					<label for="' . $_field['ID'] . '" id="rf_label_' . $_field['ID'] . '">' . $_field['LABEL'] . '</label>
					' . ($_field['REQUIRED'] ? '<span class="rf_required">*</span>' : '') . '
				</div>
				<div class="rf_fwrapper_i" id="rf_fwrapper_i_' . $_field['ID'] . '">';
        } else {
            $result = '';
        }
        // общая строка для большинства элементов
        $field = 'name="' . $_field['NAME'] . '" id="' . $_field['ID'] . '"' . ($_field['DISABLED'] ? ' disabled' : '') . ($_field['CLASS'] ? ' class="' . $_field['CLASS'] . '"' : '') . ($_field['ONCLICK'] ? ' onclick="' . $_field['ONCLICK'] . '"' : '') . ($_field['ONHOVER'] ? ' onmouseover="' . $_field['ONHOVER'] . '"' : '') . ($_field['ONCHANGE'] ? ' onchange="' . $_field['ONCHANGE'] . '"' : '') . ($_field['ONHOUT'] ? ' onmouseout="' . $_field['ONHOUT'] . '"' : '');
        // типы почти по алфавиту
        switch (ToLower($_field['TYPE'])) {
            // привязка к теме форума с возможностью создать новую
            case 'bind_forum_topic2':
                $result .= '<div class="rf_selectforum">
					<select id="' . $_field['ID'] . '_selectforum" name="' . $_field['NAME'] . '_selectforum">
					<option value="" selected></option>';
                foreach ($_field['FORUMS'] as $k => $v) {
                    $result .= '<option value="' . $k . '">' . $v . '</option>';
                }
                $result .= '</select></div>
					<div class="rf_createtopic">
						<div class="rf_inner_label" id="rf_inner_label_' . $_field['ID'] . '">
							<label for="' . $_field['ID'] . '_createtopic">Название темы форума</label>
						</div>
						<div class="rf_inner_input" id="rf_inner_input_' . $_field['ID'] . '">
							<input type="text" id="' . $_field['ID'] . '_createtopic" name="' . $_field['NAME'] . '_createtopic">
						</div>
					</div>';
                // обратите внимание - тут нет брейка, следом должен идти bind_forum_topic1
                // привязка к теме форума
            // привязка к теме форума
            case 'bind_forum_topic1':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/forum_topics_search_gs.php?FC=' . $_field['ID'] . ($_field['FORUM_ID'] ? '&FORUM_ID=' . $_field['FORUM_ID'] : '') . '\', 600, 500);" value="...">';
                break;
                // привязка к элементу инфоблока с возможностью создать новый
            // привязка к элементу инфоблока с возможностью создать новый
            case 'bind_iblock_element2':
                $result .= '<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv\').style.display=\'block\';">Создать</span>
					<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv">';
                $result .= CFormRenderer::RenderFields($_field);
                $result .= '</div>';
                // обратите внимание - тут нет брейка, следом должен идти bind_iblock_element1
                // привязка к элементу инфоблока
            // привязка к элементу инфоблока
            case 'bind_iblock_element1':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<span id="sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'] . '</span>
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '&k=text\', 600, 500);" value="...">';
                break;
                // привязка к пользователю
            // привязка к пользователю
            case 'bind_user':
                $result .= '<input type="text" ' . $field . ' value="' . $_field['VALUE'] . '">
					<span id="div_sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'] . '</span>
					<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/user_search.php?FN=' . CFormRenderer::$formname . '&FC=' . $_field['ID'] . '\', 600, 500);" value="...">';
                // немного говнеца в стиле битрикса
                $result .= '<iframe id="rf_iframe_' . $_field['ID'] . '" style="width: 0; height: 0; border: none;"></iframe>
					<script type="text/javascript">
					var prev_' . $_field['ID'] . '_val = \'' . $_field['VALUE'] . '\';
					function rf_input_' . $_field['ID'] . '_check()
					{
						var val = document.getElementById(\'' . $_field['ID'] . '\').value;
						if(val != prev_' . $_field['ID'] . '_val)
						{
							document.getElementById("rf_iframe_' . $_field['ID'] . '").src=\'/bitrix/admin/get_user.php?ID=\'
								+ val + \'&strName=sp_' . md5($_field['ID']) . '_text&lang=ru&admin_section=Y\';
							prev_' . $_field['ID'] . '_val = val;
						}
					}
					setInterval(function() { rf_input_' . $_field['ID'] . '_check(); }, 1000);
					</script>';
                break;
                // кнопарь
            // кнопарь
            case 'button':
                $result .= '<input type="button" ' . $field . ' value="' . $_field['VALUE'] . '">';
                break;
                // обычный текстовый инпут с календариком
            // обычный текстовый инпут с календариком
            case 'date':
                ob_start();
                global $APPLICATION;
                $APPLICATION->IncludeComponent("bitrix:main.calendar", "", array("SHOW_INPUT" => "Y", "FORM_NAME" => CFormRenderer::$formname, "INPUT_NAME" => $_field['NAME'], "INPUT_NAME_FINISH" => "", "INPUT_VALUE" => $_field['VALUE'], "INPUT_VALUE_FINISH" => "", "SHOW_TIME" => "N", "HIDE_TIMEBAR" => "N"));
                $result .= ob_get_clean();
                /*$result .= '<input type="text" '.$field.' value="'.htmlspecialchars($_field['VALUE']).'">'
                		.Calendar($_field['NAME'], CFormRenderer::$formname);*/
                break;
                // файл
            // файл
            case 'file':
                $result .= '<input type="file" ' . $field . '>';
                break;
                // хидден
            // хидден
            case 'hidden':
                $result .= '<input type="hidden" ' . $field . ' value="' . htmlspecialcharsEx($_field['VALUE']) . '">';
                break;
                // множественная привязка к элементу инфоблока
            // множественная привязка к элементу инфоблока
            case 'multibind_iblock_element1':
                $max_i = 10;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 10;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multielementbind_wrapper_' . $_field['ID'] . '_' . $i . '">';
                    $result .= '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="sp_' . md5($_field['ID']) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang=ru&IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '_' . $i . '&k=text\', 600, 500);" value="...">' . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multielementbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественная привязка к элементу инфоблока с возможностью создать новый
            // множественная привязка к элементу инфоблока с возможностью создать новый
            case 'multibind_iblock_element2':
                $max_i = 10;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 10;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multielementbind_wrapper_' . $_field['ID'] . '_' . $i . '">
						<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv_' . $i . '\').style.display=\'block\';">Создать</span>
						<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv_' . $i . '">';
                    $result .= CFormRenderer::RenderFields($_field, 'sub_', '_' . $i);
                    $result .= '</div>';
                    $result .= '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="sp_' . md5($_field['ID'] . '_' . $i) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang=ru&IBLOCK_ID=' . (int) $_field['IBLOCK_ID'] . '&n=' . $_field['ID'] . '_' . $i . '&k=text\', 600, 500);" value="...">' . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multielementbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественная привязка к пользователям
            // множественная привязка к пользователям
            case 'multibind_user':
                $max_i = 5;
                if (is_array($_field['VALUE'])) {
                    $max_i = sizeof($_field['VALUE']) + 5;
                }
                for ($i = 0; $i < $max_i; $i++) {
                    $result .= '<div class="rf_multielementbind_wrapper' . ($i && !$_field['VALUE'][$i] ? ' rf_hidden' : '') . '" id="multiuserbind_wrapper_' . $_field['ID'] . '_' . $i . '">' . '<input type="text" ' . 'name="' . $_field['NAME'] . '_' . $i . '" id="' . $_field['ID'] . '_' . $i . '"' . ' value="' . $_field['VALUE'][$i] . '">
						<span id="div_sp_' . md5($_field['ID'] . '_' . $i) . '_text">' . $_field['SPAN_VALUE'][$i] . '</span>
						<input type="button" onclick="jsUtils.OpenWindow(\'/bitrix/admin/user_search.php?FN=' . CFormRenderer::$formname . '&FC=' . $_field['ID'] . '_' . $i . '\', 600, 500);" value="...">' . ('<iframe id="rf_iframe_' . $_field['ID'] . '_' . $i . '" style="width: 0; height: 0; border: none;"></iframe>
							<script type="text/javascript">
								var prev_' . $_field['ID'] . '_' . $i . '_val = \'' . $_field['VALUE'][$i] . '\';
								function rf_input_' . $_field['ID'] . '_' . $i . '_check()
								{
									var val = document.getElementById(\'' . $_field['ID'] . '_' . $i . '\').value;
									if(val != prev_' . $_field['ID'] . '_' . $i . '_val)
									{
										document.getElementById("rf_iframe_' . $_field['ID'] . '_' . $i . '").src=\'/bitrix/admin/get_user.php?ID=\'
											+ val + \'&strName=sp_' . md5($_field['ID'] . '_' . $i) . '_text&lang=ru&admin_section=Y\';
										prev_' . $_field['ID'] . '_' . $i . '_val = val;
									}
								}
								setInterval(function() { rf_input_' . $_field['ID'] . '_' . $i . '_check(); }, 1000);
							</script>') . ($i == $max_i - 1 ? '' : '<span class="rf_command" onclick="document.getElementById(\'multiuserbind_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display = \'block\';this.style.display=\'none\';">Ещё...</span>') . '</div>';
                }
                break;
                // множественные файлы
            // множественные файлы
            case 'multifile':
                $result .= '<div id="multifile_wrapper_' . $_field['ID'] . '_0" class="rf_multifile_wrapper">
					<input
					type="file"
					id="' . $_field['ID'] . '_0"
					name="' . $_field['NAME'] . '_0"> <span class="rf_command" onclick="document.getElementById(\'multifile_wrapper_' . $_field['ID'] . '_1\').style.display=\'block\';">Ещё</span></div>';
                for ($i = 1; $i < 5; $i++) {
                    $result .= '<div id="multifile_wrapper_' . $_field['ID'] . '_' . $i . '" class="rf_multifile_wrapper rf_hidden">
						<input
						type="file"
						id="' . $_field['ID'] . '_' . $i . '"
						name="' . $_field['NAME'] . '_' . $i . '">';
                    if ($i < 4) {
                        $result .= '<span class="rf_command" onclick="document.getElementById(\'multifile_wrapper_' . $_field['ID'] . '_' . ($i + 1) . '\').style.display=\'block\';">Ещё</span>';
                    }
                    $result .= '</div>';
                }
                break;
                // селект с возможностью создать новый элемент
            // селект с возможностью создать новый элемент
            case 'selectplus':
                $result .= '<div class="rf_hidden" id="' . $_field['ID'] . '_creatediv">
					<input type="text" id="' . $_field['ID'] . '_addnew" name="' . $_field['NAME'] . '_addnew">
					</div>
					<span class="rf_command" onclick="document.getElementById(\'' . $_field['ID'] . '_creatediv\').style.display=\'block\';">Добавить элемент</span>';
                // обратите внимание на отсутствие брейка - далене должен идти case 'select'
                // селект
            // селект
            case 'select':
                $result .= '<select ' . $field . '>
					<option value=""' . ($_field['VALUE'] == '' ? ' selected' : '') . '></option>';
                foreach ($_field['ITEMS'] as $k => $v) {
                    $result .= '<option value="' . $k . '"' . ($_field['VALUE'] == $k ? ' selected' : '') . '>' . $v . '</option>';
                }
                $result .= '</select>';
                break;
                // сабмит
            // сабмит
            case 'submit':
                $result .= '<input type="submit" ' . $field . ' value="' . $_field['VALUE'] . '">';
                break;
                // текстареа
            // текстареа
            case 'textarea':
                $result .= '<textarea ' . $field . ' rows="10" cols="60">' . htmlspecialchars($_field['VALUE']) . '</textarea>';
                break;
                // массив текстовых полей с ключами
            // массив текстовых полей с ключами
            case 'textarray':
                if (is_array($_field['VALUE'])) {
                    $sizeof = sizeof($_field['VALUE']);
                } else {
                    $_field['VALUE'] = array(array('' => ''));
                    $sizeof = 5;
                }
                $result .= '<table id="' . $_field['ID'] . '_table">';
                $i = 0;
                foreach ($_field['VALUE'] as &$v) {
                    $result .= '<tr id="' . $_field['ID'] . '_tr_' . $i . '">
						<td><input type="text" class="' . $_field['CLASS'] . ' rf_textarray_key"   name="' . $_field['ID'] . '_key[' . $i . ']"   id="' . $_field['ID'] . '_key_' . $i . '" value="' . htmlspecialchars($k) . '"></td>
						<td><input type="text" class="' . $_field['CLASS'] . ' rf_textarray_value" name="' . $_field['ID'] . '_value[' . $i . ']" id="' . $_field['ID'] . '_key_' . $i . '" value="' . htmlspecialchars($v) . '"></td>
						</tr>';
                    $i++;
                }
                // тут немножко говнеца
                $result .= '</table>
					<script type="text/javascript">
						var last' . $_field['ID'] . '_counter = "' . $i . '";
					</script>
					<span class="rf_command" onclick="
						var newtr = document.createElement(\'tr\');
						newtr.id  = \'' . $_field['ID'] . '_tr_\' + last' . $_field['ID'] . '_counter;
						document.getElementById(\'' . $_field['ID'] . '_table\').appendChild(newtr);
						var newinp       = document.createElement(\'input\');
						newinp.type      = \'text\';
						newinp.className = \'' . $_field['CLASS'] . ' rf_textarray_key\';
						newinp.id        = \'' . $_field['ID'] . '_key_\' + last' . $_field['ID'] . '_counter;
						newinp.name      = \'' . $_field['ID'] . '_key[\' + last' . $_field['ID'] . '_counter + \']\';
						var newtd        = document.createElement(\'td\');
						newtr.appendChild(newtd);
						newtd.appendChild(newinp);
						newinp           = document.createElement(\'input\');
						newinp.type      = \'text\';
						newinp.className = \'' . $_field['CLASS'] . ' rf_textarray_key\';
						newinp.id        = \'' . $_field['ID'] . '_value_\' + last' . $_field['ID'] . '_counter;
						newinp.name      = \'' . $_field['ID'] . '_value[\' + last' . $_field['ID'] . '_counter + \']\';
						newtd            = document.createElement(\'td\');
						newtr.appendChild(newtd);
						newtd.appendChild(newinp)
						last' . $_field['ID'] . '_counter++;
					">Ещё</span>';
                break;
                // привязка к Яндекс-карте
            // привязка к Яндекс-карте
            case 'yandexmap':
                require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/fileman/properties.php';
                ob_start();
                CIBlockPropertyMapYandex::GetPropertyFieldHtml(array('ID' => $_field['ID'], 'NAME' => $_field['LABEL'], 'ACTIVE' => 'Y', 'CODE' => $_field['NAME'], 'MULTIPLE' => 'N', 'USER_TYPE' => 'map_yandex', 'USER_TYPE_SETTINGS' => ''), array('VALUE' => $_field['VALUE']), array('VALUE' => $_field['NAME'], 'FORM_NAM' => CFormRenderer::$formname, 'MODE' => 'FORM_FILL'));
                $cart = ob_get_clean();
                if ($_field['MAP_CENTER']) {
                    $cart = str_replace('map.disableRuler();', 'map.disableRuler(); map.setCenter(new context.YMaps.GeoPoint(' . $_field['MAP_CENTER'] . '), 10, context.YMaps.MapType.MAP);', $cart);
                }
                $result .= $cart;
                break;
                //Пароль
            //Пароль
            case 'password':
                $result .= '<input type="password" ' . $field . '>';
                break;
                // обычный текстовый инпут
            // обычный текстовый инпут
            case 'text':
            default:
                $result .= '<input type="text" ' . $field . ' value="' . htmlspecialchars($_field['VALUE']) . '">';
                break;
        }
        if (ToLower($_field['TYPE'] != 'hidden')) {
            $result .= '</div></div>';
        }
        return $result;
    }
Exemple #2
0
	/**
	 * Запилить!
	 * @param string $mode    режим вызова
	 * @param int    $hole_id номер дефекта
	 */
	public static function Execute($mode, $hole_id)
	{
		global $USER;
		if($mode == 'pdf')
		{
			ob_start();
		}
		
		// path
		$_path = explode('?', ltrim($_SERVER['REQUEST_URI'], '/'));
		$_path[0] = explode('/', trim($_path[0], ' /'));
		
		echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
		// стандартный заголовок ответа
		{
?><st1234reply>
	<requesttime><?= $_SERVER['REQUEST_TIME'] ?></requesttime>
	<requestmethod><?= $_SERVER['REQUEST_METHOD'] ?></requestmethod>
	<replytime><?= time() ?></replytime>
<?
		}
		
		// обработка вызова в зависимости от режима
		switch($mode)
		{
			case 'add':
			{
				// добавление ямы
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				// проверка адреса
				$_POST['address'] = trim($_POST['address']);
				if(!strlen($_POST['address']))
				{
					echo C1234HoleApiXML::Error('NO_ADDRESS');
					break;
				}
				$address    = C1234Hole::Address($_POST['address']);
				$subject_rf = $address['subject_rf'];
				$city       = $address['city'];
				$address    = $address['address'];
				// ворнинги, если надо
				if(!$subject_rf)
				{
					echo C1234HoleApiXML::Warning('CANNOT_REALISE_SUBJECTRF');
				}
				if(!$city)
				{
					echo C1234HoleApiXML::Warning('CANNOT_REALISE_CITY');
				}
				// координаты
				$longitude = false;
				$latitude  = false;
				if(isset($_POST['longitude']))
				{
					$longitude = (float)$_POST['longitude'];
				}
				if(isset($_POST['latitude']))
				{
					$latitude = (float)$_POST['latitude'];
				}
				if(!$latitude || !$longitude && isset($_POST['coordinates']))
				{
					list($latitude, $longitude) = explode(',', $_POST['coordinates']);
					$latitude  = (float)$latitude;
					$longitude = (float)$longitude;
				}
				elseif(!$latitude || !$longitude && isset($_POST['coordinatesr']))
				{
					list($longitude, $latitude) = explode(',', $_POST['coordinatesr']);
					$latitude  = (float)$latitude;
					$longitude = (float)$longitude;
				}
				if(!$latitude)
				{
					echo C1234HoleApiXML::Error('LATITUDE_NOT_SET');
					break;
				}
				if(!$longitude)
				{
					echo C1234HoleApiXML::Error('LONGITUDE_NOT_SET');
					break;
				}
				// типы дефектов
				if(in_array($_POST['type'], C1234HoleApi::$_deprecated_types))
				{
					echo C1234HoleApiXML::Error('DEPRECATED_TYPE');
					break;
				}
				if(!in_array($_POST['type'], C1234HoleApi::$_allowed_types))
				{
					echo C1234HoleApiXML::Error('INCORRECT_TYPE');
					break;
				}
				$files_count = 0;
				foreach($_FILES as $file)
				{
					if($file['error'] != 4)
					{
						if
						(
							$file['type']    != 'image/png' 
							&& $file['type'] != 'image/x-png' 
							&& $file['type'] != 'image/jpeg' 
							&& $file['type'] != 'image/pjpeg' 
							&& $file['type'] != 'image/gif' 
							&& $file['type']
						)
						{
							echo C1234HoleApiXML::Error('UNKNOWN_MIME_TYPE');
							break 2;
						}
						if($file['error'] == 1)
						{
							echo C1234HoleApiXML::Error('TOO_BIG_FILE');
							break 2;
						}
						if($file['error'] == 3)
						{
							echo C1234HoleApiXML::Error('PARTIALLY_UPLOADED_FILE');
							break 2;
						}
						if($file['error'] != 0)
						{
							echo C1234HoleApiXML::Error('CANNOT_UPLOAD_FILE');
							break 2;
						}
						$files_count++;
					}
				}
				if(!$files_count)
				{
					echo C1234HoleApiXML::Error('NO_FILES');
					break;
				}
				if($files_count > ini_get('max_file_uploads'))
				{
					echo C1234HoleApiXML::Error('TOO_MANY_FILES');
					break;
				}
				if($files_count > 10)
				{
					echo C1234HoleApiXML::Warning('FILES_DROPPED');
					$_FILES = array_slice($_FILES, 10);
				}
				// настройки по-умолчанию
				$arParams = array
				(
					'BIG_SIZEX'      => 1024,
					'BIG_SIZEY'      => 1024,
					'MEDIUM_SIZEX'   => 600,
					'MEDIUM_SIZEY'   => 450,
					'SMALL_SIZEX'    => 240,
					'SMALL_SIZEY'    => 160,
					'PREMODERATED'   => 0,
					'MIN_DELAY_TIME' => 60
				);
				// раздобудем настройки из компонента
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/index.php');
				preg_match('/(\'|\")PREMODERATION\1 => (\"|\')(Y|N|)\2/', $raw, $_match);
				if($_match[3] == 'Y')
				{
					$arParams['PREMODERATED'] = 0;
				}
				preg_match('/(\'|\")MIN_DELAY_TIME\1 => (\"|\')\d\2/', $raw, $_match);
				if(isset($_match[3]))
				{
					$arParams['MIN_DELAY_TIME'] = $_match[3] * 60;
				}
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/personal/add/index.php');
				foreach($arParams as $k => $v)
				{
					preg_match('/(\'|\")'.$k.'\1 => (\"|\')[\d]+\2/', $raw, $_match);
					if($_match[3])
					{
						$arParams[$k] = (int)$_match[3];
					}
				}
				$inserted_id = C1234Hole::Add
				(
					array
					(
						'USER_ID'       => $USER->GetID(),
						'LATITUDE'      => $latitude,
						'LONGITUDE'     => $longitude,
						'ADDRESS'       => $city.($address && $city ? ', ' : ' ').$address,
						'COMMENT1'      => $_POST['comment'],
						'COMMENT2'      => '',
						'TYPE'          => $_POST['type'],
						'FILES'         => $_FILES,
						'ADR_SUBJECTRF' => $subject_rf,
						'ADR_CITY'      => $city,
						'PREMODERATED'  => $arParams['PREMODERATED']
					),
					array
					(
						'big_sizex'      => $arParams['BIG_SIZEX'],
						'big_sizey'      => $arParams['BIG_SIZEY'],
						'medium_sizex'   => $arParams['MEDIUM_SIZEX'],
						'medium_sizey'   => $arParams['MEDIUM_SIZEY'],
						'small_sizex'    => $arParams['SMALL_SIZEX'],
						'small_sizey'    => $arParams['SMALL_SIZEY'],
						'min_delay_time' => $arParams['MIN_DELAY_TIME']
					),
					&$error
				);
				if(!$inserted_id)
				{
					echo "\t".'<error code="CANNOT_ADD_DEFECT">'.$error."</error>\n";
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				echo "\t".'<callresult result="1" inserteddefectid="'.$inserted_id.'">ok</callresult>'."\n";
				break;
			}
			case 'authorize':
			{
				// авторизация
				if($USER->IsAuthorized())
				{
					$USER->Logout();
				}
				$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				if($auth_result === true)
				{
					echo C1234HoleApiXML::UserAuthParams();
				}
				else
				{
					echo C1234HoleApiXML::Error('WRONG_CREDENTIALS');
				}
				break;
			}
			case 'checkauth':
			{
				// проверка авторизованности
				$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				if($auth_result === true)
				{
					echo "\t".'<checkauthresult result="1">ok</checkauthresult>'."\n";
				}
				else
				{
					echo "\t".'<checkauthresult result="0">fail</checkauthresult>'."\n";
				}
				break;
			}
			case 'delete':
			{
				// удаление ямы
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'fresh')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if(C1234Hole::Delete($hole_id))
				{
					echo "\t".'<callresult result="1">ok</callresult>'."\n";
				}
				else
				{
					echo "\t".'<error code="CANNOT_DELETE_DEFECT">'.$error.'</error>'."\n"
						."\t".'<callresult result="0">fail</callresult>'."\n";
				}
				break;
			}
			case 'exit':
			{
				// разлогиниться
				$USER->Logout();
				echo C1234HoleApiXML::ProcedureResult();
				break;
			}
			case 'geocode':
			{
				// предварительная авторизация
				if($_POST['passwordhash'])
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				}
				else
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				}
				if($auth_result !== true)
				{
					echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
					break;
				}
				if(!strlen($_POST['geocode']))
				{
					echo C1234HoleApiXML::Error('GEOCODE_EMPTY_REQUEST');
					break;
				}
				require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/fileman/properties.php');
				$c = curl_init('http://geocode-maps.yandex.ru/1.x/?format=xml&geocode='.urlencode($_POST['geocode']).'&key='.CIBlockPropertyMapYandex::_GetMapKey('yandex', $_SERVER['SERVER_NAME']));
				ob_start();
				curl_exec($c);
				$out = explode("\n", ob_get_clean());
				$cinfo = curl_getinfo($c);
				unset($out[0]);
				curl_close($c);
				if
				(
					$cinfo['http_code'] != 200
					|| !sizeof($out)
					|| substr($cinfo['content_type'], 0, 8) != 'text/xml'
					|| !$cinfo['size_download']
				)
				{
					echo C1234HoleApiXML::Error('GEOCODE_ERROR');
					break;
				}
				echo "\t".'<geocode>'."\n";
				foreach($out as $str)
				{
					echo "\t\t".str_replace('  ', "\t", $str)."\n";
				}
				echo "\t".'</geocode>'."\n";
				break;
			}
			case 'getgibddhead':
			{
				// узнать ФИО начальника ГИБДД
				// предварительная авторизация
				if($_POST['passwordhash'])
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				}
				else
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				}
				if($auth_result !== true)
				{
					echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
					break;
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'] || $hole['USER_ID'] != $USER->GetID())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					break;
				}
				if(!CModule::IncludeModule('iblock'))
				{
					echo C1234HoleApiXML::Error('INTERNAL');
					break;
				}
				if(!$hole['ADR_SUBJECTRF'])
				{
					echo C1234HoleApiXML::Warning('NO_SUBJECTRF_ID');
				}
				$res = CIBlockElement::GetList(array(), array('IBLOCK_CODE' => 'GIBDD_HEADS', 'PROPERTY_SUBJECT_ID' => $hole['ADR_SUBJECTRF']), array('PROPERTY_FIO', 'PROPERTY_POST', 'PROPERTY_POST_DATIVE', 'PROPERTY_FIO_DATIVE', 'PROPERTY_POST'));
				$arElement = $res->Fetch();
				$arElement['GIBDD'] = explode(' ', $arElement['PROPERTY_POST_VALUE']);
				$arElement['GIBDD'] = array_slice($arElement['GIBDD'], 1);
				if(ToUpper($arElement['GIBDD'][0]) == 'УПРАВЛЕНИЯ')
				{
					$arElement['GIBDD'][0] = 'УПРАВЛЕНИЕ';
				}
				$arElement['GIBDD'] = implode(' ', $arElement['GIBDD']);
				echo "\t".'<gibddhead subjectid="'.$hole['ADR_SUBJECTRF'].'">'."\n";
				echo "\t\t".'<nominative post="'.htmlspecialchars($arElement['PROPERTY_POST_VALUE']).'" gibdd="'.htmlspecialchars($arElement['GIBDD']).'">'.htmlspecialchars($arElement['PROPERTY_FIO_VALUE']).'</nominative>'."\n";
				echo "\t\t".'<dative post="'.htmlspecialchars($arElement['PROPERTY_POST_DATIVE_VALUE']).'">'.htmlspecialchars($arElement['PROPERTY_FIO_DATIVE_VALUE']).'</dative>'."\n";
				echo "\t".'</gibddhead>'."\n";
				break;
			}
			case 'getregions':
			{
				// список регионов
				echo C1234HoleApiXML::GetRegions();
				break;
			}
			case 'getgibddheadbyregion':
			{
				$id=0;
				if (isset($_GET['region_id']) && $_GET['region_id']) $id=$_GET['region_id'];
				if (isset($_POST['region_id']) && $_POST['region_id']) $id=$_POST['region_id'];
				if ($id && CGreensightRFSubject::isID($id)) echo C1234HoleApiXML::GetRegionGIBDD($id);
				else echo C1234HoleApiXML::Error('NOT_FOUND'); 
				break;
			}			
			case 'getupdmethods':
			{
				// получить список возможных методов обновления дефекта
				if($hole_id)
				{
					// предварительная авторизация
					if($_POST['passwordhash'])
					{
						$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
					$hole = C1234Hole::GetById($hole_id);
					if(!$hole['ID'])
					{
						echo C1234HoleApiXML::Error('NOT_FOUND');
						break;
					}
					if($hole['USER_ID'] != $USER->GetID())
					{
						echo C1234HoleApiXML::Error('NOT_FOUND');
						break;
					}
				}
				if($hole['STATE'] == 'fresh' || !$hole_id)
				{
?>
	<state id="fresh">
		<method name="update">
			<field>address</field>
			<field>latitude</field>
			<field>longitude</field>
			<field>coordinates</field>
			<field>coordinatesr</field>
			<field>comment</field>
			<field>type</field>
			<field>files</field>
			<field>deletefiles</field>
		</method>
		<method name="set_inprogress"></method>
		<method name="set_fixed">
			<field>files</field>
			<field>comment</field>
		</method>
	</state>
<?
				}
				if($hole['STATE'] == 'inprogress' || !$hole_id)
				{
?>
	<state id="inprogress">
		<method name="revoke"></method>
		<method name="set_replied">
			<field>files</field>
			<field>comment</field>
		</method>
		<method name="set_fixed">
			<field>files</field>
			<field>comment</field>
		</method>
	</state>
<?
				}
				if($hole['STATE'] == 'fixed' || !$hole_id)
				{
					echo "\t".'<state id="fixed">';
					if(!$hole && !sizeof($hole['pictures']['fixed']))
					{
						echo "\n\t\t".'<method name="set_inprogress"></method>'."\n";
					}
					echo "\t".'</state>'."\n";
				}
				if($hole['STATE'] == 'achtung' || !$hole_id)
				{
?>
	<state id="achtung">
		<method name="set_fixed">
			<field>files</field>
			<field>comment</field>
		</method>
		<method name="to_prosecutor"></method>
		<method name="set_replied">
			<field>files</field>
			<field>comment</field>
		</method>
	</state>
<?
				}
				if($hole['STATE'] == 'prosecutor' || !$hole_id)
				{
?>
	<state id="prosecutor">
		<method name="revoke_p"></method>
		<method name="set_fixed">
			<field>files</field>
			<field>comment</field>
		</method>
	</state>
<?
				}
				if($hole['STATE'] == 'gibddre' || !$hole_id)
				{
?>
	<state id="gibddre">
		<method name="set_fixed">
			<field>files</field>
			<field>comment</field>
		</method>
		<method name="set_replied">
			<field>files</field>
			<field>comment</field>
			<field>deletefiles</field>
		</method>
	</state>
<?
				}
				break;
			}
			case 'hole-cart':
			{
				// карточка ямы
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/index.php');
				preg_match('/(\'|\")PREMODERATION\1[\s]*=>[\s]*(\"|\')(Y|N)\2/', $raw, $_match);
				$bPremoderation = $_match[3] == 'Y';
				$hole = C1234Hole::GetById($hole_id);
				if($hole && (!$bPremoderation || ($bPremoderation && $hole['PREMODERATED'])))
				{
					echo C1234HoleApiXML::Hole($hole, 0);
				}
				else
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
				}
				break;
			}
			case 'holes-list':
			{
				// список ям
				// получение настроек компонента списка ям
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/index.php');
				preg_match('/(\'|\")HOLES_PER_PAGE\1[\s]*=>[\s]*(\"|\')([\d]+)\2/', $raw, $_match);
				$default_limit = $_match[3];
				if(!$default_limit)
				{
					$default_limit = 30;
				}
				if($default_limit > 2000)
				{
					$default_limit = 2000;
				}
				preg_match('/(\'|\")PREMODERATION\1[\s]*=>[\s]*(\"|\')(Y|N)\2/', $raw, $_match);
				$bPremoderation = $_match[3] == 'Y';
				// сортировка
				$arSort = array('ID' => 'desc');
				// фильтр
				$arFilter = array();
				if(isset($_REQUEST['filter_rf_subject_id']))
				{
					$arFilter['ADR_SUBJECTRF'] = (int)$_REQUEST['filter_rf_subject_id'];
				}
				if($_REQUEST['filter_city'])
				{
					$arFilter['ADR_CITY'] = htmlspecialchars(str_replace('%', '', $_REQUEST['filter_city']));
				}
				if($_REQUEST['filter_type'])
				{
					$arFilter['TYPE'] = htmlspecialchars($_REQUEST['filter_type']);
				}
				if($_REQUEST['filter_status'])
				{
					$arFilter['STATE'] = htmlspecialchars($_REQUEST['filter_status']);
				}
				if($bPremoderation)
				{
					$arFilter['PREMODERATED'] = 1;
				}
				// параметры навигации
				$arNavParams = array();
				if($_REQUEST['limit'])
				{
					$arNavParams['limit'] = (int)$_REQUEST['limit'];
				}
				if(!$arNavParams['limit'])
				{
					$arNavParams['limit'] = $default_limit;
				}
				if($_REQUEST['offset'])
				{
					$arNavParams['offset'] = (int)$_REQUEST['offset'];
				}
				if(!$arNavParams['offset'])
				{
					$arNavParams['offset'] = (int)$_REQUEST['page'] * $default_limit;
				}
				if($_REQUEST['page'])
				{
					$arNavParams['limit']  = $default_limit;
					$arNavParams['offset'] = (int)$_REQUEST['page'] * $default_limit;
				}
				// выборка ям
				$_holes = C1234Hole::GetList($arSort, $arFilter, $arNavParams, &$pages_count);
				// вывод результатов
				$_users = array();
				{
?>
	<sort><? if(sizeof($arSort)) { echo "\n\t"; } foreach($arSort as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></sort>
	<filter><? if(sizeof($arFilter)) { echo "\n\t"; } foreach($arFilter as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></filter>
	<navigation><? if(sizeof($arNavParams)) { echo "\n\t"; } foreach($arNavParams as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></navigation>
	<defectslist><? if(sizeof($_holes)) { echo "\n\t"; } foreach($_holes as $hole):
	echo C1234HoleApiXML::Hole($hole, 1);
	endforeach; ?></defectslist>
<?
				}
				break;
			}
			case 'pdf':
			{
				// создание и выгрузка пдф
				// предварительная авторизация
				if($_POST['passwordhash'])
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				}
				else
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				}
				if($auth_result !== true)
				{
					ob_end_flush();
					echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
					break;
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'] || $hole['USER_ID'] != $USER->GetID())
				{
					ob_end_flush();
					echo C1234HoleApiXML::Error('NOT_FOUND');
					break;
				}
				$date3 = $hole['DATE_STATUS'];
				$date2 = $hole['STATE'] == 'gibddre' || $hole['STATE'] == 'achtung' ? $hole['DATE_SENT'] : time();
				if($hole['STATE'] == 'gibddre' && $_path[0][2] == 'pdf_prosecutor')
				{
					$state = 'prosecutor2';
				}
				elseif($hole['STATE'] == 'achtung' && $_path[0][2] == 'pdf_prosecutor')
				{
					$state = 'prosecutor2';
				}
				elseif(($hole['STATE'] == 'fresh' || $hole['STATE'] == 'inprogress') && $_path[0][2] == 'pdf_gibdd')
				{
					$state = $hole['TYPE'];
				}
				else
				{
					ob_end_flush();
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					break;
				}
				header_remove('Content-Type');
				$_images = array();
				foreach($hole['pictures']['original']['fresh'] as $src)
				{
					$_images[] = $_SERVER['DOCUMENT_ROOT'].$src;
				}
				ob_end_clean();
				$PDF = new pdf1234();
				$PDF->getpdf
				(
					$state,
					array
					(
						'chief'       => iconv('utf-8', 'windows-1251', $_POST['to']),
						'fio'         => iconv('utf-8', 'windows-1251', $_POST['from']),
						'address'     => iconv('utf-8', 'windows-1251', $_POST['postaddress']),
						'date1.day'   => date('d', $hole['DATE_CREATED']),
						'date1.month' => date('m', $hole['DATE_CREATED']),
						'date1.year'  => date('Y', $hole['DATE_CREATED']),
						'street'      => iconv('utf-8', 'windows-1251', $_POST['holeaddress']),
						'date2.day'   => date('d', $date2),
						'date2.month' => date('m', $date2),
						'date2.year'  => date('Y', $date2),
						'signature'   => iconv('utf-8', 'windows-1251', $_POST['signature']),
						'reason'      => iconv('utf-8', 'windows-1251', $_POST['comment']),
						'date3.day'   => date('d', $date3),
						'date3.month' => date('m', $date3),
						'date3.year'  => date('Y', $date3),
						'gibdd'       => iconv('utf-8', 'windows-1251', $_POST['gibdd']),
						'gibdd_reply' => iconv('utf-8', 'windows-1251', $_POST['gibdd_reply'])
					),
					$_images
				);
				die();
				break;
			}
			case 'personal-hole-cart':
			{
				// карточка своей ямы
				// предварительная авторизация
				if($_POST['passwordhash'])
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				}
				else
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				}
				if($auth_result !== true)
				{
					echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
					break;
				}
				$hole = C1234Hole::GetById((int)$hole_id);
				if($hole['USER_ID'] != $USER->GetID())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
				}
				else
				{
					echo C1234HoleApiXML::Hole($hole, 0);
				}
				break;
			}
			case 'personal-holes-list':
			{
				// список своих ям
				// предварительная авторизация
				if($_POST['passwordhash'])
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
				}
				else
				{
					$auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
				}
				if($auth_result !== true)
				{
					echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
					break;
				}
				// получение настроек компонента списка ям
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/index.php');
				preg_match('/(\'|\")HOLES_PER_PAGE\1[\s]*=>[\s]*(\"|\')([\d]+)\2/', $raw, $_match);
				$default_limit = $_match[3];
				if(!$default_limit)
				{
					$default_limit = 30;
				}
				if($default_limit > 2000)
				{
					$default_limit = 2000;
				}
				// сортировка
				$arSort = array('ID' => 'desc');
				// фильтр
				$arFilter = array('USER_ID' => $USER->GetID());
				if(isset($_REQUEST['filter_rf_subject_id']))
				{
					$arFilter['ADR_SUBJECTRF'] = (int)$_REQUEST['filter_rf_subject_id'];
				}
				if($_REQUEST['filter_city'])
				{
					$arFilter['ADR_CITY'] = htmlspecialchars(str_replace('%', '', $_REQUEST['filter_city']));
				}
				if($_REQUEST['filter_type'])
				{
					$arFilter['TYPE'] = htmlspecialchars($_REQUEST['filter_type']);
				}
				if($_REQUEST['filter_status'])
				{
					$arFilter['STATE'] = htmlspecialchars($_REQUEST['filter_status']);
				}
				// параметры навигации
				$arNavParams = array();
				if($_REQUEST['limit'])
				{
					$arNavParams['limit'] = (int)$_REQUEST['limit'];
				}
				if(!$arNavParams['limit'])
				{
					$arNavParams['limit'] = $default_limit;
				}
				if($_REQUEST['offset'])
				{
					$arNavParams['offset'] = (int)$_REQUEST['offset'];
				}
				if(!$arNavParams['offset'])
				{
					$arNavParams['offset'] = (int)$_REQUEST['page'] * $default_limit;
				}
				if($_REQUEST['page'])
				{
					$arNavParams['limit']  = $default_limit;
					$arNavParams['offset'] = (int)$_REQUEST['page'] * $default_limit;
				}
				// выборка ям
				$_holes = C1234Hole::GetList($arSort, $arFilter, $arNavParams, &$pages_count);
				// вывод результатов
				$_users = array();
				{
?>
	<sort><? if(sizeof($arSort)) { echo "\n\t"; } foreach($arSort as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></sort>
	<filter><? if(sizeof($arFilter)) { echo "\n\t"; } foreach($arFilter as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></filter>
	<navigation><? if(sizeof($arNavParams)) { echo "\n\t"; } foreach($arNavParams as $k => $v): ?>
	<item code="<?= $k ?>"><?= $v ?></item>
	<? endforeach; ?></navigation>
	<defectslist><? if(sizeof($_holes)) { echo "\n\t"; } foreach($_holes as $hole):
	echo C1234HoleApiXML::Hole($hole, 1);
	endforeach; ?></defectslist>
<?
				}
				break;
			}
			case 'update-common':
			{
				// обычное обновление ямы
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'fresh')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_fields = array('COMMENT1' => trim($_POST['comment']));
				$_params = array
				(
					'big_sizex'      => 1024,
					'big_sizey'      => 1024,
					'medium_sizex'   => 600,
					'medium_sizey'   => 450,
					'small_sizex'    => 240,
					'small_sizey'    => 160
				);
				// проверка адреса
				$_POST['address'] = trim($_POST['address']);
				if(strpos($_POST['address'], $hole['ADDRESS']) === 0)
				{
					// уродливая подпорка
					// если адрес совпадает с тем, или больше чем, что уже есть,
					// меняем только адрес
					$_fields['ADR_SUBJECTRF'] = $hole['ADR_SUBJECTRF'];
					$_fields['ADR_CITY']      = $hole['ADR_CITY'];
					$_fields['ADDRESS']       = $_POST['address'];
				}
				elseif(strlen($_POST['address']))
				{
					$address                  = C1234Hole::Address($_POST['address']);
					$_fields['ADR_SUBJECTRF'] = $address['subject_rf'];
					$_fields['ADR_CITY']      = $address['city'];
					$_fields['ADDRESS']       = $address['city'].(strlen($address['address']) && strlen($address['city'])? ', ' : '').$address['address'];
					// ворнинги, если надо
					if(!$_fields['ADR_SUBJECTRF'])
					{
						echo C1234HoleApiXML::Warning('CANNOT_REALISE_SUBJECTRF');
					}
					if(!$_fields['ADR_CITY'])
					{
						echo C1234HoleApiXML::Warning('CANNOT_REALISE_CITY');
					}
				}
				// координаты
				$longitude = false;
				$latitude  = false;
				if(isset($_POST['longitude']))
				{
					$longitude = (float)$_POST['longitude'];
				}
				if(isset($_POST['latitude']))
				{
					$latitude = (float)$_POST['latitude'];
				}
				if(!$latitude || !$longitude && isset($_POST['coordinates']))
				{
					list($latitude, $longitude) = explode(',', $_POST['coordinates']);
					$latitude  = (float)$latitude;
					$longitude = (float)$longitude;
				}
				elseif(!$latitude || !$longitude && isset($_POST['coordinatesr']))
				{
					list($longitude, $latitude) = explode(',', $_POST['coordinatesr']);
					$latitude  = (float)$latitude;
					$longitude = (float)$longitude;
				}
				if($latitude)
				{
					$_fields['LATITUDE'] = $latitude;
				}
				if($longitude)
				{
					$_fields['LONGITUDE'] = $longitude;
				}
				// типы дефектов
				if(in_array($_POST['type'], C1234HoleApi::$_deprecated_types))
				{
					echo C1234HoleApiXML::Error('DEPRECATED_TYPE');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if(!in_array($_POST['type'], C1234HoleApi::$_allowed_types))
				{
					echo C1234HoleApiXML::Error('INCORRECT_TYPE');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_fields['TYPE'] = $_POST['type'];
				// разберёмся с файлами
				$files_count = 0;
				foreach($_FILES as $file)
				{
					if($file['error'] != 4)
					{
						if
						(
							$file['type']    != 'image/png' 
							&& $file['type'] != 'image/x-png' 
							&& $file['type'] != 'image/jpeg' 
							&& $file['type'] != 'image/pjpeg' 
							&& $file['type'] != 'image/gif' 
							&& $file['type']
						)
						{
							echo C1234HoleApiXML::Error('UNKNOWN_MIME_TYPE');
							break 2;
						}
						if($file['error'] == 1)
						{
							echo C1234HoleApiXML::Error('TOO_BIG_FILE');
							break 2;
						}
						if($file['error'] == 3)
						{
							echo C1234HoleApiXML::Error('PARTIALLY_UPLOADED_FILE');
							break 2;
						}
						if($file['error'] != 0)
						{
							echo C1234HoleApiXML::Error('CANNOT_UPLOAD_FILE');
							break 2;
						}
						$files_count++;
					}
				}
				if($files_count > ini_get('max_file_uploads'))
				{
					echo C1234HoleApiXML::Error('TOO_MANY_FILES');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				// разберёмся с удаляемыми файлами
				if(!is_array($_POST['deletefiles']))
				{
					$_fields['DELETEFILES'] = explode(',', $_POST['deletefiles']);
				}
				foreach($_fields['DELETEFILES'] as &$deletefile)
				{
					$deletefile = trim($deletefile);
				}
				if
				(
					sizeof($hole['pictures']['original']['fresh'])
					+ sizeof($hole['pictures']['original']['gibddre'])
					+ sizeof($hole['pictures']['original']['fixed'])
					- sizeof($_fields['DELETEFILES'])
					+ $files_count > 100
				)
				{
					echo C1234HoleApiXML::Warning('FILES_LIMIT_REACHED');
					echo C1234HoleApiXML::Warning('FILES_DROPPED');
					$slice = 100 - sizeof($hole['pictures']['original']['fresh'])
						- sizeof($hole['pictures']['original']['gibddre'])
						- sizeof($hole['pictures']['original']['fixed'])
						+ sizeof($_fields['DELETEFILES']);
					if($slice > 0)
					{
						$_fields['FILES'] = array_slice($_FILES, max(10, $slice));
					}
				}
				elseif($files_count > 10)
				{
					echo C1234HoleApiXML::Warning('FILES_DROPPED');
					$_fields['FILES'] = array_slice($_FILES, 10);
				}
				else
				{
					$_fields['FILES'] = $_FILES;
				}
				// раздобудем настройки из компонента
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/personal/add/index.php');
				foreach($arParams as $k => $v)
				{
					preg_match('/(\'|\")'.$k.'\1 => (\"|\')[\d]+\2/', $raw, $_match);
					if($_match[3])
					{
						$_params[ToLower($k)] = (int)$_match[3];
					}
				}
				// теперь можно и обновить
				$mode = 'update';
				break;
			}
			case 'update-revoke':
			{
				// отозвать заявление из ГИБДД
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'inprogress')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_params = array();
				$_fields = array
				(
					'DATE_STATUS' => time(),
					'STATE'       => 'fresh'
				);
				$mode = 'update';
				break;
			}
			case 'update-revokep':
			{
				// отозвать заявление из прокуратуры
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'prosecutor')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_params = array();
				$_fields = array
				(
					'DATE_STATUS'          => time(),
					'DATE_SENT_PROSECUTOR' => 0,
					'STATE'                => 'achtung'
				);
				$mode = 'update';
				break;
			}
			case 'update-setfixed':
			{
				// пометка ямы как исправленной
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] == 'fixed')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_fields = array
				(
					'STATE'       => 'fixed',
					'DATE_STATUS' => time(),
					'COMMENT2'    => trim($_POST['comment'])
				);
				$_params = array
				(
					'big_sizex'      => 1024,
					'big_sizey'      => 1024,
					'medium_sizex'   => 600,
					'medium_sizey'   => 450,
					'small_sizex'    => 240,
					'small_sizey'    => 160
				);
				// разберёмся с файлами
				$files_count = 0;
				foreach($_FILES as $file)
				{
					if($file['error'] != 4)
					{
						if
						(
							$file['type']    != 'image/png' 
							&& $file['type'] != 'image/x-png' 
							&& $file['type'] != 'image/jpeg' 
							&& $file['type'] != 'image/pjpeg' 
							&& $file['type'] != 'image/gif' 
							&& $file['type']
						)
						{
							echo C1234HoleApiXML::Error('UNKNOWN_MIME_TYPE');
							break 2;
						}
						if($file['error'] == 1)
						{
							echo C1234HoleApiXML::Error('TOO_BIG_FILE');
							break 2;
						}
						if($file['error'] == 3)
						{
							echo C1234HoleApiXML::Error('PARTIALLY_UPLOADED_FILE');
							break 2;
						}
						if($file['error'] != 0)
						{
							echo C1234HoleApiXML::Error('CANNOT_UPLOAD_FILE');
							break 2;
						}
						$files_count++;
					}
				}
				if($files_count > ini_get('max_file_uploads'))
				{
					echo C1234HoleApiXML::Error('TOO_MANY_FILES');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($files_count > 10)
				{
					echo C1234HoleApiXML::Warning('FILES_DROPPED');
					$_fields['FILES'] = array_slice($_FILES, 10);
				}
				else
				{
					$_fields['FILES'] = $_FILES;
				}
				// раздобудем настройки из компонента
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/personal/add/index.php');
				foreach($arParams as $k => $v)
				{
					preg_match('/(\'|\")'.$k.'\1 => (\"|\')[\d]+\2/', $raw, $_match);
					if($_match[3])
					{
						$_params[ToLower($k)] = (int)$_match[3];
					}
				}
				// теперь можно и обновить
				$mode = 'update';
				break;
			}
			case 'update-setinprogress':
			{
				// поставить яме статус "в процессе"
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'fresh' && !($hole['STATE'] == 'fixed' && !sizeof($hole['pictures']['original']['fixed'])))
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_params = array();
				$_fields = array
				(
					'DATE_STATUS' => time(),
					'STATE'       => 'inprogress'
				);
				if($hole['STATE'] == 'fresh')
				{
					$_fields['DATE_SENT'] = time();
				}
				else
				{
					if($hole['DATE_SENT'] < time() - 37 * 86400)
					{
						$_fields['STATE'] = 'achtung';
					}
					if($hole['GIBDD_REPLY_RECEIVED'])
					{
						$_fields['STATE'] = 'gibddre';
					}
					if($hole['DATE_SENT_PROSECUTOR'])
					{
						$_fields['STATE'] = 'prosecutor';
					}
					if(!$hole['DATE_SENT'])
					{
						$_fields['STATE'] = 'fresh';
					}
				}
				$mode = 'update';
				break;
			}
			case 'update-setreplied':
			{
				// поставить яму в статус "получен ответ из гибдд"
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'inprogress' && $hole['STATE'] != 'gibddre' && $hole['STATE'] != 'achtung')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_fields = array
				(
					'STATE'                => 'gibddre',
					'DATE_STATUS'          => time(),
					'GIBDD_REPLY_RECEIVED' => 1,
					'COMMENT_GIBDD_REPLY'  => trim($_POST['comment'])
				);
				$_params = array
				(
					'big_sizex'      => 1024,
					'big_sizey'      => 1024,
					'medium_sizex'   => 600,
					'medium_sizey'   => 450,
					'small_sizex'    => 240,
					'small_sizey'    => 160
				);
				
				// если надо удалить файлы, удалим
				if(!is_array($_REQUEST['deletefiles']))
				{
					$_fields['DELETEFILES'] = explode(',', $_REQUEST['deletefiles']);
				}
				foreach($_fields['DELETEFILES'] as &$f)
				{
					$f = trim($f);
					if(strlen($f) && substr($f, 0, 2) == 'gr')
					{
						unlink($_SERVER['DOCUMENT_ROOT'].'/upload/st1234/original/'.$hole_id.'/'.$f);
						unlink($_SERVER['DOCUMENT_ROOT'].'/upload/st1234/medium/'.$hole_id.'/'.$f);
						unlink($_SERVER['DOCUMENT_ROOT'].'/upload/st1234/small/'.$hole_id.'/'.$f);
					}
				}
				unset($_REQUEST['deletefiles']);
				unset($_fields['DELETEFILES']);
				
				// разберёмся с загружаемыми файлами
				$files_count = 0;
				foreach($_FILES as $file)
				{
					if($file['error'] != 4)
					{
						if
						(
							$file['type']    != 'image/png' 
							&& $file['type'] != 'image/x-png' 
							&& $file['type'] != 'image/jpeg' 
							&& $file['type'] != 'image/pjpeg' 
							&& $file['type'] != 'image/gif' 
							&& $file['type']
						)
						{
							echo C1234HoleApiXML::Error('UNKNOWN_MIME_TYPE');
							break 2;
						}
						if($file['error'] == 1)
						{
							echo C1234HoleApiXML::Error('TOO_BIG_FILE');
							break 2;
						}
						if($file['error'] == 3)
						{
							echo C1234HoleApiXML::Error('PARTIALLY_UPLOADED_FILE');
							break 2;
						}
						if($file['error'] != 0)
						{
							echo C1234HoleApiXML::Error('CANNOT_UPLOAD_FILE');
							break 2;
						}
						$files_count++;
					}
				}
				if($files_count > ini_get('max_file_uploads'))
				{
					echo C1234HoleApiXML::Error('TOO_MANY_FILES');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($files_count > 10)
				{
					echo C1234HoleApiXML::Warning('FILES_DROPPED');
					$_fields['FILES'] = array_slice($_FILES, 10);
				}
				else
				{
					$_fields['FILES'] = $_FILES;
				}
				// раздобудем настройки из компонента
				$raw = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/personal/add/index.php');
				foreach($arParams as $k => $v)
				{
					preg_match('/(\'|\")'.$k.'\1 => (\"|\')[\d]+\2/', $raw, $_match);
					if($_match[3])
					{
						$_params[ToLower($k)] = (int)$_match[3];
					}
				}
				// теперь можно и обновить
				$mode = 'update';
				break;
			}
			case 'update-toprosecutor':
			{
				// поменять статус на "жалоба в прокуратуру подана"
				// предварительная авторизация
				if(!$USER->GetID())
				{
					if($_POST['passwordhash'])
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['passwordhash'], 'N', 'N');
					}
					else
					{
						$auth_result = $auth_result = $USER->Login($_POST['login'], $_POST['password'], 'N', 'Y');
					}
					if($auth_result !== true)
					{
						echo C1234HoleApiXML::Error('AUTHORIZATION_REQUIRED');
						break;
					}
				}
				$hole = C1234Hole::GetById($hole_id);
				if(!$hole['ID'])
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['USER_ID'] != $USER->GetID() && !$USER->IsAdmin())
				{
					echo C1234HoleApiXML::Error('NOT_FOUND');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				if($hole['STATE'] != 'achtung')
				{
					echo C1234HoleApiXML::Error('UNAPPROPRIATE_METHOD');
					echo "\t".'<callresult result="0">fail</callresult>'."\n";
					break;
				}
				$_params = array();
				$_fields = array
				(
					'DATE_STATUS'          => time(),
					'DATE_SENT_PROSECUTOR' => time(),
					'STATE'                => 'prosecutor'
				);
				$mode = 'update';
				break;
			}
			case 'uplparams':
			{
				// предельные параметры загружаемых файлов
				echo "\t".'<maxpostsize>'.ini_get('post_max_size').'</maxpostsize>'."\n";
				echo "\t".'<maxfilesize>'.ini_get('upload_max_filesize').'</maxfilesize>'."\n";
				echo "\t".'<maxfilescount>10</maxfilescount>'."\n";
				break;
			}
			default:
			{
				echo C1234HoleApiXML::Error('NOT_IMPLEMENTED');
				break;
			}
		}
		if($mode == 'update')
		{
			// единая для всех режимов измнения ямы процедура собственно изменения
			if(C1234Hole::Update($hole_id, $_fields, $_params, &$error))
			{
				echo "\t".'<callresult result="1">ok</callresult>'."\n";
			}
			else
			{
				echo "\t".'<error code="CANNOT_UPDATE_DEFECT">'.$error.'</error>'."\n"
					."\t".'<callresult result="0">fail</callresult>'."\n";
			}
		}
		
		// стандартный конец ответа
		echo "</st1234reply>";
		
		return;
	}
Exemple #3
0
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Карта дефектов");
?>

<div id="addmess" style="display:none; color:#0C0"><p><b>Выберите место на карте и кликните по нему два раза, чтобы отметить расположение ямы.</b></p></div>

<?php 
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/fileman/properties.php';
?>
<?$APPLICATION->IncludeComponent("greensight:holes.yandex.view", ".default", array(
	"KEY" => CIBlockPropertyMapYandex::_GetMapKey("yandex",$_SERVER["SERVER_NAME"]),
	"INIT_MAP_TYPE" => "MAP",
	"MAP_DATA" => "a:3:{s:10:\"yandex_lat\";s:7:\"55.7383\";s:10:\"yandex_lon\";s:7:\"37.5946\";s:12:\"yandex_scale\";i:10;}",
	"MAP_WIDTH" => "100%",
	"MAP_HEIGHT" => "600",
	"CONTROLS" => array(
		0 => "TOOLBAR",
		1 => "ZOOM",
		2 => "MINIMAP",
		3 => "TYPECONTROL",
		4 => "SCALELINE",
	),
	"OPTIONS" => array(
		0 => "ENABLE_SCROLL_ZOOM",
		1 => "ENABLE_DBLCLICK_ZOOM",
		2 => "ENABLE_DRAGGING",
	),
	"MAP_ID" => ""
	),
	false
Exemple #4
0
    foreach (C1234HoleApi::$_allowed_types as $type) {
        $arResult['FORM']['FIELDS']['TYPE']['ITEMS'][$type] = GetMessage('FORM_HOLE_TYPE_' . $type);
    }
    $arResult['FORM']['FIELDS']['ADDRESS'] = array('ID' => 'ADDRESS', 'NAME' => 'address', 'TYPE' => 'textarea', 'LABEL' => GetMessage('FORM_HOLE_ADDRESS'), 'VALUE' => htmlspecialcharsEx($hole_id ? $arElement['ADDRESS'] : $_POST['address']));
    $arResult['FORM']['FIELDS']['COMMENT1'] = array('ID' => 'COMMENT1', 'NAME' => 'comment', 'TYPE' => 'textarea', 'LABEL' => GetMessage('FORM_HOLE_COMMENT'), 'VALUE' => htmlspecialcharsEx($hole_id ? $arElement['COMMENT1'] : $_POST['comment']));
} elseif ($arParams['FIX_ID']) {
    $arResult['FORM']['FIELDS']['FIX_ID'] = array('ID' => 'FIX_ID', 'NAME' => 'FIX_ID', 'TYPE' => 'hidden', 'VALUE' => $arParams['FIX_ID']);
    $arResult['FORM']['FIELDS']['COMMENT2'] = array('ID' => 'COMMENT2', 'NAME' => 'comment', 'TYPE' => 'textarea', 'LABEL' => GetMessage('FORM_HOLE_COMMENT'), 'VALUE' => htmlspecialcharsEx($_POST['comment']));
} elseif ($arParams['GIBDD_REPLY_ID']) {
    $arResult['FORM']['FIELDS']['GIBDD_REPLY_ID'] = array('ID' => 'GIBDD_REPLY_ID', 'NAME' => 'GIBDD_REPLY_ID', 'TYPE' => 'hidden', 'VALUE' => $arParams['GIBDD_REPLY_ID']);
    $arResult['FORM']['FIELDS']['PHOTOS'] = array('ID' => 'PHOTOS', 'NAME' => 'PHOTOS', 'TYPE' => 'multifile', 'LABEL' => GetMessage('FORM_HOLE_GIBDD_REPLY_PHOTOS'), 'REQUIRED' => true);
    $arResult['FORM']['FIELDS']['COMMENT2'] = array('ID' => 'COMMENT2', 'NAME' => 'comment', 'TYPE' => 'textarea', 'LABEL' => GetMessage('FORM_HOLE_COMMENT2'), 'VALUE' => htmlspecialcharsEx($_POST['comment'] ? $_POST['comment'] : $arElement['COMMENT_GIBDD_REPLY']));
}
$arResult['FORM']['FIELDS']['SUBMIT'] = array('TYPE' => 'submit', 'VALUE' => $hole_id ? GetMessage('FORM_HOLE_SUBMIT_EDIT') : GetMessage('FORM_HOLE_SUBMIT_ADD'));
$arResult['HOLE'] = $arElement;
$arResult['YANDEX_MAP_KEY'] = CIBlockPropertyMapYandex::_GetMapKey('yandex', $_SERVER['SERVER_NAME']);
// маленький штришок
if ($arParams['FIX_ID']) {
    $APPLICATION->SetTitle(GetMessage('HOLE_SET_FIXED'));
}
$arResult['upload_max_filesize'] = ini_get('upload_max_filesize');
if (!$arResult['upload_max_filesize']) {
    $arResult['upload_max_filesize'] = '1&nbsp;' . GetMessage('MB');
} else {
    $arResult['upload_max_filesize'] = substr($arResult['upload_max_filesize'], 0, strlen($arResult['upload_max_filesize']) - 1) . '&nbsp;' . GetMessage(ToUpper(substr($arResult['upload_max_filesize'], strlen($arResult['upload_max_filesize']) - 1)) . 'B');
}
$arResult['post_max_size'] = ini_get('post_max_size');
if (!$arResult['post_max_size']) {
    $arResult['post_max_size'] = '8&nbsp;' . GetMessage('MB');
} else {
    $arResult['post_max_size'] = substr($arResult['post_max_size'], 0, strlen($arResult['post_max_size']) - 1) . '&nbsp;' . GetMessage(ToUpper(substr($arResult['post_max_size'], strlen($arResult['post_max_size']) - 1)) . 'B');
Exemple #5
0
?>
:</td>
		<td>
			<?
			CIBlockPropertyMapYandex::GetPropertyFieldHtml
			(
				array
				(
					'ID'        => 'COORD',
					'NAME'      => 'COORD',
					'ACTIVE'    => 'Y',
					'CODE'      => 'COORD',
					'MULTIPLE'  => 'N',
					'USER_TYPE' => 'map_yandex',
					'USER_TYPE_SETTINGS' => ''
				),
				array
				(
					'VALUE' => $arElement['LATITUDE'].','.$arElement['LONGITUDE']
				),
				array
				(
					'VALUE'    => 'COORD',
					'FORM_NAM' => 'hole_edit',
					'MODE'     => 'FORM_FILL'
				)
			);
			?>
		</td>
	</tr>
	<tr valign="top">