diff --git a/js/3rdparty/webodf/editor/MemberListView.js b/js/3rdparty/webodf/editor/MemberListView.js index c8f347b7..b312411d 100644 --- a/js/3rdparty/webodf/editor/MemberListView.js +++ b/js/3rdparty/webodf/editor/MemberListView.js @@ -69,6 +69,8 @@ define("webodf/editor/MemberListView", while (node) { if (node.memberId === memberId) { + node.setAttribute('uid', memberDetails.uid); + node.setAttribute('count', 1); node = node.firstChild; while (node) { if (node.localName === "img") { @@ -76,11 +78,11 @@ define("webodf/editor/MemberListView", node.src = memberDetails.imageUrl; // update border color node.style.borderColor = memberDetails.color; - } else if (node.localName === "span" && memberDetails.imageUrl){ - try { - $(node).avatar(memberDetails.imageUrl, 60); - } catch (e){} - node.style.borderColor = memberDetails.color; + } else if (node.localName === "span" && memberDetails.imageUrl){ + try { + $(node).avatar(memberDetails.imageUrl, 60); + } catch (e){} + node.style.borderColor = memberDetails.color; } else if (node.localName === "div") { node.setAttribute('fullname', memberDetails.fullName); } @@ -119,10 +121,6 @@ define("webodf/editor/MemberListView", if (memberId === editorSession.sessionController.getInputMemberId()){ documentsMain.onNickChange(memberId, fullnameNode); } - var caret = editorSession.sessionView.getCaret(memberId); - if (caret) { - //caret.toggleHandleVisibility(); - } }; if (memberId === editorSession.sessionController.getInputMemberId()){ memberListDiv.insertBefore(avatarDiv, memberListDiv.firstChild); @@ -139,7 +137,12 @@ define("webodf/editor/MemberListView", var node = memberListDiv.firstChild; while (node) { if (node.memberId === memberId) { - memberListDiv.removeChild(node); + var count = parseInt(node.getAttribute('count')); + if (count>1){ + node.setAttribute('count', count-1); + } else { + memberListDiv.removeChild(node); + } return; } node = node.nextSibling; @@ -152,8 +155,21 @@ define("webodf/editor/MemberListView", */ function addMember(memberId) { var member = editorSession.getMember(memberId), - properties = member.getProperties(); - createAvatarButton(memberId); + properties = member.getProperties(), + node = memberListDiv.firstChild, + found = false; + while (node) { + if (node.getAttribute('uid') === properties.uid) { + var count = parseInt(node.getAttribute('count')); + node.setAttribute('count', count+1); + found = true; + break; + } + node = node.nextSibling; + } + if (!found){ + createAvatarButton(memberId); + } updateAvatarButton(memberId, properties); } diff --git a/lib/db/op.php b/lib/db/op.php index cef01215..48199a70 100644 --- a/lib/db/op.php +++ b/lib/db/op.php @@ -86,7 +86,7 @@ class Op extends \OCA\Documents\Db { return $result->fetchAll(); } - public function addMember($esId, $memberId, $fullName, $color, $imageUrl){ + public function addMember($esId, $memberId, $fullName, $userId, $color, $imageUrl){ $op = array( 'optype' => 'AddMember', 'memberid' => (string) $memberId, @@ -94,7 +94,8 @@ class Op extends \OCA\Documents\Db { 'setProperties' => array( 'fullName' => $fullName, 'color' => $color, - 'imageUrl' => $imageUrl + 'imageUrl' => $imageUrl, + 'uid' => $userId, ) ); $this->insertOp($esId, $memberId, $op); diff --git a/lib/db/session.php b/lib/db/session.php index 2baf3cc4..ffb79bfc 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -79,29 +79,31 @@ class Session extends \OCA\Documents\Db { $file->getToken() )); - if ($member->insert()){ - // Do we have OC_Avatar in out disposal? - if (!class_exists('\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true){ - $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; - } else { - $imageUrl = $uid; - } + if (!$member->insert()){ + throw new \Exception('Failed to add member into database'); + } + + // Do we have OC_Avatar in out disposal? + if (\OC_Config::getValue('enable_avatars', true) !== true){ + $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; + } else { + $imageUrl = $uid; + } - $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Documents\Db\Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); + $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Documents\Db\Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); + $userId = $file->isPublicShare() ? $displayName : \OCP\User::getUser(); - $sessionData['member_id'] = (string) $member->getLastInsertId(); - $op = new \OCA\Documents\Db\Op(); - $op->addMember( + $sessionData['member_id'] = (string) $member->getLastInsertId(); + $op = new \OCA\Documents\Db\Op(); + $op->addMember( $sessionData['es_id'], $sessionData['member_id'], $displayName, + $userId, $memberColor, $imageUrl - ); - } else { - throw new \Exception('Failed to add member into database'); - } - + ); + $sessionData['title'] = basename($path); $fileInfo = $ownerView->getFileInfo($path); $sessionData['permissions'] = $fileInfo->getPermissions();