/** * 还原快照 * @param int $user_id 用户ID * @param int $dateline 时间 * @return bool */ public function recover_snapshot($user_id, $dateline) { if ($this->save_snapshot($user_id)) { $old_contact_list = $this->get($user_id); $old_ids = array_keys($old_contact_list); if ($this->contact_mapper->recover_snapshot($user_id, $dateline)) { //缓存未清,须从数据库读取 $new_contact_list = $this->get_list($user_id); $new_ids = array_keys($new_contact_list); //相同的ID,更新时间不一致的作更新操作 $updated_ids = array_intersect($old_ids, $new_ids); if ($updated_ids) { foreach ($updated_ids as $key => $id) { if ($old_contact_list[$id]['modified_at'] == $new_contact_list[$id]['modified_at']) { unset($updated_ids[$key]); } } } //原来有,现在没有的ID,作删除操作 $deleted_ids = array_diff($old_ids, $new_ids); //原来没有,现在有的ID,作新增操作 $added_ids = array_diff($new_ids, $old_ids); $this->prepare_task($user_id, $added_ids, $updated_ids, $deleted_ids); return TRUE; } } return FALSE; }