Your IP : 3.147.104.221


Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/crm/lib/webform/internals/
Upload File :
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/crm/lib/webform/internals/form.php

<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage crm
 * @copyright 2001-2016 Bitrix
 */
namespace Bitrix\Crm\WebForm\Internals;

use Bitrix\Main\ORM;
use Bitrix\Main\Context;
use Bitrix\Main\Security\Random;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Type\DateTime;

use Bitrix\Crm\Ads;
use Bitrix\Crm\WebForm\Helper;
use Bitrix\Crm\WebForm\ResultEntity;
use Bitrix\Crm\WebForm\Entity as WebFormEntity;

Loc::loadMessages(__FILE__);

/**
 * Class FormTable
 *
 * @package Bitrix\Crm\WebForm\Internals
 */
class FormTable extends ORM\Data\DataManager
{
	public static function getTableName()
	{
		return 'b_crm_webform';
	}

	public static function getMap()
	{
		return array(
			'ID' => array(
				'data_type' => 'integer',
				'primary' => true,
				'autocomplete' => true,
			),
			'CODE' => array(
				'data_type' => 'string',
			),
			'DATE_CREATE' => array(
				'data_type' => 'datetime',
				'required' => true,
				'default_value' => new DateTime(),
			),
			'ACTIVE' => array(
				'data_type' => 'boolean',
				'required' => true,
				'default_value' => 'Y',
				'values' => array('N', 'Y')
			),
			'ACTIVE_CHANGE_BY' => array(
				'data_type' => 'integer',
			),
			'ACTIVE_CHANGE_DATE' => array(
				'data_type' => 'datetime',
				'default_value' => new DateTime(),
			),
			'LANGUAGE_ID' => array(
				'data_type' => 'string',
			),
			'NAME' => array(
				'data_type' => 'string',
				'required' => true,
				'title' => Loc::getMessage('CRM_WEBFORM_FORM_NAME'),
			),
			'CAPTION' => array(
				'data_type' => 'string',
			),
			'DESCRIPTION' => array(
				'data_type' => 'string',
			),
			'BUTTON_CAPTION' => array(
				'data_type' => 'string',
			),
			'BUTTON_COLOR_FONT' => array(
				'data_type' => 'string',
			),
			'BUTTON_COLOR_BG' => array(
				'data_type' => 'string',
			),
			'CSS_PATH' => array(
				'data_type' => 'string',
			),
			'CSS_TEXT' => array(
				'data_type' => 'text',
			),
			'BACKGROUND_IMAGE' => array(
				'data_type' => 'integer',
			),
			'TEMPLATE_ID' => array(
				'data_type' => 'enum',
				'required' => true,
				'default_value' => Helper::ENUM_TEMPLATE_LIGHT,
				'values' => array_keys(Helper::getTemplateList())
			),
			'ENTITY_SCHEME' => array(
				'data_type' => 'enum',
				'required' => true,
				'default_value' => WebFormEntity::ENUM_ENTITY_SCHEME_LEAD,
				'values' => WebFormEntity::getSchemesCodes()
			),
			'IS_PAY' => array(
				'data_type' => 'boolean',
				'required' => true,
				'default_value' => 'N',
				'values' => array('N','Y')
			),
			'DUPLICATE_MODE' => array(
				'data_type' => 'enum',
				'default_value' => ResultEntity::DUPLICATE_CONTROL_MODE_NONE,
				'values' => ResultEntity::getDuplicateModes()
			),
			'GOOGLE_ANALYTICS_ID' => array(
				'data_type' => 'string',
			),
			'GOOGLE_ANALYTICS_PAGE_VIEW' => array(
				'data_type' => 'boolean',
				'default_value' => 'N',
				'values' => array('N','Y')
			),
			'YANDEX_METRIC_ID' => array(
				'data_type' => 'string',
			),

			'RESULT_SUCCESS_TEXT' => array(
				'data_type' => 'string',
			),
			'RESULT_SUCCESS_URL' => array(
				'data_type' => 'string',
			),
			'RESULT_FAILURE_TEXT' => array(
				'data_type' => 'string',
			),
			'RESULT_FAILURE_URL' => array(
				'data_type' => 'string',
			),
			'USE_LICENCE' => array(
				'data_type' => 'boolean',
				'default_value' => 'N',
				'values' => array('N','Y')
			),
			'AGREEMENT_ID' => array(
				'data_type' => 'integer',
			),
			'LICENCE_BUTTON_IS_CHECKED' => array(
				'data_type' => 'boolean',
				'default_value' => 'N',
				'values' => array('N','Y')
			),
			'SCRIPT_INCLUDE_SETTINGS' => array(
				'data_type' => 'text',
				'serialized' => true
			),
			'INVOICE_SETTINGS' => array(
				'data_type' => 'text',
				'serialized' => true
			),
			'ASSIGNED_BY_ID' => array(
				'data_type' => 'integer',
			),

			'SECURITY_CODE' => array(
				'data_type' => 'string',
				'default_value' => function(){
					return Random::getString(6);
				}
			),

			'USE_CAPTCHA' => array(
				'data_type' => 'boolean',
				'required' => true,
				'default_value' => 'N',
				'values' => array('N','Y')
			),

			'IS_SYSTEM' => array(
				'data_type' => 'boolean',
				'required' => true,
				'default_value' => 'N',
				'values' => array('N','Y')
			),

			'XML_ID' => array(
				'data_type' => 'string',
			),

			'IS_CALLBACK_FORM' => array(
				'data_type' => 'boolean',
				'default_value' => 'N',
				'values' => array('N','Y')
			),

			'CALL_TEXT' => array(
				'data_type' => 'string',
			),

			'CALL_FROM' => array(
				'data_type' => 'string',
			),

			'FORM_SETTINGS' => array(
				'data_type' => 'string',
				'serialized' => true
			),

			'COPYRIGHT_REMOVED' => array(
				'data_type' => 'boolean',
				'required' => true,
				'default_value' => 'N',
				'values' => array('N', 'Y')
			),
		);
	}

