Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
evsmash/companies / libs / Http / Companies.php
Size: Mime:
<?php

namespace Evsmash\Companies\Http;

use Evsmash\Core\Http\Base;

use Evsmash\Core\Dec\Thumb;
use Evsmash\Core\Files\Upload;
use Evsmash\Core\Helpers\Redirect;
use Evsmash\Core\Helpers\Str;
use Evsmash\Core\Input\Flash;
use Evsmash\Core\Input\Post;
use Evsmash\Core\Input\Route;
use Evsmash\Core\Simpy\Element;
use Evsmash\Core\System\Auth;
use Evsmash\Core\System\Trans;

use Evsmash\Companies\Company;
use Evsmash\Companies\CompaniesCategory;
use Evsmash\Companies\CompaniesType;

class Companies extends Base {

	// index
	public function index() {

		// elements
		$elements = Company::params()->published()->with('type')->with('categories')->paginate($this->settings->limit);

		// trans
		Trans::get($elements, 'companies');

		// flash
		Flash::set('title', 'Companies');

		// view
		$this->view(compact(['elements']));

	}

	// type
	public function type() {

		// type
		$type = Element::check(new CompaniesType);

		// element
		$elements = Company::params()->published()->where('type_id', $type->id)->with('type')->with('categories')->paginate($this->settings->limit);

		// trans
		Trans::get($type, 'companies_types');
		Trans::get($elements, 'companies');

		// flash
		Flash::set('title', $type->name);
		Flash::set('type', $type->id);

		// view
		$this->view(compact(['elements']), 'evsmash/companies/companies/index');

	}

	// category
	public function category() {

		// category
		$category = Element::check(new CompaniesCategory);

		// elements
		$elements = $category->companies()->params()->published()->with('type')->with('categories')->paginate($this->settings->limit);

		// trans
		Trans::get($category, 'companies_categories');
		Trans::get($elements, 'companies');

		// flash
		Flash::set('title', $category->name);
		Flash::set('categories', [$category->id => $category->name]);

		// view
		$this->view(compact(['elements']), 'evsmash/companies/companies/index');

	}

	// promoted
	public function promoted() {

		// elements
		$elements = Company::params()->promoted()->published()->with('type')->with('categories')->paginate($this->settings->limit);

		// trans
		Trans::get($elements, 'companies');

		// flash
		Flash::set('title', 'Promoted companies');

		// view
		$this->view(compact(['elements']), 'evsmash/companies/companies/index');

	}

	// show
	public function show() {

		// element
		$element = Element::check(new Company);

		// allowed
		Element::allowed($element, 'published');

		// stats
		Element::stats($element);

		// trans
		Trans::get($element, 'companies');

		// flash
		Flash::set('title', $element->name);
		Flash::set('description', $element->sneak);
		Flash::set('type', $element->type_id);
		Flash::set('categories', $element->categories->pluck('name', 'id'));
		Flash::set('photo', Thumb::url($element->photo, '1000xauto', ['upsize' => true]));

		// view
		$this->view(compact(['element']));

	}

	// create
	public function create() {

		// categories
		$categories = CompaniesCategory::where('depth', 1)->published()->orderBy('lft', 'asc')->pluck('name', 'id');
		$categories->prepend('---', '');

		// subcategories
		$subcategories = CompaniesCategory::where('depth', 2)->published()->orderBy('lft', 'asc')->get();

		// flash
		Flash::set('title', 'Add company');

		// view
		$this->view(compact(['categories', 'subcategories']));

	}

	// insert
	public function insert() {

		// validate
		Post::validate(Company::validate());

		// insert
		$item = new Company;
		$item->name = Post::get('name');
		$item->slug = Str::slug(Post::get('name'));
		$item->content = nl2br(Post::get('content'));
		$item->email = Post::get('email');
		$item->phone = Post::get('phone');
		$item->address = Post::get('address');
		$item->website = Post::get('website');
		$item->user_id = Auth::userID();
		$item->save();

		// caregories
		$item->categories()->sync([
			Post::get('category', 'int'),
			Post::get('subcategory', 'int')
		]);

		// upload
		$file = Upload::file(cfg('upload-images'), '1M');

		// photo
		if(isset($file->path)) {
			$item->photo = $file->path;
			$item->save();
		}

		// redirect
		Redirect::msg('Company has been added');
		Redirect::to('/');

	}

}