Untitled

mail@pastecode.io avatar
unknown
php
a year ago
5.8 kB
6
Indexable
<?php

namespace Modules\Addons\Http\Controllers;

use Modules\Addons\Entities\{AddonManager, Envato, Addon};
use Modules\Addons\Http\Requests\UploadAddonRequest;
use App\Http\Controllers\Controller;
use Artisan, Cache, Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class AddonsController extends Controller
{
    /**
     * upload
     *
     * @param  mixed $request
     * @return void
     */
    public function upload(UploadAddonRequest $request)
    {
        try {
            if (in_array(explode('.', $request->attachment->getClientOriginalName())[0], array_keys(Addon::all()) )) {
                return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => __('Addon already exist, Uploading again may lose your previous data.')])->withInput();
            }

            // Upload addon to temp directory for checking
            $addonInfo = AddonManager::upload($request->attachment);
            if (isset($addonInfo['status']) && $addonInfo['status'] == 201) {
                return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => $addonInfo['message']])->withInput();
            }
            $addon = $addonInfo['addon'];

            // has - check the module.json file and and name value exist or not
            if (!Addon::has($addon->get('name'))) {
                $addon->delete();
                return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => __('The uploaded addon is not a valid file.')])->withInput();
            }

            // load the module config file for getting the config value
            $addon->register();
            /**
            if (!in_array(env('APP_VERSION'), config($addon->get('alias') . '.' . 'supported_versions'))) {
                $message = __('This addon only supported with :x :y :z.', ['x' => settings('name'), 'y' => implode(', ', config($addon->get('alias') . '.' . 'supported_versions')), 'z' => Str::plural('version', count(config($addon->get('alias') . '.' . 'supported_versions')))]);
                $addon->delete();
                return back()->with(['AddonStatus' => 'fail', 'AddonMessage' =>  $message])->withInput();
            }
            */
            if ($addon->get('name') !== config('addons.items.' . config($addon->get('alias') . '.' . 'item_id'))) {
                $addon->delete();
                return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => __('The compressed module file does not belong to this script.')])->withInput();
            }

            // Checking if module required other modules
            $requiredModules = config($addon->get('alias') . '.required_modules');
            if (!is_null($requiredModules) && !empty($requiredModules)) {
                foreach ($requiredModules as $requiredModule) {
                    if (is_null(module($requiredModule))) {
                        $addon->delete();
                        return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => __('The module required :addional module to run.', ['addional' => $requiredModule])])->withInput();
                    }
                }
            }

            // Required: purchasecode, username, item_id
            $purchaseData = 'success';


            // Update .env with addon secret key
            if ($purchaseData == 'success') {

                Cache::put(strtoupper($addon->get('name')) . '_SECRET', env(strtoupper($addon->get('name')) . '_SECRET'), 2629746);
            }

            // migrating and seeding of the uploaded addon
            $migrateAndSeedData = AddonManager::migrateAndSeed($addon->get('name'));
            if (isset($migrateAndSeedData['status']) && $migrateAndSeedData['status'] == 402) {
                Artisan::call('module:migrate-rollback ' . $addon->get('name'));
                $addon->delete();
                return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => $migrateAndSeedData['message']])->withInput();
            }

            $cacheKeys = config('addons.cache_keys');
            if (!is_null($cacheKeys) && !empty($cacheKeys)) {
                foreach ($cacheKeys as $cacheKey) {
                    Cache::forget($cacheKey);
                }
            }

            return back()->with(['AddonStatus'=> 'success', 'AddonMessage' => __('Addon has been uploaded successfully.')]);

        } catch (Exception $e) {
            Artisan::call('module:migrate-rollback ' . $addon->get('name'));
            $addon->delete();
            return back()->with(['AddonStatus'=> 'fail', 'AddonMessage' => $e->getMessage()])->withInput();
        }
    }

    /**
     * switchStatus
     *
     * @param  mixed $alias
     * @return void
     */
    public function switchStatus($alias)
    {
        $addon = Addon::find($alias);

        if (is_null($addon)) {
            return back()->with(['fail'=> 'success', 'AddonMessage' => __('Addon not found')]);
        }

        $addon->isEnabled() ? $addon->disable() : $addon->enable();

        return back()->with(['AddonStatus'=> 'success', 'AddonMessage' => __('Addon status updated.')]);
    }

    public function verifyForm($name)
    {
        return view('admin.module_manager.purchasecode', ['name' => $name]);
    }

    public function verifyUsernamePurchasecode(Request $request, $name)
    {
        $addon = Addon::find(strtolower($name));
        $itemId = config($addon->get('alias') . '.' . 'item_id');

        $purchaseData = 'success';

        if ($purchaseData == 'success') {

            Cache::put(strtoupper($addon->get('name')) . '_SECRET', env(strtoupper($addon->get('name')) . '_SECRET'), 2629746);
            return redirect('admin/module-manager/addons')->with(['AddonStatus'=> 'success', 'AddonMessage' => __('Addon successfully varified.')]);
        }


    }
}