Exemple #1
0
 /**
  * 还原快照
  * @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;
 }