Repository URL to install this package:
|
Version:
3.2.0 ▾
|
<?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;
}
}