258 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\View\Components\Modules;
 | 
						|
 | 
						|
use App\Traits\Modules;
 | 
						|
use App\Models\Module\Module;
 | 
						|
use App\Abstracts\View\Component;
 | 
						|
use Illuminate\Support\Facades\Route;
 | 
						|
 | 
						|
class Items extends Component
 | 
						|
{
 | 
						|
    use Modules;
 | 
						|
 | 
						|
    public $type;
 | 
						|
 | 
						|
    public $modules;
 | 
						|
 | 
						|
    public $limit;
 | 
						|
 | 
						|
    public $seeMore;
 | 
						|
 | 
						|
    public $installedStatus;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new component instance.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __construct(
 | 
						|
        $model = [], $limit = 4, $seeMore = false
 | 
						|
    ) {
 | 
						|
        $this->limit = $limit;
 | 
						|
        $this->seeMore = $this->getSeeMore($seeMore, $model);
 | 
						|
        $this->modules = $this->getModel($model);
 | 
						|
        $this->installedStatus = $this->getInstalledStatus();
 | 
						|
 | 
						|
        $this->view = $this->getView();
 | 
						|
        $this->type = $this->getType();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the view / contents that represent the component.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Contracts\View\View|string
 | 
						|
     */
 | 
						|
    public function render()
 | 
						|
    {
 | 
						|
        return view($this->view);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getSeeMore($seeMore, $model)
 | 
						|
    {
 | 
						|
        if (empty($seeMore)) {
 | 
						|
            return $seeMore;
 | 
						|
        }
 | 
						|
 | 
						|
        if (! empty($model) && ($model->current_page < $model->last_page)) {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getModel($model)
 | 
						|
    {
 | 
						|
        if (! empty($model)) {
 | 
						|
            if (isset($model->data)) {
 | 
						|
                return $model->data;
 | 
						|
            }
 | 
						|
 | 
						|
            return $model;
 | 
						|
        }
 | 
						|
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        switch ($this->type) {
 | 
						|
            case 'banners':
 | 
						|
                $model = $this->getBanners();
 | 
						|
                break;
 | 
						|
            case 'new':
 | 
						|
                $model = $this->getNew($this->limit);
 | 
						|
                break;
 | 
						|
            case 'paid':
 | 
						|
                $model = $this->getPaid($this->limit);
 | 
						|
                break;
 | 
						|
            case 'free':
 | 
						|
                $model = $this->getFree($this->limit);
 | 
						|
                break;
 | 
						|
            case 'pre_sale':
 | 
						|
                $model = $this->getPreSale($this->limit);
 | 
						|
                break;
 | 
						|
            case 'purchased':
 | 
						|
                $model = $this->getPurchased($this->limit);
 | 
						|
                break;
 | 
						|
            case 'installed':
 | 
						|
                $model = $this->getInstalled();
 | 
						|
                break;
 | 
						|
            case 'no-apps':
 | 
						|
                $model = $this->getTestimonials();
 | 
						|
                break;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getView()
 | 
						|
    {
 | 
						|
        if (! empty($this->view)) {
 | 
						|
            return $this->view;
 | 
						|
        }
 | 
						|
 | 
						|
        return 'components.modules.items';
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getBanners()
 | 
						|
    {
 | 
						|
        $model = $this->getBannersOfModules();
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getNew($limit)
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getNewModules([
 | 
						|
            'query' => [
 | 
						|
                'limit' => $limit
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response->data;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getFree($limit)
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getFreeModules([
 | 
						|
            'query' => [
 | 
						|
                'limit' => $limit
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response->data;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getPaid($limit)
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getPaidModules([
 | 
						|
            'query' => [
 | 
						|
                'limit' => $limit
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response->data;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getPreSale($limit)
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getPreSaleModules([
 | 
						|
            'query' => [
 | 
						|
                'limit' => $limit
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response->data;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getPurchased($limit)
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
        $data = [];
 | 
						|
 | 
						|
        if ($limit != 4) {
 | 
						|
            $data = [
 | 
						|
                'query' => [
 | 
						|
                    'limit' => $limit
 | 
						|
                ]
 | 
						|
            ];
 | 
						|
        }
 | 
						|
 | 
						|
        $response = $this->getMyModules($data);
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getInstalled()
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getInstalledModules();
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getTestimonials()
 | 
						|
    {
 | 
						|
        $model = [];
 | 
						|
 | 
						|
        $response = $this->getTestimonialModules();
 | 
						|
 | 
						|
        if ($response) {
 | 
						|
            $model = $response;
 | 
						|
        }
 | 
						|
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getInstalledStatus()
 | 
						|
    {
 | 
						|
        $installed = Module::where('company_id', '=', company_id())->pluck('enabled', 'alias')->toArray();
 | 
						|
 | 
						|
        return $installed;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getType()
 | 
						|
    {
 | 
						|
        if (! empty($this->type)) {
 | 
						|
            return $this->type;
 | 
						|
        }
 | 
						|
 | 
						|
        $name = Route::currentRouteName();
 | 
						|
 | 
						|
        $keys = explode('.', $name);
 | 
						|
 | 
						|
        return count($keys) > 2 ? $keys[1] : last($keys);
 | 
						|
    }
 | 
						|
}
 |