Example #1
0
 protected function saveInternal()
 {
     $itemPropClass = Kiwi::getItemPropClass();
     $itemPropValueClass = Kiwi::getItemPropValueClass();
     foreach ($this->itemProps as $key => $itemProp) {
         if ($value = $this->{$key}) {
             switch ($itemProp->type) {
                 case $itemPropClass::ITEM_PROP_TYPE_TEXT:
                     if (isset($this->itemPropValues[$key])) {
                         $itemPropValue = $this->itemPropValues[$key];
                     } else {
                         $itemPropValue = Kiwi::getItemPropValue();
                         $itemPropValue->item_id = $this->itemId;
                         $itemPropValue->item_prop_id = $itemProp->item_prop_id;
                     }
                     $itemPropValue->custom_prop_value = $value;
                     if (!$itemPropValue->save()) {
                         $this->addError($key, Json::encode($itemPropValue->getErrors()));
                     }
                     break;
                 case $itemPropClass::ITEM_PROP_TYPE_SELECT:
                     if (isset($this->itemPropValues[$key])) {
                         $itemPropValue = $this->itemPropValues[$key];
                     } else {
                         $itemPropValue = Kiwi::getItemPropValue();
                         $itemPropValue->item_id = $this->itemId;
                         $itemPropValue->item_prop_id = $itemProp->item_prop_id;
                     }
                     $itemPropValue->prop_value_id = $value;
                     if (!$itemPropValue->save()) {
                         $this->addError($key, Json::encode($itemPropValue->getErrors()));
                     }
                     break;
                 case $itemPropClass::ITEM_PROP_TYPE_CHECKBOX:
                     if (isset($this->itemPropValues[$key])) {
                         $itemPropValue = $this->itemPropValues[$key];
                     } else {
                         $itemPropValue = [];
                     }
                     $propValueIds = array_keys($itemPropValue);
                     $toAdd = array_diff($value, $propValueIds);
                     foreach ($toAdd as $propValueId) {
                         $itemPropValue = Kiwi::getItemPropValue();
                         $itemPropValue->item_id = $this->itemId;
                         $itemPropValue->item_prop_id = $itemProp->item_prop_id;
                         $itemPropValue->prop_value_id = $propValueId;
                         if (!$itemPropValue->save()) {
                             $this->addError($key, Json::encode($itemPropValue->getErrors()));
                         }
                     }
                     $toDel = array_diff($propValueIds, $value);
                     $itemPropValueClass::deleteAll(['item_id' => $this->itemId, 'item_prop_id' => $itemProp->item_prop_id, 'prop_value_id' => $toDel]);
                     break;
                 default:
                     break;
             }
         } else {
             $itemPropValueClass::deleteAll(['item_id' => $this->itemId, 'item_prop_id' => $itemProp->item_prop_id]);
         }
     }
     return !$this->hasErrors();
 }
Example #2
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getItemPropValues()
 {
     return $this->hasMany(Kiwi::getItemPropValueClass(), ['item_prop_id' => 'item_prop_id']);
 }