From 2cf16de81585eadd1aedec7e0ed30516b34f7325 Mon Sep 17 00:00:00 2001 From: Florent Galland Date: Fri, 8 Mar 2013 23:14:57 +0100 Subject: [PATCH] Fix 'not reg. as collab.' and 'undefined qt' --- components/collaborative/controller.php | 54 ++++++++++++++++--------- components/worker_manager/init.js | 16 ++++---- 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/components/collaborative/controller.php b/components/collaborative/controller.php index 471b214..c92a4f6 100644 --- a/components/collaborative/controller.php +++ b/components/collaborative/controller.php @@ -56,17 +56,11 @@ exit(formatJSEND('error', 'No filename specified in register')); } - $query = array('user' => $_SESSION['user'], 'filename' => $_POST['filename']); - $entry = getDB()->select($query, 'registered'); - if ($entry != null) { - echo formatJSEND('success', 'Already registered as collaborator for ' . $_POST['filename']); + $isRegistered = registerToFile($_SESSION['user'], $_POST['filename']); + if ($isRegistered) { + echo formatJSEND('success'); } else { - $entry = getDB()->create($query, 'registered'); - if ($entry != null) { - echo formatJSEND('success'); - } else { - echo formatJSEND('error', 'Unable to register as collaborator for ' . $_POST['filename']); - } + echo formatJSEND('error', 'Unable to register as collaborator for ' . $_POST['filename']); } break; @@ -123,15 +117,20 @@ exit(formatJSEND('error', 'No selection specified in sendSelectionChange')); } - if (isUserRegisteredForFile($_POST['filename'], $_SESSION['user'])) { - $selection = json_decode($_POST['selection']); - $query = array('user' => $_SESSION['user'], 'filename' => $_POST['filename']); - $entry = getDB()->create($query, 'selection'); - $entry->put_value($selection); - echo formatJSEND('success'); - } else { - echo formatJSEND('error', 'Not registered as collaborator for ' . $_POST['filename']); + /* If user is not already registerd for the given file, register him. */ + if (!isUserRegisteredForFile($_POST['filename'], $_SESSION['user'])) { + $isRegistered = registerToFile($_POST['filename'], $_SESSION['user']); + if (!$isRegistered) { + echo formatJSEND('error', 'Unable to register as collaborator for ' . $_POST['filename']); + exit; + } } + + $selection = json_decode($_POST['selection']); + $query = array('user' => $_SESSION['user'], 'filename' => $_POST['filename']); + $entry = getDB()->create($query, 'selection'); + $entry->put_value($selection); + echo formatJSEND('success'); break; case 'sendDocumentChange': @@ -378,6 +377,25 @@ } } + /* Register as a collaborator for the given filename. Return false if + * failed. */ + function registerToFile($user, $filename) { + $query = array('user' => $user, 'filename' => $filename); + $entry = getDB()->select($query, 'registered'); + if ($entry != null) { + debug('Warning: already registered as collaborator for ' . $filename); + return true; + } else { + $entry = getDB()->create($query, 'registered'); + if ($entry != null) { + return true; + } else { + debug('Error: unable to register as collaborator for ' . $filename); + return false; + } + } + } + /* Touch the heartbeat marker file for the given user. Return true on * success, false on failure. */ function updateHeartbeatMarker($user) { diff --git a/components/worker_manager/init.js b/components/worker_manager/init.js index e46a540..b749ec4 100644 --- a/components/worker_manager/init.js +++ b/components/worker_manager/init.js @@ -46,15 +46,17 @@ this.worker.postMessage(taskConfig); }, concludeTask: function(msg){ - var tq = this.taskQueue[0]; - callback = tq.callback; - context = tq.context; - this.taskQueue.splice(0, 1); if (this.taskQueue.length > 0) { - this.scheduleNext(); + var tq = this.taskQueue[0]; + callback = tq.callback; + context = tq.context; + this.taskQueue.splice(0, 1); + if (this.taskQueue.length > 0) { + this.scheduleNext(); + } + tq.callback.apply(context, [msg.success, msg.result]); } - tq.callback.apply(context, [msg.success, msg.result]); } } -})(this, jQuery); \ No newline at end of file +})(this, jQuery);