/** * 保存属性设置的值 */ public function save_attribute() { $ui_id = intval($this->input['id']); $module_id = intval($this->input['module_id']); $attrs = $this->input['attr_val']; $queryData = array('id' => $module_id, 'user_id' => $this->user['user_id'], 'ui_id' => $ui_id); $module_info = $this->api->detail('app_module', $queryData); if (!$module_info) { $this->errorOutput(PARAM_WRONG); } $attr_id = array_keys($attrs); //获取属性的id //查询界面属性表 $attr_info = $this->api->getInterfaceAttr($ui_id); $ui_attr_id = array_keys($attr_info); //提交的属性不在界面对应的属性里 if (!array_intersect($attr_id, $ui_attr_id)) { $this->errorOutput(PARAM_WRONG); } $commit_ids = array(); foreach ($attr_info as $v) { if (in_array($v['id'], $attr_id)) { if ($v['type'] == 'color' && $attrs[$v['id']]) { if (checkColor($attrs[$v['id']]) === false) { $this->errorOutput(COLOR_ERROR); } } $commit_ids[$v['id']] = $v['id']; $defaultValue = $v['def_val'] ? $v['def_val'] : $v['dVal']; if (unserialize($defaultValue)) { $defaultValue = unserialize($defaultValue); } if (!empty($attrs[$v['id']]) && !empty($defaultValue)) { //验证数据有效性 $checkResult = $this->checkValidate($attrs[$v['id']], $defaultValue, $v['type']); if (!$checkResult) { $this->errorOutput(PARAM_WRONG); } } $attr_value = is_array($attrs[$v['id']]) ? serialize($attrs[$v['id']]) : $attrs[$v['id']]; $content = array('attr_value' => $attr_value); $condition = array('ui_id' => $ui_id, 'attr_id' => $v['id'], 'module_id' => $module_id); $ret = $this->api->detail('ui_value', $condition); if ($ret) { if ($ret['attr_value'] != $attr_value) { //XXX 是否为图片(混合类型的上传图片暂未支持) if ($v['type'] == 'singlefile' || $v['type'] == 'multiplefiles') { $material_id = array(); if ($attr_value) { //验证图片是否存在 include_once CUR_CONF_PATH . 'lib/appMaterial.class.php'; $material = new appMaterial(); $material_info = $material->show(array('count' => -1, 'condition' => array('id' => $attr_value))); if (!$material_info && $ret['attr_value']) { $this->errorOutput(PARAM_WRONG); } if ($material_info) { foreach ($material_info as $v) { $material_id[$v['id']] = $v['id']; } $content['attr_value'] = implode(',', $material_id); } } //将已删除的图片删除 if ($ret['attr_value']) { $old_v = explode(',', $ret['attr_value']); if ($diff = array_diff($old_v, $material_id)) { $this->api->delete('app_material', array('id' => implode(',', $diff))); } } } $result = $this->api->update('ui_value', $content, $condition); } else { $result = true; } } else { $data = array_merge($content, $condition); $result = $this->api->create('ui_value', $data); } } } //将设置为空的属性原有的值置空 $attrs_arr = $this->api->get_interface_attr(array('module_id' => $module_id, 'ui_id' => $ui_id)); if ($attrs_arr) { $own_ids = array(); foreach ($attrs_arr as $attr) { $own_ids[$attr['attr_id']] = $attr['attr_id']; } $setEmpty = array_diff($own_ids, $commit_ids); if ($setEmpty) { $updateData = array('module_id' => $module_id, 'ui_id' => $ui_id, 'attr_id' => implode(',', $setEmpty)); $this->api->update('ui_value', array('attr_value' => ''), $updateData); } } $this->addItem($result); $this->output(); }
/** * 保存属性设置的值 * * @access public * @param id:应用id * t_id:模板id * @return array */ public function save_attribute() { $app_id = intval($this->input['id']); $temp_id = intval($this->input['t_id']); $attrs = $this->input['attr_val']; $queryData = array('id' => $app_id, 'user_id' => $this->user['user_id'], 'del' => 0, 'temp_id' => $temp_id); $app_info = $this->api->detail('app_info', $queryData); if (!$app_info) { $this->errorOutput(APP_NOT_EXISTS); } $attr_id = array_keys($attrs); //获取属性的id //查询模板属性表 $attr_info = $this->api->getTemplateAttr($temp_id); $temp_attr_id = array_keys($attr_info); //提交的属性不在模板对应的属性里 if (!array_intersect($attr_id, $temp_attr_id)) { $this->errorOutput(TPL_ATTR_ERROR); } $commit_ids = array(); foreach ($attr_info as $v) { if (in_array($v['id'], $attr_id)) { if ($v['type'] == 'color' && $attrs[$v['id']]) { if (checkColor($attrs[$v['id']]) === false) { $this->errorOutput(COLOR_ERROR); } } $commit_ids[$v['id']] = $v['id']; $defaultValue = $v['def_val'] ? $v['def_val'] : $v['dVal']; if (unserialize($defaultValue)) { $defaultValue = unserialize($defaultValue); } if (!empty($attrs[$v['id']]) && !empty($defaultValue)) { //验证数据有效性 $checkResult = $this->checkValidate($attrs[$v['id']], $defaultValue, $v['type']); if (!$checkResult) { $this->errorOutput(PROPERTY_AUTH_FAIL); } } $attr_value = is_array($attrs[$v['id']]) ? serialize($attrs[$v['id']]) : $attrs[$v['id']]; $content = array('attr_value' => $attr_value); $condition = array('app_id' => $app_id, 'temp_id' => $temp_id, 'attr_id' => $v['id']); $ret = $this->api->detail('temp_value', $condition); if ($ret) { //是否为图片(混合类型的上传图片暂未支持) if ($v['type'] == 'singlefile' || $v['type'] == 'multiplefiles') { $material_id = array(); if ($attr_value) { //验证图片是否存在 include_once CUR_CONF_PATH . 'lib/appMaterial.class.php'; $material = new appMaterial(); $material_info = $material->show(array('count' => -1, 'condition' => array('id' => $attr_value))); if (!$material_info && $ret['attr_value']) { $this->errorOutput(PIC_NOT_EXISTS); } //判断图片数量有没有查过预设的数目 if (count($material_info) > TOTAL_BACKGROUND_PIC_MUN) { $this->errorOutput(PIC_NUM_IS_TOO_MORE); } if ($material_info) { foreach ($material_info as $v) { $material_id[$v['id']] = $v['id']; } $content['attr_value'] = implode(',', $material_id); } } //将已删除的图片删除 /* if ($ret['attr_value']) { $old_v = explode(',', $ret['attr_value']); if ($diff = array_diff($old_v, $material_id)) { $this->api->delete('app_material', array('id' => implode(',', $diff))); } } */ //默认选中的背景 if ($this->input['bg_default']) { //判断默认选中的在不在所有传的背景id中 if (!in_array($this->input['bg_default'], $material_id)) { $this->errorOutput(ERROR_SELECTED_BG_ID); } $content['selected_value'] = $this->input['bg_default']; } } $result = $this->api->update('temp_value', $content, $condition); } else { $data = array_merge($content, $condition); $result = $this->api->create('temp_value', $data); } } } //将设置为空的属性原有的值置空 $attrs_arr = $this->api->get_template_attr(array('app_id' => $app_id, 'temp_id' => $temp_id)); if ($attrs_arr) { $own_ids = array(); foreach ($attrs_arr as $attr) { $own_ids[$attr['attr_id']] = $attr['attr_id']; } $setEmpty = array_diff($own_ids, $commit_ids); if ($setEmpty) { $updateData = array('app_id' => $app_id, 'temp_id' => $temp_id, 'attr_id' => implode(',', $setEmpty)); $this->api->update('temp_value', array('attr_value' => ''), $updateData); } } $this->addItem($result); $this->output(); }