/**
  * Method that sets current model table associations from csv file.
  *
  * @param array $config The configuration for the Table.
  * @return void
  */
 protected function _setAssociationsFromCsv(array $config)
 {
     $csvData = $this->_csvData(true);
     $csvObjData = $this->_csvDataToCsvObj($csvData);
     $csvFilteredData = $this->_csvDataFilter($csvObjData, $this->__assocIdentifiers);
     //setting up files associations for FileStorage relation
     foreach ($csvObjData as $csvModule => $fields) {
         foreach ($fields as $csvObjField) {
             if (in_array($csvObjField->getType(), ['files', 'images'])) {
                 $fieldName = $csvObjField->getName();
                 $assocName = CsvMigrationsUtils::createAssociationName('Burzum/FileStorage.FileStorage', $fieldName);
                 if ($csvModule == $config['table']) {
                     $this->hasMany($assocName, ['className' => 'Burzum/FileStorage.FileStorage', 'foreignKey' => 'foreign_key', 'conditions' => ['model' => $this->table(), 'model_field' => $fieldName]]);
                 }
             }
         }
     }
     foreach ($csvFilteredData as $csvModule => $fields) {
         foreach ($fields as $csvObjField) {
             $assoccsvModule = $csvObjField->getAssocCsvModule();
             $fieldName = $csvObjField->getName();
             if ($config['table'] === $csvModule) {
                 $assocName = CsvMigrationsUtils::createAssociationName($assoccsvModule, $fieldName);
                 //Belongs to association of the curren running module.
                 $this->belongsTo($assocName, ['className' => $assoccsvModule, 'foreignKey' => $fieldName]);
             } elseif ($config['table'] === $assoccsvModule) {
                 //Foreignkey found in other module
                 $assocName = CsvMigrationsUtils::createAssociationName($csvModule, $fieldName);
                 $this->hasMany($assocName, ['className' => $csvModule, 'foreignKey' => $fieldName]);
             }
         }
     }
 }
 /**
  * linkFilesToEntity method
  *
  * Using AJAX upload, we're dealing with created entity,
  * and stored FileStorage files, upon saving the entity,
  * the items should be linked with 'foreign_key' field.
  *
  * @param Cake\ORM\Entity $entity of the record
  * @param Cake\ORM\Table $tableInstance of the entity
  * @param array $data of this->request->data containing ids.
  * @return mixed $result of saved/updated file entities.
  */
 public function linkFilesToEntity($entity, $tableInstance, $data = [], $options = [])
 {
     $result = [];
     $uploadFields = [];
     if (!method_exists($tableInstance, 'getFieldsDefinitions')) {
         return $result;
     }
     foreach ($tableInstance->getFieldsDefinitions() as $field => $fieldInfo) {
         if (in_array($fieldInfo['type'], ['files', 'images'])) {
             array_push($uploadFields, $fieldInfo);
         }
     }
     if (empty($uploadFields)) {
         return $result;
     }
     foreach ($uploadFields as $field) {
         $savedIds = [];
         $savedIdsField = $field['name'] . '_ids';
         // @NOTE: in case of AJAX/API calls we don't have data[Table][field]
         // notation, only data[field].
         if (isset($data[$tableInstance->alias()][$savedIdsField])) {
             $savedIds = $data[$tableInstance->alias()][$savedIdsField];
         } else {
             $savedIds = $data[$savedIdsField];
         }
         if (empty($savedIds)) {
             continue;
         }
         $savedIds = array_values(array_filter($savedIds));
         $assocName = CsvMigrationsUtils::createAssociationName('Burzum/FileStorage.FileStorage', $field['name']);
         foreach ($savedIds as $fileId) {
             $record = $this->_table->{$assocName}->get($fileId);
             $record->foreign_key = $entity->id;
             $result[] = $this->_table->{$assocName}->save($record);
         }
     }
     return $result;
 }
 /**
  * @dataProvider associationNameProvider
  */
 public function testCreateAssociationName($expected, $module, $foreignKey)
 {
     $this->assertEquals($expected, CsvMigrationsUtils::createAssociationName($module, $foreignKey));
 }