id = $id; } $this->load($this->id); } public function load($id = NULL) { $ret = false; if ($id) { $this->id = $id; $q = "SELECT * FROM " . DB_PREFIX . "documents WHERE id = {$this->id}"; $ret = query_row($q); } if ($ret) { $this->id = $ret->id; $this->creator = $ret->creator; $this->project_id = $ret->project_id; $this->title = $ret->title; $this->url = $ret->url; $this->notes = $ret->notes; $this->created = $ret->created; $this->updated = $ret->updated; $this->is_active = $ret->is_active; $this->end_date = $ret->end_date; } } public function getId() { return $this->id; } public function getTitle() { return $this->title; } public function getUrl() { return $this->url; } public function getNotes() { return nl2br($this->notes); } public function getCreator() { return $this->creator; } public function getCreatorObject() { return new User($this->creator); } public function getProjectId() { return $this->project_id; } public function getProjectObject() { return new Project($this->project_id); } public function getCreated() { // TODO possibly formatting is needed return $this->created; } public function getUpdated() { // TODO possibly formatting is needed return $this->updated; } public function isActive() { return $this->is_active; } public function getEndDate() { return $this->end_date; } // Adding version is handled internally private static function addVersion($creator, $document_id, $title, $url, $notes, $version_type) { $now = time(); $q = "INSERT INTO " . DB_PREFIX . "document_versions (creator, document_id, title, url, notes, version_type, created) VALUES ($creator, $document_id, '$title', '$url', '$notes', $version_type, FROM_UNIXTIME('$now'))"; $uid = query_insert($q); // Finishing the document if needed if ($uid && ($version_type == 2 || $version_type == 3)) { $q = "UPDATE " . DB_PREFIX . "documents SET is_active = 0, end_date = FROM_UNIXTIME('$now') WHERE id = $document_id"; query_update($q); } return $uid; } public function getVersions() { $q = "SELECT * FROM " . DB_PREFIX . "document_versions WHERE document_id = {$this->id} ORDER BY created ASC"; $versions = query_rows($q); if ($versions && is_array($versions) && sizeof($versions) > 0) { foreach ($versions as $key => $version) { $version->created = format_date_for_js($version->created); $version->notes = nl2br($version->notes); $versions[$key] = $version; } } return $versions; } public static function create($creator, $project_id, $title, $url, $notes) { // Need unescaped data for JSON $activity_data = array($title); $creator = (int)$creator; $project_id = (int)$project_id; $title = mysql_real_escape_string($title); $url = mysql_real_escape_string($url); $notes = mysql_real_escape_string($notes); $q = "INSERT INTO " . DB_PREFIX . "documents (creator, project_id, title, url, notes, created, updated) VALUES ($creator, $project_id, '$title', '$url', '$notes', NOW(), NOW())"; $uid = query_insert($q); if ($uid) { // Add to activity stream Activity::create($creator, $project_id, 'activity', 'add_document', '', $activity_data); // Add version Document::addVersion($creator, $uid, $title, $url, $notes, 1); return $uid; } return false; } public static function update($document, $title, $url, $notes, $version_type) { // Need unescaped data for JSON $activity_data = array($title); $title = mysql_real_escape_string($title); $url = mysql_real_escape_string($url); $notes = mysql_real_escape_string($notes); $q = "UPDATE " . DB_PREFIX . "documents SET title='$title', url='$url', notes='$notes' WHERE id = {$document->id}"; $updated = query_update($q); if ($updated) { // Add to activity stream Activity::create($document->getCreator(), $document->getProjectId(), 'activity', 'add_document_version', '', $activity_data); // Add version Document::addVersion($document->getCreator(), $document->id, $title, $url, $notes, $version_type); return $updated; } return false; } public function delete() { // TODO Check on how can delete is needed // XXX This needs to be protected $q = "DELETE FROM " . DB_PREFIX . "documents WHERE id = {$this->id}"; return query_delete($q); } public static function getVersionTypes($translated = true) { return array( '1' => $translated ? _('Live') : 'Live', '2' => $translated ? _('Ready') : 'Ready', '3' => $translated ? _('Dropped') : 'Dropped' ); } }