• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/util/form/compositeform.php
  • Класс: BitrixTimemanUtilFormCompositeForm
  • Вызов: CompositeForm::runBeforeLoad
protected function runBeforeLoad($data, $formName)
{
	parent::runBeforeLoad($data, $formName);
	$parentData = $this->getBaseFormData($data, $formName);

	$internalForms = $this->getInternalForms();
	foreach ($internalForms as $formAlias => $formClass)
	{
		/** @var BaseForm $form */
		$form = new $formClass;
		$formName = $formName === '' ? $formAlias : $form->getFormName();
		if (isset($parentData[$formName]))
		{
			if (is_array($parentData[$formName]))
			{
				if ($this->hasMultiForms($parentData[$formName]))
				{
					$forms = [];
					foreach ($parentData[$formName] as $key => $formData)
					{
						$forms[$key] = new $formClass;
					}
					$this->$formAlias = $forms;
				}
				else
				{
					if (!$this->$formAlias)
					{
						$this->$formAlias = new $formClass;
					}
				}
			}
		}
		else
		{
			if (is_array($this->nestedForms[$formAlias]))
			{
				$filledForm = false;
				foreach ($this->nestedForms[$formAlias] as $innerForm)
				{
					if ($filledForm)
					{
						break;
					}
					$reflect = new ReflectionClass($innerForm);
					$props = array_diff($reflect->getProperties(ReflectionProperty::IS_PUBLIC), $reflect->getParentClass()->getProperties(ReflectionProperty::IS_PUBLIC));
					foreach ($props as $prop)
					{
						if (!$this->isEmpty($prop->getValue($innerForm)))
						{
							$filledForm = true;
							break;
						}
					}
				}
				if (!$filledForm)
				{
					unset($this->nestedForms[$formAlias]);
				}
			}
		}
	}
}