示例#1
0
 /**
  * 属性值保存
  *
  * @param int $relid 活动产品ID
  * @param int $uid 用户ID
  * @param int $attrid 属性ID
  * @param int $attrval 属性值
  * @param str $actiConfig 活动配置
  * @param int $isCompleted 是否完成
  *
  * @return boolean
  */
 public function save($relid, $uid, $attrid, $attrval, $actiConfig = false, $isCompleted = ActivityProductAttrVal::STATUS_UNFINISHED)
 {
     $mActiProd = new ActivityProduct();
     $dActiProd = [];
     if (!($dActiProd = $mActiProd->getByPkAndUid($relid, $uid))) {
         return FALSE;
     }
     $mAttrBase = new ActivityAttrBase();
     $attr = $mAttrBase->pk($attrid);
     if (!$attr) {
         return FALSE;
     }
     $dataType = $attr['data_type'];
     $type = $attr['type'];
     $data = ['rel_id' => $dActiProd['id'], 'acti_id' => $dActiProd['acti_id'], 'product_id' => $dActiProd['product_id'], 'attr_id' => $attrid];
     if ($type == ActivityAttrBase::DATA_TYPE_MODEL) {
         $data['attr_val'] = $attrval;
         $data['finish_status'] = $isCompleted;
         //ActivityProductAttrVal::STATUS_FINISHED;
         // $data['finish_status'] = ActivityProductAttrVal::STATUS_FINISHED;
     } else {
         //if ($attr['type'] != 'cumbie') {
         //$attrval = $attrval['price'];
         //}
         $attrval = $this->parse(['ap_id' => $dActiProd['id'], 'type' => $attr['type'], 'data_type' => $attr['data_type'], 'attr_customid' => $attr['custom_id'], 'attr_val' => $attrval], self::PARSE_MODE_INPUT);
         if ($attrval === FALSE) {
             return $attrval;
         }
         $data['attr_val'] = $attrval;
         //$data['finish_status'] = $data['attr_val'] ?
         // ActivityProductAttrVal::STATUS_FINISHED : ActivityProductAttrVal::STATUS_UNFINISHED;
         $data['finish_status'] = $isCompleted;
         //ActivityProductAttrVal::STATUS_FINISHED;
     }
     $mAttrVal = new ActivityProductAttrVal();
     // 保存后
     if ($mAttrVal->store($data)) {
         if (!$actiConfig) {
             return TRUE;
         }
         $customid = $attr['custom_id'];
         if (isset($actiConfig['rel_attrs']) && isset($actiConfig['rel_attrs'][$customid]) && isset($actiConfig['rel_attrs'][$customid]['custom_id'])) {
             $itemConfig = $actiConfig['rel_attrs'][$customid];
             $attr = $mAttrBase->getByCustomID($itemConfig['custom_id']);
             if (isset($itemConfig['is_use_baseval']) && isset($itemConfig['op_type'])) {
                 // XXX: 1. 考虑调整类常量 2. 提供统一处理方法
                 // TODO: 能够根据数据类型自动选择操作
                 switch ($itemConfig['op_type']) {
                     case 'incr':
                         $attrval = $attrval + $itemConfig['val'];
                         break;
                     default:
                 }
             }
             $data['attr_id'] = $attr['id'];
             $data['attr_val'] = $attrval;
             unset($mAttrVal['id']);
             $mAttrVal->isNewRecord = TRUE;
             // TODO: 需要进行代码"解耦"
             $attrval = $this->parse(['ap_id' => $dActiProd['id'], 'type' => $attr['type'], 'data_type' => $attr['data_type'], 'attr_customid' => $attr['custom_id'], 'attr_val' => $attrval], self::PARSE_MODE_INPUT);
             return $mAttrVal->store($data);
         } else {
             return TRUE;
         }
     } else {
         return FALSE;
     }
 }