/** * 修改联系人 * @param Contact $contact * @param string $mode */ public function edit($gid, Contact $contact, $mode = 'default') { return $this->group_contact_mapper->update($gid, $contact, $mode); }
/** * 修改联系人,返回结果和最后一次修改时间 * @param int $user_id 用户ID * @param int $id 联系人ID * @param array $data 联系人数组 * @param string $mode 修改模式 default、overwrite、special * @return array FAIL 修改失败 SUCCESS 修改成功 CONFLICT 冲突 MERGE_SUCCESS 合并成功 */ public function edit($user_id, $id, $data, $mode = 'default') { $contact = Contact_Helper::array_to_contact($data, $this->get_country_code($user_id)); $contact->set_user_id($user_id)->set_id($id)->set_source($this->get_source_name()); $old_contact = $this->get($user_id, $id); $result = FAIL; //联系人不存在或在回收站中 if ($old_contact === FALSE) { $result = CONFLICT; } else { $to_update = FALSE; $is_append = FALSE; switch ($mode) { case 'overwrite': //覆盖模式,检查联系人是否变更 $status = $old_contact->compare($contact); if ($status) { $result = NO_MODIFY_MERGE_SUCCESS; } else { $to_update = TRUE; } break; case 'special': //检查联系人是否变更 $status = $old_contact->compare_special($contact); if ($status) { $result = NO_MODIFY_MERGE_SUCCESS; } else { $to_update = TRUE; } break; default: $status = $old_contact->compare($contact); if ($status) { $result = NO_MODIFY_MERGE_SUCCESS; } else { $modified_at = $old_contact->get_modified_at() ? $old_contact->get_modified_at() : $old_contact->get_created_at(); if ($modified_at == $contact->get_modified_at()) { $to_update = TRUE; } else { $status = $old_contact->merge($contact, $is_append); if ($status === FALSE) { $result = CONFLICT; } elseif ($is_append == FALSE) { $result = NO_MODIFY_MERGE_SUCCESS; } else { //合并成功设置更新来源 $old_contact->set_source($contact->get_source()); $to_update = TRUE; } } } break; } if ($to_update === TRUE) { //保存快照,同时放入回收站 if ($this->save_snapshot($user_id) and $this->contact_mapper->move_update_contact_to_recycle($user_id, $id, $this->source)) { //切换默认模式到覆盖模式 $mode = $mode === 'default' ? 'overwrite' : $mode; if (!$is_append) { $result = $this->contact_mapper->update($contact, $mode); } else { $result = $this->contact_mapper->update($old_contact, 'overwrite'); } } } //清除联系人列表缓存 if ($result == SUCCESS or $result == MERGE_SUCCESS) { $this->prepare_task($user_id, array(), (array) $id); } elseif ($result == NO_MODIFY_MERGE_SUCCESS) { $contact->set_created_at($old_contact->get_created_at())->set_modified_at($old_contact->get_modified_at()); } } return array('result' => $result, 'modified_at' => $contact->get_modified_at()); }