	public static function onBeforeAdd(ORM\Event $event)
	{
		$fields = $event->getParameter('fields');
		$result = new ORM\EventResult();
		if(isset($fields['ENTITY_SCHEME']) && $fields['ENTITY_SCHEME'])
		{
			$fields['ENTITY_SCHEME'] = intval($fields['ENTITY_SCHEME']);
		}

		return $result;
	}

	public static function onAfterAdd(ORM\Event $event)
	{
		$result = new ORM\EventResult();
		$fields = $event->getParameter('fields');
		$data = $event->getParameters();
		$formId = $data['primary']['ID'];
		$fields['CAPTION'] = (isset($fields['CAPTION']) && $fields['CAPTION']) ? $fields['CAPTION'] : '';
		static::update($formId, array('CODE' => '', 'CAPTION' => $fields['CAPTION']));

		return $result;
	}

	public static function onBeforeUpdate(ORM\Event $event)
	{
		$fields = $event->getParameter('fields');
		$result = new ORM\EventResult();
		$data = $event->getParameters();
		$formId = $data['primary']['ID'];
		if(isset($fields['ENTITY_SCHEME']) && $fields['ENTITY_SCHEME'])
		{
			$fields['ENTITY_SCHEME'] = intval($fields['ENTITY_SCHEME']);
		}
		if(isset($fields['ACTIVE']) && $fields['ACTIVE'])
		{
			$oldData = static::getRowById($event->getParameter('id'));
			if($oldData['ACTIVE'] != $fields['ACTIVE'])
			{
				$result->modifyFields(array('ACTIVE_CHANGE_DATE' => new DateTime()));
			}
		}
		else
		{
			$result->unsetField('ACTIVE_CHANGE_BY');
		}

		if(isset($fields['CAPTION']))
		{
			$code = \CUtil::translit($fields['CAPTION'], Context::getCurrent()->getLanguage());
			$code = str_replace(array('"', "'", '`'), array("", "", ""), $code);
			$code = $formId . ($code ? '_' . $code : '');
			$result->modifyFields(array('CODE' => $code));
		}

		return $result;
	}

	/**
	 * @param ORM\Event $event Event
	 * @return ORM\EventResult Result
	 */
	public static function onDelete(ORM\Event $event)
	{
		$result = new ORM\EventResult;
		$data = $event->getParameters();
		$formId = $data['primary']['ID'];

		// delete Ads links
		Ads\AdsForm::unlinkForm($formId);

		// delete fields
		$fieldDb = FieldTable::getList(array(
			'select' => array('ID'),
			'filter' => array('=FORM_ID' => $formId)
		));
		while($field = $fieldDb->fetch())
		{
			FieldTable::delete($field['ID']);
		}

		// delete field dependencies
		$fieldDependenceDb = FieldDependenceTable::getList(array(
			'select' => array('ID'),
			'filter' => array('=FORM_ID' => $formId)
		));
		while($fieldDependence = $fieldDependenceDb->fetch())
		{
			FieldDependenceTable::delete($fieldDependence['ID']);
		}

		// delete preset fields
		PresetFieldTable::delete(array('FORM_ID' => $formId));
		// delete view statistics
		FormViewTable::delete(array('FORM_ID' => $formId));
		// delete start edit statistics
		FormStartEditTable::delete(array('FORM_ID' => $formId));

		// delete counters
		$formCounterDb = FormCounterTable::getList(array(
			'select' => array('ID'),
			'filter' => array('=FORM_ID' => $formId)
		));
		while($formCounter = $formCounterDb->fetch())
		{
			FormCounterTable::delete($formCounter['ID']);
		}

		// delete results
		$resultRowDb = ResultTable::getList(array(
			'select' => array('ID'),
			'filter' => array('=FORM_ID' => $formId)
		));
		while($resultRow = $resultRowDb->fetch())
		{
			ResultTable::delete($resultRow['ID']);
		}

		return $result;
	}

	public static function validateName()
	{
		return array(
			new ORM\Fields\Validators\LengthValidator(null, 50),
		);
	}
}