+
+ function updateLock($x, $req )
+ {
+ $this->permitError = true; // allow it to fail without dieing
+
+ $lock = DB_DataObjecT::factory('core_locking');
+ $this->permitError = false;
+ if (is_a($lock,'DB_DataObject') && $this->authUser) {
+
+ $lock->on_id = $x->{$this->key};
+ $lock->on_table= strtolower($x->tableName());
+ if (!empty($_REQUEST['_lock_id'])) {
+ $lock->whereAdd('id != ' . ((int)$_REQUEST['_lock_id']));
+ } else {
+ $lock->whereAdd('person_id !=' . $this->authUser->id);
+ }
+
+ $llc = clone($lock);
+ $exp = date('Y-m-d', strtotime('NOW - 1 WEEK'));
+ $llc->whereAdd("created < '$exp'");
+ if ($llc->count()) {
+ $llc->find();
+ while($llc->fetch()) {
+ $llcd = clone($llc);
+ $llcd->delete();
+ }
+ }
+
+ $lock->limit(1);
+ if ($lock->find(true)) {
+ // it's locked by someone else..
+ $p = $lock->person();
+
+
+ $this->jerr( "Record was locked by " . $p->name . " at " .$lock->created.
+ " - Please confirm you wish to save"
+ , array('needs_confirm' => true));
+
+
+ }
+ // check the users lock.. - no point.. ??? - if there are no other locks and it's not the users, then they can
+ // edit it anyways...
+
+ // can we find the user's lock.
+ $lock = DB_DataObjecT::factory('core_locking');
+ $lock->on_id = $x->{$this->key};
+ $lock->on_table= strtolower($x->tableName());
+ $lock->person_id = $this->authUser->id;
+ $lock->orderBy('created DESC');
+ $lock->limit(1);
+
+ if (
+ $lock->find(true) &&
+ isset($x->modified_dt) &&
+ strtotime($x->modified_dt) > strtotime($lock->created) &&
+ empty($req['_submit_confirmed']) &&
+ $x->modified_by != $this->authUser->id
+ )
+ {
+ $p = DB_DataObject::factory('core_person');
+ $p->get($x->modified_by);
+ $this->jerr($p->name . " saved the record since you started editing,\nDo you really want to update it?", array('needs_confirm' => true));
+
+ }
+ }
+
+ return $lock;
+
+ }
+
+ function insert($x, $req, $with_perm_check = true)
+ {
+ if (method_exists($x, 'setFromRoo')) {
+ $res = $x->setFromRoo($req, $this);
+ if (is_string($res)) {
+ $this->jerr($res);
+ }
+ } else {
+ $x->setFrom($req);
+ }
+
+ if ( $with_perm_check && !$this->checkPerm($x,'A', $req)) {
+ $this->jerr("PERMISSION DENIED (i)");
+ }
+ $cols = $x->table();
+
+ if (isset($cols['created'])) {
+ $x->created = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['created_dt'])) {
+ $x->created_dt = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['created_by'])) {
+ $x->created_by = $this->authUser->id;
+ }
+
+
+ if (isset($cols['modified'])) {
+ $x->modified = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['modified_dt'])) {
+ $x->modified_dt = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['modified_by'])) {
+ $x->modified_by = $this->authUser->id;
+ }
+
+ if (isset($cols['updated'])) {
+ $x->updated = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['updated_dt'])) {
+ $x->updated_dt = date('Y-m-d H:i:s');
+ }
+ if (isset($cols['updated_by'])) {
+ $x->updated_by = $this->authUser->id;
+ }
+
+ if (method_exists($x, 'beforeInsert')) {
+ $x->beforeInsert($_REQUEST, $this);
+ }
+
+ $res = $x->insert();
+ if ($res === false) {
+ $this->jerr($x->_lastError->toString());
+ }
+ if (method_exists($x, 'onInsert')) {
+ $x->onInsert($_REQUEST, $this);
+ }
+ $ev = $this->addEvent("ADD", $x);
+ if ($ev) {
+ $ev->audit($x);
+ }
+
+ // note setFrom might handle this before hand...!??!
+ if (!empty($_FILES) && method_exists($x, 'onUpload')) {
+ $x->onUpload($this, $_REQUEST);
+ }
+
+ return $this->selectSingle(
+ DB_DataObject::factory($x->tableName()),
+ $x->pid()
+ );
+
+ }