/**
  * Renders the widget.
  */
 public function run()
 {
     if (is_null($this->variation)) {
         return '';
     }
     $asset = DisplayWidgetAsset::register($this->getView());
     $uploads = Uploads::findByReference($this->type, $this->type_id);
     return $this->render('display_widget', ['uploads' => $uploads, 'variation' => $this->variation, 'htmlOptions' => $this->htmlOptions]);
 }
 /**
  * Return array of already uploaded files. Used for display uploads in update form.
  * @param $type
  * @param $type_id
  * @param string $variation
  * @return array
  */
 public function getAlreadyUploadedByReference($type, $type_id, $variation = '_thumb')
 {
     if (is_null($type_id)) {
         return [];
     }
     $uploads = [];
     $array = Uploads::findByReference($type, $type_id);
     if (!is_null($array)) {
         foreach ($array as $item) {
             /**
              * @var $item Uploads
              */
             array_push($uploads, array('src' => $item->getPublicFileUrl($variation), 'type' => $item->mime, 'name' => $item->original, 'size' => $item->size, 'data' => array('id' => $item->id, 'type' => $item->type, 'type_id' => $item->type_id)));
         }
     }
     return $uploads;
 }
 public function updateFileIdInOwnerModel($event)
 {
     $type_id = $this->owner->getPrimaryKey();
     $configs = VariationHelper::getRawConfig();
     foreach ($configs as $type => $config) {
         if (!in_array($type, $this->registeredTypes)) {
             continue;
         }
         if (isset($config['_insert'])) {
             $attribute = array_shift($config['_insert']);
             $files = Uploads::findByReference($type, $type_id);
             if (!is_null($files)) {
                 $file = array_shift($files);
                 //TODO replace with ActiveRecord::updateAttributes() to avoid loops
                 if ($this->owner->getAttribute($attribute) !== $file->id) {
                     $this->owner->setAttribute($attribute, $file->id);
                     $this->owner->save();
                     // one more loop
                 }
             }
         }
     }
 }