Lock helper
You can view the source on GitHub.
Often used with the loading helper, it allows you to obtain a lock, and ensures that no-one else can edit a particular resource.
Example setup
For a site wide resource:
$lock = new lock('example');
For a particular resource:
$lock = new lock('item', $id);
Example usage
Checks to see someone has the lock, but doesn't try to open if not:
if ($lock->locked()) { }
Check to see if we have the lock, but doesn't try to open if not:
if ($lock->check()) { }
Try to open the lock, set data, and close afterwards.
if ($lock->open()) { $lock->data_set('name', 'Craig'); $lock->data_set(array( 'field_1' => 'AAA', 'field_2' => 'BBB', 'field_3' => 'CCC', )); sleep(5); if (!$lock->open()) { // Check to see if we still have the lock (not expired) } $lock->time_out_set(30); // If more time is needed sleep(5); $lock->close(); } else { $this->set('name', $lock->data_get('name')); }