$values) { $prop_id = intval($prop_id); $prop = Property::getByID($prop_id); foreach ($values as $v){ $o = [ self::$PROPERTY => $prop_id, self::$ITEM => $item_id, self::$PRICE => je($v['price']), self::$IS_DEFAULT => (boolval($v['is_default'])?1:0), ]; switch ($prop[Property::$TYPE]){ case ePropertyType::VALUES_ONE: case ePropertyType::VALUES_MANY: $o[self::$VALUE] = intval($v['value']); break; default: $o[self::$TEXT] = $v['value']; break; } self::insert($o); } } } } else { $prop = Property::getByID($values[self::$PROPERTY]); switch (intval($prop[Property::$TYPE])) { case ePropertyType::VALUES_MANY: if ($prop_id = intval($prop[Property::$ID]) and $item_id = intval($values[self::$ITEM])) { self::delete(new \Where(\Where::_and([ \Where::_operator(self::$PROPERTY, '=', $prop[Property::$ID]), \Where::_operator(self::$ACCOUNT, '=', UID), \Where::_operator(self::$ITEM, '=', $values[self::$ITEM]), ])) ); if (!is_array($values[self::$VALUE])) $values[self::$VALUE] = [$values[self::$VALUE]]; foreach ($values[self::$VALUE] as $v) { if ($C = PropertyValue::isMy($v)) { self::insert([ self::$PROPERTY => $prop_id, self::$VALUE => $C[PropertyValue::$ID], self::$ITEM => $item_id, ]); } } break; } } } return $res; } static function getByItem($item_id,$isAssocArray = true){ $r = self::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator(self::$ITEM,'=',$item_id), ])) ],$isAssocArray); return $r; } static function getByItemPropertyID($item_id,$property_id,$isAssocArray = true){ $r = self::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator(self::$PROPERTY,'=',$property_id), \Where::_operator(self::$ITEM,'=',$item_id), ])) ],$isAssocArray); return $r; } static function getByPropertyID($id,$isAssocArray = true){ return self::select([ \Query::WHERE => new \Where(\Where::_operator(self::$PROPERTY,'=',$id)) ],$isAssocArray); } static function getPropertyIdsForItem($id){ $res = []; $r = Value::select([ \Query::SELECT => 'distinct '.Value::$PROPERTY, \Query::WHERE => new \Where(\Where::_operator(Value::$ITEM,'=',$id)) ],false); while($l = \DB::fetch($r)){ $res[] = $l[Value::$PROPERTY]; } return $res; } static function getForm($values = [], $options = []) :array { $or = []; $property = null; if($pids = self::getPropertyIdsForItem($values[self::$ITEM])) $or[] = $pids; if($property_id = intval($values[self::$PROPERTY])) { //$or[] = $property_id; $property = Property::getByID($property_id); } if(boolval($values['react'])){ $data = Property::getStructureForReactInput(); $ITEM = Item::getByID(intval($values[self::$ITEM])); $ITEM_ID = $ITEM[Item::$ID]; $_vals = self::getByItem($ITEM_ID); $vals = []; foreach ($_vals as $id=>$v){ $vals[$v[Value::$PROPERTY]][] = [ 'id' => $v[self::$ID], 'title' => self::getValue($v), 'value' => self::getValueForReact($v), 'price' => json_decode($v[self::$PRICE]), 'is_default' => boolval($v[self::$IS_DEFAULT]), ]; } /* switch ($ITEM[Item::$PRICE_TYPE]){ case eShopItemPriceType::COMPONENT_LIST } /**/ $res = [ [ Form::VIEW => Form::ROW, Form::ROW_CLASSES=>' row', Form::COLS => [ [ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'', Form::TYPE =>eInputType::SUBMIT_AND_CLOSE, Form::INPUT_OPT => [ Input::CSS_CLASS => MS::CSS_BTN_SAVE_AND_CLOSE, Input::LABEL => $c = V::get(msLang::$BUTTON_SUBMIT_AND_CLOSE), ], ], ] ], self::getCommonFormInputs(), [ Form::VIEW => Form::INPUT, Form::KEY_VALUE => self::$ITEM, Form::TYPE => eInputType::HIDDEN, ], [ Form::VIEW => Form::INPUT, Form::KEY_VALUE => 'react_values', Form::TYPE => eInputType::HIDDEN, Form::INPUT_OPT => [ Input::VALUE=>1, ], ], [ Form::VIEW => Form::INPUT, Form::TYPE => eInputType::SHOP_ITEM_VALUES, Form::KEY_VALUE => 'values', Form::INPUT_OPT => [ Input::OPTIONS => $data, Input::VALUE => [ 'vals'=>$vals, 'price_type'=>$ITEM[Item::$PRICE_TYPE], ], ] ], ]; } else { $res = [ self::getCommonFormInputs(), [ Form::VIEW => Form::INPUT, Form::KEY_VALUE => self::$ITEM, Form::TYPE => eInputType::HIDDEN, ], [ Form::VIEW => Form::ROW, Form::COLS => [ $property_id ? [ Form::VIEW => Form::TITLE, Form::TITLE_TEXT => Property::getName($property), ] : null, $property_id ? [ Form::VIEW => Form::INPUT, Form::KEY_VALUE => self::$PROPERTY, Form::TYPE => eInputType::HIDDEN, ] : [ Form::VIEW => Form::INPUT, Form::COL_CLASSES => 'col-12', Form::KEY_VALUE => self::$PROPERTY, Form::TYPE => eInputType::SELECT_SEARCH, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$PROPERTY), Input::LABEL => $c, Input::OPTIONS => Property::getNameList([ \Query::WHERE => $w = new \Where( \Where::_and([ \Where::_operator(Property::$ACCOUNT, '=', UID), $or ? \Where::_or([ \Where::_operator(Property::$ID, '=', $values[self::$PROPERTY]), $pids ? \Where::_not([\Where::_in(Property::$ID, $pids)]) : null, ]) : null ]) ) ]) ], ], ] ], [ Form::VIEW => FORM::INPUT, Form::TYPE => eInputType::SCRIPT, Form::INPUT_OPT => [ Input::VALUE => '$.fn.ITEM(\'initChangingProperty\')', ], ], [ Form::VIEW => FORM::INPUT, Form::TYPE => eInputType::HTML, Form::INPUT_OPT => [ Input::VALUE => '
', ], ], self::getCommonFormSubmits($values), ]; } return $res; } static function columnInfo() : array { return [ new C([ C::VAR_NAME =>&self::$ID, C::TYPE =>eColumnType::INT, C::AUTO_INCREMENT =>true, C::PRIMARY =>true, C::DEFAULT =>0, C::HIDDEN =>true, C::TH =>V::get(Vars::$ID), ]), new C([ C::VAR_NAME => &self::$ITEM, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$ITEM), C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$PROPERTY, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$PROPERTY), C::FUNC_VALUE => function($v){ return Property::getName( $v ); }, C::FUNC_VALUE_DATA => function($v){ return Property::getName($v); } ]), new C([ C::VAR_NAME => &self::$PRICE, C::TYPE => eColumnType::TEXT, C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$TEXT, C::TYPE => eColumnType::VARCHAR, C::LENGTH => 255, C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$IS_DEFAULT, C::TYPE => eColumnType::TINYINT, C::DEFAULT => 0, C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$VALUE, C::TYPE => eColumnType::VARCHAR, C::LENGTH => 255, C::TH => V::get(Vars::$VALUE), C::FUNC_VALUE => function($v){ return self::getValue($v); }, C::FUNC_VALUE_DATA => function($v){ return self::getValue($v); } ]), new C([ C::VAR_NAME => &self::$ACCOUNT, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$ACCOUNT), C::DEFAULT => intval(UID), c::HIDDEN=>true, c::FUNC_VALUE => function($v){ if($id = $v[self::$ACCOUNT]) { return \Account::getName( \Account::getByID($id) ); } else return '-'; }, ]), new C([ C::VAR_NAME => &self::$CREATED, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$CREATED), C::DEFAULT => time(), c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);}, c::HIDDEN=>true, ]), new C([ C::VAR_NAME => &self::$UPDATED, C::TYPE => eColumnType::INT, C::DEFAULT => time(), C::TH => V::get(Vars::$UPDATED), c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);}, c::HIDDEN=>true, ]), ]; } } new Value(); ///