parent
13a4007eb1
commit
262834b6af
@ -85,12 +85,7 @@ class DocumentController extends Controller{
|
|||||||
$members = array();
|
$members = array();
|
||||||
$member = new Db_Member();
|
$member = new Db_Member();
|
||||||
foreach ($sessions as $session) {
|
foreach ($sessions as $session) {
|
||||||
$sessionMembers = $member->getCollectionBy('es_id', $session['es_id']);
|
$members[$session['es_id']] = $member->getActiveCollection($session['es_id']);
|
||||||
$activeMembers = array_filter($sessionMembers, function($member){
|
|
||||||
return $member['status']==Db_Member::MEMBER_STATUS_ACTIVE;
|
|
||||||
});
|
|
||||||
|
|
||||||
$members[$session['es_id']] = array_values($activeMembers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
\OCP\JSON::success(array('documents' => $documents,'sessions' => $sessions,'members' => $members));
|
\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);
|
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)){
|
if ($view->file_exists($path)){
|
||||||
$currentHash = sha1($view->file_get_contents($path));
|
$currentHash = sha1($view->file_get_contents($path));
|
||||||
if ($currentHash !== $sessionData['genesis_hash']){
|
if ($currentHash !== $sessionData['genesis_hash']){
|
||||||
@ -90,9 +107,15 @@ class SessionController extends Controller{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($view->file_put_contents($path, $content)){
|
if ($view->file_put_contents($path, $content)){
|
||||||
//Document saved successfully. Cleaning session data
|
// Not a last user
|
||||||
// temporary workaround for https://github.com/owncloud/documents/issues/63
|
if ($memberCount>0){
|
||||||
Db_Session::cleanUp($esId);
|
// Update genesis hash to prevent conflicts
|
||||||
|
$session->updateGenesisHash($esId, sha1($content));
|
||||||
|
} else {
|
||||||
|
// Last user. Kill session data
|
||||||
|
Db_Session::cleanUp($esId);
|
||||||
|
}
|
||||||
|
|
||||||
$view->touch($path);
|
$view->touch($path);
|
||||||
}
|
}
|
||||||
\OCP\JSON::success();
|
\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
|
* Mark members as inactive
|
||||||
* @param string $esId - session Id
|
* @param string $esId - session Id
|
||||||
|
@ -103,6 +103,15 @@ class Db_Session extends \OCA\Documents\Db {
|
|||||||
return parent::insert($this->data);
|
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){
|
public function getInfo($esId){
|
||||||
$result = $this->execute('
|
$result = $this->execute('
|
||||||
SELECT `s`.*, COUNT(`m`.`member_id`) AS `users`
|
SELECT `s`.*, COUNT(`m`.`member_id`) AS `users`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user