/** * loadGenericFormStructure * @author Thomas Schedler <*****@*****.**> * @version 1.0 */ public function loadGenericFormStructure() { $this->core->logger->debug('massiveart->generic->GenericSetup->loadGenericFormStructure()'); try { /** * load the generic form model */ $this->getModelGenericForm(); $blnCacheGenForm = $this->core->sysConfig->cache->generic_form_structure == 'true' ? true : false; $arrFrontendOptions = array('caching' => $blnCacheGenForm, 'lifetime' => null, 'automatic_serialization' => true); $arrBackendOptions = array('cache_dir' => GLOBAL_ROOT_PATH . '/tmp/cache/gen_forms/'); // getting a Zend_Cache_Core object $objCache = Zend_Cache::factory('Core', 'File', $arrFrontendOptions, $arrBackendOptions); // see if a cache already exists: if (!($objFieldsAndRegionsData = $objCache->load('GenForm' . $this->intGenFormId))) { // cache miss; get generic form structure $objFieldsAndRegionsData = $this->objModelGenericForm->loadFieldsAndRegionsByFormId($this->intGenFormId); $objCache->save($objFieldsAndRegionsData, 'GenForm' . $this->intGenFormId); } $arrExcludedRegions = array(); if ($this->getTemplateId() > 0) { $objTemplateExcludedRegionData = $this->getModelTemplates()->loadTemplateExcludedRegions($this->getTemplateId()); if (count($objTemplateExcludedRegionData) > 0) { foreach ($objTemplateExcludedRegionData as $objTemplateExcludedRegion) { $arrExcludedRegions[] = $objTemplateExcludedRegion->idRegions; } } } $arrExcludedFields = array(); if ($this->getTemplateId() > 0) { $objTemplateExcludedFieldData = $this->getModelTemplates()->loadTemplateExcludedFields($this->getTemplateId()); if (count($objTemplateExcludedFieldData) > 0) { foreach ($objTemplateExcludedFieldData as $objTemplateExcludedField) { $arrExcludedFields[] = $objTemplateExcludedField->idFields; } } } $arrTemplateRegionProperties = array(); if ($this->getTemplateId() > 0) { $objTemplateRegionPropertiesData = $this->getModelTemplates()->loadTemplateRegionProperties($this->getTemplateId()); if (count($objTemplateRegionPropertiesData) > 0) { foreach ($objTemplateRegionPropertiesData as $objTemplateRegionProperty) { $arrTemplateRegionProperties[$objTemplateRegionProperty->idRegions] = array('order' => $objTemplateRegionProperty->order, 'collapsable' => $objTemplateRegionProperty->collapsable, 'isCollapsed' => $objTemplateRegionProperty->isCollapsed); } } } /** * go through the fields and regions to prepare the generic structure */ foreach ($objFieldsAndRegionsData as $objFieldRegionTagData) { if (!array_key_exists($objFieldRegionTagData->tabId, $this->arrTabs)) { $objGenTab = new GenericElementTab(); $objGenTab->setTabId($objFieldRegionTagData->tabId); $objGenTab->setTabTitle($objFieldRegionTagData->tabTitle); $objGenTab->setTabOrder($objFieldRegionTagData->tabOrder); $this->arrTabs[$objFieldRegionTagData->tabId] = $objGenTab; } if (!in_array($objFieldRegionTagData->regionId, $arrExcludedRegions)) { if (!in_array($objFieldRegionTagData->id, $arrExcludedFields)) { if (!array_key_exists($objFieldRegionTagData->regionId, $this->arrRegions)) { $objGenRegion = new GenericElementRegion(); $objGenRegion->setRegionId($objFieldRegionTagData->regionId); $objGenRegion->setRegionTitle($objFieldRegionTagData->regionTitle); $objGenRegion->setRegionCols($objFieldRegionTagData->regionColumns); if (array_key_exists($objFieldRegionTagData->regionId, $arrTemplateRegionProperties)) { if (!is_null($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['order']) || $arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['order'] != '') { $objGenRegion->setRegionOrder($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['order']); } else { $objGenRegion->setRegionOrder($objFieldRegionTagData->regionOrder); } if (!is_null($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['collapsable']) || $arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['collapsable'] != '') { $objGenRegion->setRegionCollapsable($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['collapsable']); } else { $objGenRegion->setRegionCollapsable($objFieldRegionTagData->collapsable); } if (!is_null($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['isCollapsed']) || $arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['isCollapsed'] != '') { $objGenRegion->setRegionIsCollapsed($arrTemplateRegionProperties[$objFieldRegionTagData->regionId]['isCollapsed']); } else { $objGenRegion->setRegionIsCollapsed($objFieldRegionTagData->isCollapsed); } } else { $objGenRegion->setRegionOrder($objFieldRegionTagData->regionOrder); $objGenRegion->setRegionCollapsable($objFieldRegionTagData->collapsable); $objGenRegion->setRegionIsCollapsed($objFieldRegionTagData->isCollapsed); } $objGenRegion->setRegionTypeId($objFieldRegionTagData->idRegionTypes); $objGenRegion->setRegionPosition($objFieldRegionTagData->position); $objGenRegion->setRegionIsMultiply($objFieldRegionTagData->isMultiply); $objGenRegion->setRegionMultiplyRegion($objFieldRegionTagData->multiplyRegion); $this->arrRegions[$objFieldRegionTagData->regionId] = $objGenRegion; if ($objGenRegion->getRegionIsMultiply() == true) { $this->arrMultiplyRegionIds[] = $objFieldRegionTagData->regionId; } $this->getTab($objFieldRegionTagData->tabId)->addRegion($objGenRegion); } $objGenField = new GenericElementField(); $objGenField->id = $objFieldRegionTagData->id; $objGenField->title = $objFieldRegionTagData->title; $objGenField->name = $objFieldRegionTagData->name; $objGenField->typeId = $objFieldRegionTagData->idFieldTypes; $objGenField->type = $objFieldRegionTagData->type; $objGenField->defaultValue = $objFieldRegionTagData->defaultValue; $objGenField->sqlSelect = $objFieldRegionTagData->sqlSelect; $objGenField->columns = $objFieldRegionTagData->columns; $objGenField->order = $objFieldRegionTagData->order; $objGenField->isCoreField = $objFieldRegionTagData->isCoreField; $objGenField->isKeyField = $objFieldRegionTagData->isKeyField; $objGenField->isSaveField = $objFieldRegionTagData->isSaveField; $objGenField->isRegionTitle = $objFieldRegionTagData->isRegionTitle; $objGenField->isDependentOn = $objFieldRegionTagData->isDependentOn; $objGenField->copyValue = $objFieldRegionTagData->copyValue; $objGenField->decorator = $objFieldRegionTagData->decorator; $objGenField->isMultiply = $objFieldRegionTagData->isMultiply; $objGenField->idSearchFieldTypes = $objFieldRegionTagData->idSearchFieldTypes; $objGenField->idFieldTypeGroup = $objFieldRegionTagData->idFieldTypeGroup; $objGenField->isSqlKeyValuePair = $objFieldRegionTagData->isSqlKeyValuePair; /** * select field container */ if ($objGenField->isSaveField == 1) { if ($objGenField->isMultiply == 1) { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_SPECIALFIELD_ID) { $this->getRegion($objFieldRegionTagData->regionId)->addSpecialFieldName($objGenField->name); } else { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_FILE_ID) { $this->getRegion($objFieldRegionTagData->regionId)->addFileFieldName($objGenField->name); } else { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_MULTIFIELD_ID) { $this->getRegion($objFieldRegionTagData->regionId)->addMultiFieldName($objGenField->name); } else { $this->getRegion($objFieldRegionTagData->regionId)->addInstanceFieldName($objGenField->name); } } } } else { if ($objGenField->isCoreField == 1) { $this->arrCoreFields[$objGenField->name] = $objGenField; $this->arrFieldNames[$objGenField->name] = self::CORE_FIELD; } else { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_SPECIALFIELD_ID) { $this->arrSpecialFields[$objGenField->name] = $objGenField; $this->arrFieldNames[$objGenField->name] = self::SPECIAL_FIELD; } else { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_FILE_ID) { $this->arrFileFields[$objGenField->name] = $objGenField; $this->arrFieldNames[$objGenField->name] = self::FILE_FIELD; } else { if ($objGenField->idFieldTypeGroup == GenericSetup::FIELD_TYPE_MULTIFIELD_ID) { $this->arrMultiFields[$objGenField->name] = $objGenField; $this->arrFieldNames[$objGenField->name] = self::MULTI_FIELD; } else { $this->arrInstanceFields[$objGenField->name] = $objGenField; $this->arrFieldNames[$objGenField->name] = self::INSTANCE_FIELD; } } } } } } $this->getRegion($objFieldRegionTagData->regionId)->addField($objGenField); } } } } catch (Exception $exc) { $this->core->logger->err($exc); } }
/** * insertMultiplyRegionInstanceData * @param GenericElementRegion $objRegion * @param integer $intRegionInstanceId * @param integer $intRegionPosition * @param string $strType, * @param string $strTypeId, * @param integer $intTypeVersion * @author Thomas Schedler <*****@*****.**> * @version 1.0 */ protected final function insertMultiplyRegionInstanceData(GenericElementRegion &$objRegion, $intRegionInstanceId, $intRegionPosition, $strType, $strTypeId, $intTypeVersion) { try { $arrInstanceData = array($strType . 'Id' => $strTypeId, 'version' => $intTypeVersion, 'idLanguages' => $this->setup->getLanguageId(), 'sortPosition' => $intRegionPosition); /** * for each instance field, add to instance data array */ foreach ($objRegion->InstanceFieldNames() as $strFieldName) { if (is_array($objRegion->getField($strFieldName)->getInstanceValue($intRegionInstanceId))) { $arrInstanceData[$strFieldName] = json_encode($objRegion->getField($strFieldName)->getInstanceValue($intRegionInstanceId)); } else { $arrInstanceData[$strFieldName] = $objRegion->getField($strFieldName)->getInstanceValue($intRegionInstanceId); } } $idRegionInstance = $this->getModelGenericData()->getGenericTable($strType . '-' . $this->setup->getFormId() . '-' . $this->setup->getFormVersion() . '-Region' . $objRegion->getRegionId() . '-Instances')->insert($arrInstanceData); if (count($objRegion->FileFieldNames()) > 0) { /** * insert into the file instances table */ foreach ($objRegion->FileFieldNames() as $strFieldName) { $objField = $objRegion->getField($strFieldName); $intFieldId = $objField->id; $strTmpFileIds = trim($objField->getInstanceValue($intRegionInstanceId), '[]'); $strDisplayOption = $objField->getInstanceProperty($intRegionInstanceId, 'display_option'); $arrFileIds = array(); $arrFileIds = explode('][', $strTmpFileIds); if (count($arrFileIds) > 0) { foreach ($arrFileIds as $intFileId) { if ($intFileId != '') { $arrFileData = array($strType . 'Id' => $strTypeId, 'version' => $intTypeVersion, 'idLanguages' => $this->setup->getLanguageId(), 'idRegionInstances' => $idRegionInstance, 'idFiles' => $intFileId, 'displayOption' => $strDisplayOption, 'idFields' => $intFieldId); $this->getModelGenericData()->getGenericTable($strType . '-' . $this->setup->getFormId() . '-' . $this->setup->getFormVersion() . '-Region' . $objRegion->getRegionId() . '-InstanceFiles')->insert($arrFileData); } } } } } if (count($objRegion->FileFilterFieldNames()) > 0) { /** * insert into the file filter instances table */ foreach ($objRegion->FileFilterFieldNames() as $strFieldName) { $objField = $objRegion->getField($strFieldName); $intFieldId = $objField->id; $objFilters = $objField->getInstanceValue($intRegionInstanceId); if (isset($objFilters->filters)) { foreach ($objFilters->filters as $objFilter) { if (!is_array($objFilter->referenceIds)) { $objFilter->referenceIds = array($objFilter->referenceIds); } foreach ($objFilter->referenceIds as $intReferenceId) { if (is_numeric($intReferenceId)) { $arrFileFilterData = array($strType . 'Id' => $strTypeId, 'version' => $intTypeVersion, 'idLanguages' => $this->setup->getLanguageId(), 'idRegionInstances' => $idRegionInstance, 'idFilterTypes' => $objFilter->typeId, 'referenceId' => $intReferenceId, 'idFields' => $intFieldId); $this->getModelGenericData()->getGenericTable($strType . '-' . $this->setup->getFormId() . '-' . $this->setup->getFormVersion() . '-Region' . $objRegion->getRegionId() . '-InstanceFileFilters')->insert($arrFileFilterData); } } } } } } if (count($objRegion->MultiFieldNames()) > 0) { /** * insert into the multi fields instances table */ foreach ($objRegion->MultiFieldNames() as $strFieldName) { $objField = $objRegion->getField($strFieldName); $intFieldId = $objField->id; if (is_array($objField->getInstanceValue($intRegionInstanceId)) && count($objField->getInstanceValue($intRegionInstanceId)) > 0) { foreach ($objField->getInstanceValue($intRegionInstanceId) as $intRelationId) { if ($intRelationId != '') { $arrFileData = array($strType . 'Id' => $strTypeId, 'version' => $intTypeVersion, 'idLanguages' => $this->setup->getLanguageId(), 'idRegionInstances' => $idRegionInstance, 'idRelation' => $intRelationId, 'idFields' => $intFieldId); $this->getModelGenericData()->getGenericTable($strType . '-' . $this->setup->getFormId() . '-' . $this->setup->getFormVersion() . '-Region' . $objRegion->getRegionId() . '-InstanceMultiFields')->insert($arrFileData); } } } } } } catch (Exception $exc) { $this->core->logger->err($exc); } }
/** * addRegion * @param GenericElementRegion $objRegion * @author Thomas Schedler <*****@*****.**> * @version 1.0 */ public function addRegion(GenericElementRegion &$objRegion) { $this->arrRegions[$objRegion->getRegionId()] = $objRegion; }