parent
13a4007eb1
commit
262834b6af
@ -84,13 +84,8 @@ class DocumentController extends Controller{
|
||||
|
||||
$members = array();
|
||||
$member = new Db_Member();
|
||||
foreach ($sessions as $session) {
|
||||
$sessionMembers = $member->getCollectionBy('es_id', $session['es_id']);
|
||||
$activeMembers = array_filter($sessionMembers, function($member){
|
||||
return $member['status']==Db_Member::MEMBER_STATUS_ACTIVE;
|
||||
});
|
||||
|
||||
$members[$session['es_id']] = array_values($activeMembers);
|
||||
foreach ($sessions as $session) {
|
||||
$members[$session['es_id']] = $member->getActiveCollection($session['es_id']);
|
||||
}
|
||||
|
||||
\OCP\JSON::success(array('documents' => $documents,'sessions' => $sessions,'members' => $members));
|
||||
|
@ -81,6 +81,23 @@ class SessionController extends Controller{
|
||||
throw new \Exception($path . ' does not exist or is not writable for user ' . $uid);
|
||||
}
|
||||
|
||||
$member = new Db_Member();
|
||||
$members = $member->getActiveCollection($esId);
|
||||
$memberIds = array_map(
|
||||
function($x){
|
||||
return ($x['member_id']);
|
||||
},
|
||||
$members
|
||||
);
|
||||
|
||||
//check if member belongs to the session
|
||||
if (!in_array($memberId, $memberIds)){
|
||||
throw new \Exception($memberId . ' does not belong to session ' . $esId);
|
||||
}
|
||||
|
||||
// Active users except current user
|
||||
$memberCount = count($memberIds) - 1;
|
||||
|
||||
if ($view->file_exists($path)){
|
||||
$currentHash = sha1($view->file_get_contents($path));
|
||||
if ($currentHash !== $sessionData['genesis_hash']){
|
||||
@ -90,9 +107,15 @@ class SessionController extends Controller{
|
||||
}
|
||||
|
||||
if ($view->file_put_contents($path, $content)){
|
||||
//Document saved successfully. Cleaning session data
|
||||
// temporary workaround for https://github.com/owncloud/documents/issues/63
|
||||
Db_Session::cleanUp($esId);
|
||||
// Not a last user
|
||||
if ($memberCount>0){
|
||||
// Update genesis hash to prevent conflicts
|
||||
$session->updateGenesisHash($esId, sha1($content));
|
||||
} else {
|
||||
// Last user. Kill session data
|
||||
Db_Session::cleanUp($esId);
|
||||
}
|
||||
|
||||
$view->touch($path);
|
||||
}
|
||||
\OCP\JSON::success();
|
||||
|
@ -39,6 +39,27 @@ class Db_Member extends Db{
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function getActiveCollection($esId){
|
||||
$result = $this->execute('
|
||||
SELECT `es_id`, `member_id`
|
||||
FROM ' . self::DB_TABLE . '
|
||||
WHERE `es_id`= ?
|
||||
AND `status`=?
|
||||
',
|
||||
array(
|
||||
$esId,
|
||||
self::MEMBER_STATUS_ACTIVE
|
||||
)
|
||||
);
|
||||
$members = $result->fetchAll();
|
||||
if (!is_array($members)){
|
||||
$members = array();
|
||||
}
|
||||
return $members;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark members as inactive
|
||||
* @param string $esId - session Id
|
||||
|
@ -102,6 +102,15 @@ class Db_Session extends \OCA\Documents\Db {
|
||||
array_unshift($this->data, $esId);
|
||||
return parent::insert($this->data);
|
||||
}
|
||||
|
||||
public function updateGenesisHash($esId, $genesisHash){
|
||||
return $this->execute(
|
||||
'UPDATE `*PREFIX*documents_session` SET `genesis_hash`=? WHERE `es_id`=?',
|
||||
array(
|
||||
$esId, $genesisHash
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function getInfo($esId){
|
||||
$result = $this->execute('
|
||||
|
Loading…
x
Reference in New Issue
Block a user