# wpide/3.2/App/Controllers/FileManager/ImageController.php

WPIDE – File Manager &amp; Code Editor, version 3.2. 162 lines.

- Page: https://pluginprobe.com/plugins/wpide/3.2/code/App/Controllers/FileManager/ImageController.php
- Raw: https://pluginprobe.com/plugins/wpide/3.2/raw/App/Controllers/FileManager/ImageController.php
- Modified: 2022-07-30T22:45:52+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/wpide/3.2/code/App/Controllers/FileManager/ImageController.php#L10-L20`.

```php
<?php

namespace WPIDE\App\Controllers\FileManager;

use WPIDE\App\App;
use WPIDE\App\Config\Config;
use WPIDE\App\Helpers\ImageStateData;
use WPIDE\App\Kernel\Request;
use WPIDE\App\Kernel\Response;
use WPIDE\App\Kernel\StreamedResponse;
use WPIDE\App\Services\Auth\AuthInterface;
use WPIDE\App\Services\Storage\Filesystem;

/**
 *
 */
class ImageController
{
    /**
     * @var AuthInterface
     */
    protected $auth;

    /**
     * @var Mixed
     */
    protected $user;

    /**
     * @var Config
     */
    protected $config;

    /**
     * @var Filesystem
     */
    protected $storage;

    /**
     * @param Config $config
     * @param AuthInterface $auth
     * @param Filesystem $storage
     */
    public function __construct(Config $config, AuthInterface $auth, Filesystem $storage)
    {
        $this->config = $config;
        $this->auth = $auth;

        $this->user = $this->auth->user() ?: $this->auth->getGuest();

        $this->storage = $storage;
        $this->storage->setPathPrefix($this->user->getHomeDir());
    }

    /**
     * @param Request $request
     * @param Response $response
     * @return void
     */
    public function stateExists(Request $request, Response $response)
    {

        $id = $request->input('id');

        $exists = ImageStateData::stateFileExists($id);

        return $response->json([
            'exists' => $exists
        ]);

    }

    /**
     * @param Request $request
     * @param Response $response
     * @return void
     */
    public function getState(Request $request, Response $response)
    {

        $id = $request->input('id');

        $state = null;

        try {
            $file = ImageStateData::getState($id);
            $state = $file['contents'];
        } catch (\Exception $e) {}

        $response->json([
            'state' => json_decode($state)
        ]);

    }

    /**
     * @param Request $request
     * @param Response $response
     * @param StreamedResponse $streamedResponse
     * @return void
     */
    public function download(Request $request, Response $response, StreamedResponse $streamedResponse)
    {

        $id = $request->input('id');
        $originalPath = $request->input('path');
        $ext = $request->input('ext');
        $stateImageName = $id.'.'.$ext;

        // if not, get state image file

        try {
            $file = ImageStateData::getImage($stateImageName);
        } catch (\Exception $e) {}

        // if not found, get original file
        if(empty($file)) {
            try {
                // if not, get original image
                $file = $this->storage->readStream((string) base64_decode($originalPath));
            } catch (\Exception $e) {}
        }

        if(empty($file)) {
            return $response->redirect('/');
        }

        return App::instance()->call([DownloadController::class, 'downloadFile'], [$file, $request, $streamedResponse]);

    }

    /**
     * @param Request $request
     * @param Response $response
     * @return void
     */
    public function revert(Request $request, Response $response)
    {

        $item = $request->input('item');
        $stateImageName = $item->id.'.'.$item->ext;

        try {

            $file = ImageStateData::getImage($stateImageName);
            $this->storage->storeStream($item->dir, $item->name, $file['stream'], true);
            ImageStateData::deleteState($item->id);

        } catch (\Exception $e) {

            return $response->json([
                'success' => false
            ]);
        }

        $response->json([
            'success' => true
        ]);
    }

}

```
