/** * Binding files with owner * * @param int $ownerId * @param int $ownerType * @param array $files * @return array|bool */ private function bindMultiple($ownerId, $ownerType, $files) { $files = ArrayHelper::getValue($files, 'files', []); $newFiles = ArrayHelper::index(File::findAll(array_keys($files)), 'id'); $currentFiles = ArrayHelper::index(File::getByOwner($ownerId, $ownerType), 'id'); if (count($newFiles)) { foreach ($newFiles as $file) { if (!$file->isOwner($ownerId, $ownerType)) { unset($newFiles[$file->id]); continue; } if (!$this->bindMultipleFile($file, $ownerId, $files)) { continue; } } // delete unnecessary files foreach ($currentFiles as $currFile) { if (!array_key_exists($currFile->id, $newFiles)) { $currFile->delete(); } } } else { // if empty array — delete current files foreach ($currentFiles as $currFile) { $currFile->delete(); } } return $newFiles; }