public function run() { $filename = \Yii::$app->request->get('filename', ''); $filename = trim($filename, '/'); $objId = \Yii::$app->request->get('objId', ''); $objModelId = \Yii::$app->request->get('objModelId', ''); if (empty($filename) === false) { $image = new Image(); $image->loadDefaultValues(); $image->setAttributes(['filename' => $filename, 'object_id' => $objId, 'object_model_id' => $objModelId]); $image->save(); } }
public function afterUpload($data) { if (isset($data['params']) === false) { return ['error' => 'bad request']; } if (isset($data['params']['objectId'], $data['filename'], $data['params']['modelId']) === false) { return ['error' => 'bad request']; } if ($data['params']['modelId'] === 'null') { $data['params']['modelId'] = 0; } $image = new Image(['object_id' => $data['params']['objectId'], 'object_model_id' => $data['params']['modelId'], 'filename' => $data['filename'], 'image_title' => '', 'sort_order' => 0]); if ($image->save()) { return ArrayHelper::merge($image->toArray(), ['file' => $image->file]); } else { return $image->getErrors(); } }
/** * Replaces images for specified model * $images array format: * [ * 0 => [ * 'filename' => 'something.png', * 'image_title' => 'title', * 'image_alt' => 'alt', * ], * 1 => [ * 'image_title' => 'title', * 'image_alt' => 'alt', * ], * ] * @param \yii\db\ActiveRecord $model * @param array $images array of data * @throws \Exception */ public static function replaceForModel(\yii\db\ActiveRecord $model, array $images) { $object = Object::getForClass($model->className()); if ($object) { $current_images = static::getForModel($object->id, $model->id); // first find existing images in input array foreach ($current_images as $current) { $found = false; foreach ($images as $key => $new) { if ($new['filename'] === $current->filename && !empty($new['filename'])) { $found = true; $current->setAttributes($new); $current->sort_order = $key; $current->save(); // delete processed image from input array unset($images[$key]); } } if (!$found) { $current->delete(); } } unset($current_images); // insert new images foreach ($images as $key => $new) { if (isset($new['filename'])) { if (!empty($new['filename'])) { $new['filename'] = urldecode(preg_replace("~[\\?#].*\$~Usi", "", $new['filename'])); $image_model = new Image(); $image_model->object_id = $object->id; $image_model->object_model_id = $model->id; $image_model->filename = basename($new['filename']); if (preg_match("#^https?://#Us", $new['filename'])) { $image_model->filename = basename(preg_replace("#^https?://[^/]#Us", "", $new['filename'])); try { $stream = fopen($new['filename'], 'r'); Yii::$app->getModule('image')->fsComponent->putStream($image_model->filename, $stream); } catch (\Exception $e) { // whoops :-( } } else { $image_model->filename = $new['filename']; } $image_model->image_title = isset($new['image_title']) ? $new['image_title'] : ''; $image_model->image_alt = isset($new['image_alt']) ? $new['image_alt'] : ''; $image_model->sort_order = $key; $image_model->save(); unset($image_model); } } } } }