public function afterSave($evt) { // file attribute value is expected to be either an id of old associated media or // an instance of CUploadedFile. Can also be an array containing either. $fileAttribute = $this->fileAttribute; $transaction = Yii::app()->db->beginTransaction(); try { $files = ArrayUtil::coerceToArray($this->owner->{$fileAttribute}); // remove old associated media with ids not found in file attribute $resubmittedMediaIds = array(); foreach ($files as $file) { if (!$file instanceof CUploadedFile && is_numeric($file)) { $resubmittedMediaIds[] = (int) $file; } } $associatedMedia = Media::model()->findAllByAttributes(array('associationType' => $this->associationType, 'associationId' => $this->getAssociationId())); foreach ($associatedMedia as $media) { if (!in_array((int) $media->id, $resubmittedMediaIds, true)) { $media->delete(); } } // save uploaded files as associated media foreach ($files as $file) { $this->saveAssociatedMedia($file); } $transaction->commit(); } catch (CException $e) { $transaction->rollback(); } }
/** * @deprecated */ public static function coerceToArray(&$arr) { $arr = ArrayUtil::coerceToArray($arr); }