示例#1
0
	/**
	 * <p>Добавляет новый <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статус</a> или обновляет существующий. Возвращает ID обновленного или добавленного <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> в случае положительного результата, в противном случае - "false".</p>
	 *
	 *
	 *
	 *
	 * @param array $fields  Массив значений, в качестве ключей массива допустимы: <ul> <li>
	 * <b>FORM_ID</b><font color="red">*</font> - ID <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#form">веб-формы</a>; </li> <li> <b>TITLE</b><font
	 * color="red">*</font> - заголовок <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>C_SORT</b> -
	 * порядок сортировки; </li> <li> <b>ACTIVE</b> - флаг активности; допустимы
	 * следующие значения: <ul> <li> <b>Y</b> - ответ активен; </li> <li> <b>N</b> - ответ
	 * не активен (по умолчанию). </li> </ul> </li> <li> <b>DESCRIPTION</b> - описание <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>CSS</b> - имя CSS
	 * класса для вывода заголовка <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>HANDLER_OUT</b> -
	 * путь относительно корня к <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/status_processing.php">обработчику</a>, вызываемому
	 * при смене у <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>
	 * данного <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> на какой
	 * либо другой; </li> <li> <b>HANDLER_IN</b> - путь относительно корня к <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/status_processing.php">обработчику</a>, вызываемому
	 * при смене у <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>
	 * какого либо <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> на
	 * данный; </li> <li> <b>DEFAULT_VALUE</b> - флаг установки <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> по умолчанию,
	 * допустимы следующие значения: <ul> <li> <b>Y</b> - статус будет
	 * устанавливаться; </li> <li> <b>N</b> - статус не будет устанавливаться (по
	 * умолчанию). </li> </ul> </li> <li> <b>arPERMISSION_VIEW</b>* - массив ID групп
	 * пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Просмотр
	 * результатов в данном статусе"; </li> <li> <b>arPERMISSION_MOVE</b>* - массив ID
	 * групп пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Перевод
	 * результатов в данный статус"; </li> <li> <b>arPERMISSION_EDIT</b>* - массив ID групп
	 * пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Редактирование
	 * результатов в данном статусе"; </li> <li> <b>arPERMISSION_DELETE</b>* - массив ID
	 * групп пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Удаление
	 * результатов в данном статусе". </li> </ul> <br><font color="red">*</font> -
	 * обязательно к заполнению. <br>* - в данных массивах может быть
	 * элемент со значением "0", означающий создателя <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>.
	 *
	 *
	 *
	 * @param mixed $status_id = false ID обновляемого <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>.<br>
	 * Параметр необязательный. По умолчанию - "false" (добавление нового <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>).
	 *
	 *
	 *
	 * @param string $check_rights = "Y" Флаг необходимости проверки прав текущего пользователя.
	 * Возможны следующие значения: <ul> <li> <b>Y</b> - права необходимо
	 * проверить; </li> <li> <b>N</b> - право не нужно проверять. </li> </ul> Для
	 * обновления статуса, либо создания нового статуса необходимо
	 * иметь право <b>[30] Полный доступ</b> на форму указанную в
	 * <i>fields</i>["FORM_ID"].<br><br>Параметр необязательный. По умолчанию - "Y"
	 * (права необходимо проверить).
	 *
	 *
	 *
	 * @return mixed 
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * $FORM_ID = 4; // ID веб-формы
	 * 
	 * $arFields = array(
	 *     "FORM_ID"             =&gt; $FORM_ID,               // ID веб-формы
	 *     "C_SORT"              =&gt; 100,                    // порядок сортировки
	 *     "ACTIVE"              =&gt; "Y",                    // статус активен
	 *     "TITLE"               =&gt; "Опубликовано",         // заголовок статуса
	 *     "DESCRIPTION"         =&gt; "Окончательный статус", // описание статуса
	 *     "CSS"                 =&gt; "statusgreen",          // CSS класс
	 *     "HANDLER_OUT"         =&gt; "",                     // обработчик
	 *     "HANDLER_IN"          =&gt; "",                     // обработчик
	 *     "DEFAULT_VALUE"       =&gt; "N",                    // не по умолчанию
	 *     "arPERMISSION_VIEW"   =&gt; array(2),               // право просмотра для всех
	 *     "arPERMISSION_MOVE"   =&gt; array(),                // право перевода только админам
	 *     "arPERMISSION_EDIT"   =&gt; array(),                // право редактирование для админам
	 *     "arPERMISSION_DELETE" =&gt; array(),                // право удаления только админам
	 * );
	 * 
	 * $NEW_ID = <b>CFormStatus::Set</b>($arFields);
	 * if ($NEW_ID&gt;0) echo "Успешно добавлен ID=".$NEW_ID;
	 * else // ошибка
	 * {
	 *     // выводим текст ошибки
	 *     global $strError;
	 *     echo $strError;
	 * }
	 * ?&gt;
	 * </pre>
	 *
	 *
	 *
	 * <h4>See Also</h4> 
	 * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformstatus/index.php">Поля CFormStatus</a>
	 * </li></ul><a name="examples"></a>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformstatus/set.php
	 * @author Bitrix
	 */
	public static function Set($arFields, $STATUS_ID=false, $CHECK_RIGHTS="Y")
	{
		$err_mess = (CAllFormStatus::err_mess())."<br>Function: Set<br>Line: ";
		global $DB, $USER, $strError, $APPLICATION;
		$STATUS_ID = intval($STATUS_ID);
		if (CFormStatus::CheckFields($arFields, $STATUS_ID, $CHECK_RIGHTS))
		{
			$arFields_i = array();

			$arFields_i["TIMESTAMP_X"] = $DB->GetNowFunction();

			if (is_set($arFields, "C_SORT"))
				$arFields_i["C_SORT"] = "'".intval($arFields["C_SORT"])."'";

			if (is_set($arFields, "ACTIVE"))
				$arFields_i["ACTIVE"] = ($arFields["ACTIVE"]=="Y") ? "'Y'" : "'N'";

			if (is_set($arFields, "TITLE"))
				$arFields_i["TITLE"] = "'".$DB->ForSql($arFields["TITLE"],255)."'";

			if (is_set($arFields, "DESCRIPTION"))
				$arFields_i["DESCRIPTION"] = "'".$DB->ForSql($arFields["DESCRIPTION"],2000)."'";

			if (is_set($arFields, "CSS"))
				$arFields_i["CSS"] = "'".$DB->ForSql($arFields["CSS"],255)."'";

			if (is_set($arFields, "HANDLER_OUT"))
				$arFields_i["HANDLER_OUT"] = "'".$DB->ForSql($arFields["HANDLER_OUT"],255)."'";

			if (is_set($arFields, "HANDLER_IN"))
				$arFields_i["HANDLER_IN"] = "'".$DB->ForSql($arFields["HANDLER_IN"],255)."'";

			if (is_set($arFields, "MAIL_EVENT_TYPE"))
				$arFields_i["MAIL_EVENT_TYPE"] = "'".$DB->ForSql($arFields["MAIL_EVENT_TYPE"],255)."'";

			$DEFAULT_STATUS_ID = intval(CFormStatus::GetDefault($arFields["FORM_ID"]));
			if ($DEFAULT_STATUS_ID<=0 || $DEFAULT_STATUS_ID==$STATUS_ID)
			{
				if (is_set($arFields, "DEFAULT_VALUE"))
					$arFields_i["DEFAULT_VALUE"] = ($arFields["DEFAULT_VALUE"]=="Y") ? "'Y'" : "'N'";
			}

			//echo '<pre>'; print_r($arFields); echo '</pre>';
			//die();

			if ($STATUS_ID>0)
			{
				$DB->Update("b_form_status", $arFields_i, "WHERE ID='".$STATUS_ID."'", $err_mess.__LINE__);
			}
			else
			{
				$arFields_i["FORM_ID"] = "'".intval($arFields["FORM_ID"])."'";
				$STATUS_ID = $DB->Insert("b_form_status", $arFields_i, $err_mess.__LINE__);
			}

			$STATUS_ID = intval($STATUS_ID);

			if ($STATUS_ID>0)
			{
				// право на просмотр
				if (is_set($arFields, "arPERMISSION_VIEW"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='VIEW'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_VIEW"]))
					{
						reset($arFields["arPERMISSION_VIEW"]);
						foreach($arFields["arPERMISSION_VIEW"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'VIEW'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на перевод
				if (is_set($arFields, "arPERMISSION_MOVE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='MOVE'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_MOVE"]))
					{
						reset($arFields["arPERMISSION_MOVE"]);
						foreach($arFields["arPERMISSION_MOVE"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'MOVE'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на редактирование
				if (is_set($arFields, "arPERMISSION_EDIT"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='EDIT'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_EDIT"]))
					{
						reset($arFields["arPERMISSION_EDIT"]);
						foreach($arFields["arPERMISSION_EDIT"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'EDIT'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на удаление
				if (is_set($arFields, "arPERMISSION_DELETE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='DELETE'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_DELETE"]))
					{
						reset($arFields["arPERMISSION_DELETE"]);
						foreach($arFields["arPERMISSION_DELETE"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'DELETE'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				if (is_set($arFields, "arMAIL_TEMPLATE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_mail_template WHERE STATUS_ID='".$STATUS_ID."'", false, $err_mess.__LINE__);
					if (is_array($arFields["arMAIL_TEMPLATE"]))
					{
						reset($arFields["arMAIL_TEMPLATE"]);
						foreach($arFields["arMAIL_TEMPLATE"] as $mid)
						{
							$strSql = "
								INSERT INTO b_form_status_2_mail_template (STATUS_ID, MAIL_TEMPLATE_ID) VALUES (
									'".$STATUS_ID."',
									'".intval($mid)."'
								)
								";
							$DB->Query($strSql, false, $err_mess.__LINE__);
						}
					}
				}
			}
			return $STATUS_ID;
		}
		return false;
	}