views:

49

answers:

2

Hi,

The current app I'm building is a collaboration app that holds several users in a "team" or company that can access a set of projects. Each project has it's own documents.

I want to protect team users from running in to each other and so I have built a system where documents are locked by the first user to access them. The document is then unlocked when any of the following occur:

  • The user closes the document
  • The user signs out and destroys his/her session
  • The user left without signing out but the session garbage collection unlocks the document

All this works well but one thing is left to fix...

I need to know when the user leaves a project without unlocking the document (basically just leaves the page), since he can walk in to another project and edit another document.

My only option I thought of so far is by catching the http referrer in my base controller class (CodeIgniter MVC) and do a search on the url to see if it matches a project... Then unlock the document.

This is not a strong option though since the http referrer variable is unpredictable.

What would you do? (The same user being in the same document in two windows is an issue that can be ignored)

Thanks!

+1  A: 

Keep a reference to the document they're currently editing in your session, and then when a document is open, check and see if it's different? If so, unlock the previous one?

Amber
True, but I want a user to be able to edit two projects at a time, maybe check an old one for reference etc.
Christoffer
+1  A: 

One way around it would be using the window.onUnload Javascript event to signal back to the server the page is being left. It would be best to use AJAX on the current page to communicate since most browsers will block a pop-up these days.

Mike
I will look into it.
Christoffer