/**
  * 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;
 }