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/items / libs / ItemsParameter.php
Size: Mime:
<?php

namespace Evsmash\Items;

use Evsmash\Core\Database\Eloquent;

use Evsmash\Core\Dec\Form;
use Evsmash\Core\Helpers\Arr;

use Evsmash\Shop\Schemas\ItemsParameters as Schema;

class ItemsParameter extends Eloquent {

	public $timestamps = false;

	// belongs to item
	public function item() { 
		
		return $this->belongsTo('Evsmash\Shop\Items', 'item_id');
	
	}

	// fields
	static public function fields($item) {

		// check
		if(!cfg('evsmash-items-items-parameters')) {
			return false;
		}

		// categories
		$categories = $item->categories()->pluck('id')->toArray();

		// config
		$config = cfg('evsmash-items-items-parameters');

		// fields
		$fields = [];

		// all
		if(isset($config['all'])) {
			$fields = $config['all'];
		}

		// categories
		foreach($categories as $id) {

			// config
			if(isset($config['category-'.$id])) {
				$fields = array_merge($fields, $config['category-'.$id]);
			}

		}
		return $fields;

	}

	// form
	static public function form($item) {

		// fields
		$fields = ItemsParameter::fields($item);
		if(!$fields) {
			return false;
		}

		// parameters
		$parameters = $item->parameters()->pluck('value', 'param')->toArray();

		// form
		$form = [];
		foreach($fields as $key => $details) {

			// value
			$value = null;
			if(isset($parameters[$key])) {
				$value = $parameters[$key];
			}

			// item
			$item = new \stdClass;
			$item->key = $key;
			$item->label = $details['label'];
			$item->field = $details['field'];
			if(isset($details['options'])) {
				$item->options = ['' => '---'] + $details['options'];
			} else {
				$item->options = [];
			}
			$item->value = $value;

			// assign
			$form[] = $item;

		}

		// output
		return $form;

	}

	// set
	static public function set($item, $data) {

		// fields
		$fields = ItemsParameter::fields($item);
		if(!$fields) {
			return false;
		}

		// update
		if(!empty($data)) {
			foreach($data as $key => $value) {

				// item
				$element = ItemsParameter::where('item_id', $item->id)->where('param', $key)->first();
				if(is_null($element)) {
					
					// insert
					if(!empty($value)) {
						$element = new ItemsParameter;
						$element->param = $key;
						$element->value = $value;
						$element->item_id = $item->id;
						$element->save();
					}

				} else {

					// update
					$element->param = $key;
					$element->value = $value;
					$element->item_id = $item->id;
					$element->save();

				}
				
			}
		}

	}

	// array
	static public function arr($item) {

		// fields
		$fields = ItemsParameter::fields($item);
		if(!$fields) {
			return false;
		}

		// human
		$human = [];
		foreach($fields as $field) {
			if(isset($field['options'])) {
				foreach($field['options'] as $k => $v) {
					$human[$k] = $v;
				}
			}
		}

		// parameters
		$parameters = $item->parameters()->pluck('value', 'param')->toArray();

		// output
		$output = [];
		foreach($fields as $key => $details) {

			// value
			if(isset($parameters[$key]) AND !empty($parameters[$key])) {

				// item
				$item = new \stdClass;
				$item->label = t($details['label']);
				$item->value = $parameters[$key];
				$item->value_human = '';
				if(isset($human[$parameters[$key]])) {
					$item->value_human = $human[$parameters[$key]];
				}

				// assign
				$output[$key] = $item;

			}

		}
		return $output;

	}

}