Blame view

sources/apps/documents/ajax/otpoll.php 2.9 KB
d1bafeea1   Kload   [fix] Upgrade to ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  <?php
  
  /**
   * ownCloud - Documents App
   *
   * @author Victor Dubiniuk
   * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
   *
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   */
  
  namespace OCA\Documents;
  
  class BadRequestException extends \Exception {
  
  	protected $body = "";
  
  	public function setBody($body){
  		$this->body = $body;
  	}
  
  	public function getBody(){
  		return $this->body;
  	}
  }
  
  $response = array();
  
  try{
  	$request = new Request();
  	$esId = $request->getParam('args/es_id');
  	
  	$session = new Db_Session();
  	$session->load($esId);
  	
  	$memberId = $request->getParam('args/member_id');
  	$member = new Db_Member();
  	$member->load($memberId);
  	
  	if ($member->getIsGuest() || is_null($member->getIsGuest())){
  		Controller::preDispatchGuest(false);
  	} else {
  		Controller::preDispatch(false);
  	}
  
  	try {
  		$file = new File($session->getFileId());
  	} catch (\Exception $e){
  		Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage());
  		$ex = new BadRequestException();
  		$ex->setBody($request->getRawRequest());
  		throw $ex;
  	}
  	
  	$command = $request->getParam('command');
  	switch ($command){
  		case 'sync_ops':
  			$seqHead = (string) $request->getParam('args/seq_head');
  			if (!is_null($seqHead)){
  				$ops = $request->getParam('args/client_ops');
  				$hasOps = is_array($ops) && count($ops)>0;
  
  				$op = new Db_Op();
  				$currentHead = $op->getHeadSeq($esId);
  				
  				try {
  					$member->updateActivity($memberId);
  				} catch (\Exception $e){
6d9380f96   Cédric Dupont   Update sources OC...
70
  					//Db error. Not critical
d1bafeea1   Kload   [fix] Upgrade to ...
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  				}
  
  				// TODO handle the case ($currentHead == "") && ($seqHead != "")
  				if ($seqHead == $currentHead) {
  					// matching heads
  					if ($hasOps) {
  						// incoming ops without conflict
  						// Add incoming ops, respond with a new head
  						$newHead = Db_Op::addOpsArray($esId, $memberId, $ops);
  						$response["result"] = 'added';
  						$response["head_seq"] = $newHead ? $newHead : $currentHead;
  					} else {
  						// no incoming ops (just checking for new ops...)
  						$response["result"] = 'new_ops';
  						$response["ops"] = array();
  						$response["head_seq"] = $currentHead;
  					}
  				} else { // HEADs do not match
  					$response["ops"] = $op->getOpsAfterJson($esId, $seqHead);
  					$response["head_seq"] = $currentHead;
  					$response["result"] = $hasOps ? 'conflict' : 'new_ops';
  				}
  				
  				$inactiveMembers = $member->updateByTimeout($esId);
  				foreach ($inactiveMembers as $inactive){
  					$op->removeCursor($esId, $inactive);
  					$op->removeMember($esId, $inactive);
  				}
  			
  			} else {
  				// Error - no seq_head passed
  				throw new BadRequestException();
  			}
  
  			break;
  		default:
  			$ex = new BadRequestException();
  			$ex->setBody($request->getRawRequest());
  			throw $ex;
  			break;
  	}
  
  	\OCP\JSON::success($response);
  } catch (BadRequestException $e){
  	header('HTTP/1.1 400: BAD REQUEST');
  	\OCP\JSON::error( array(
  		'err' => 'bad request:[' . $e->getBody() . ']',
  	));
  }
  exit();