/** * update object * @param array $p optional properties. If not specified then $this-data is used * @return boolean */ public function update($p = false) { if ($p !== false) { $this->data = $p; unset($this->linearData); if (array_key_exists('id', $p)) { $this->id = $p['id']; } $this->template = null; if (!empty($this->data['template_id']) && $this->loadTemplate) { $this->template = \CB\Templates\SingletonCollection::getInstance()->getTemplate($this->data['template_id']); } } if (!is_numeric($this->id)) { throw new \Exception("No object id specified for update", 1); } //load current object from db into a variable to be passed to log and events $this->oldObject = clone $this; $od = $this->oldObject->load($this->id); $wasDraft = !empty($od['draft']); \CB\fireEvent('beforeNodeDbUpdate', $this); $p =& $this->data; $tableFields = array('pid', 'user_id', 'system', 'template_id', 'tag_id', 'target_id', 'name', 'date', 'date_end', 'size', 'cfg', 'oid', 'did', 'dstatus'); $data = $this->collectModelData($p); $data = array_merge($data, array('draft' => 0, 'uid' => User::getId(), 'udate' => 'CURRENT_TIMESTAMP')); DM\Tree::update($data); DM\Tree::activateChildDrafts($this->id); $this->updateCustomData(); // set/update this object to cache Cache::set('Objects[' . $this->id . ']', $this); \CB\fireEvent('nodeDbUpdate', $this); if ($wasDraft) { $this->logAction('create', array('mentioned' => $this->lastMentionedUserIds)); } else { $this->logAction('update', array('old' => $this->oldObject, 'mentioned' => $this->lastMentionedUserIds)); } return true; }