function grab(&$param_pool) { $result = NULL; $Forum = $this->_Parent->ExtensionManager->create('forum'); $members = $this->_Parent->ExtensionManager->create('members'); $members->initialiseCookie(); if (!$members->isLoggedIn() || !isset($param_pool['ds-forum-discussions']) || empty($param_pool['ds-forum-discussions'])) { $result = $this->emptyXMLSet(); } else { if (!$members->Member) { $members->initialiseMemberObject(); } $member_id = $members->Member->get('id'); $member_read_cutoff_date = Symphony::Database()->fetchVar('local', 0, sprintf("SELECT `local` FROM `tbl_entries_data_%d` WHERE `entry_id` = %d LIMIT 1", Discussion::getUnreadCutoffField(), $member_id)); if (is_null($member_read_cutoff_date)) { $member_read_cutoff_date = strtotime(Symphony::Database()->fetchVar('creation_date', 0, "SELECT `creation_date` FROM `tbl_entries` WHERE `id` = {$member_id} LIMIT 1")); } $discussion_last_active_field = Symphony::Configuration()->get('discussion-last-active-field', 'forum'); $pre_dated_discussions = Symphony::Database()->fetchCol('entry_id', sprintf("SELECT `entry_id` \n\t\t\t\t\t\tFROM `tbl_entries_data_%d` \n\t\t\t\t\t\tWHERE `entry_id` IN (" . @implode(',', $param_pool['ds-forum-discussions']) . ") \n\t\t\t\t\t\tAND `local` <= '%s'", $discussion_last_active_field, $member_read_cutoff_date)); $read_discussions = @implode(',', array_diff($param_pool['ds-forum-discussions'], $pre_dated_discussions)); if (empty($read_discussions)) { $read_discussions = 0; } $read = $this->_Parent->Database->fetch(sprintf("SELECT * FROM `tbl_forum_read_discussions` \n\t\t\t\t\t\tWHERE `member_id` = {$member_id} \n\t\t\t\t\t\tAND `discussion_id` IN (%s)", $read_discussions)); if (empty($read) && empty($pre_dated_discussions)) { $result = $this->emptyXMLSet(); } else { $result = new XMLElement($this->dsParamROOTELEMENT); foreach ($read as $r) { $result->appendChild(new XMLElement('discussion', NULL, array('id' => $r['discussion_id'], 'comments' => $r['comments'], 'last-viewed' => DateTimeObj::get('c', $r['last_viewed'])))); if (isset($pre_dated_discussions[$r['discussion_id']])) { unset($pre_dated_discussions[$r['discussion_id']]); } } foreach ($pre_dated_discussions as $id) { $result->appendChild(new XMLElement('discussion', NULL, array('id' => $id, 'comments' => '100000', 'last-viewed' => DateTimeObj::get('c', strtotime($member_registration_date))))); } } } return $result; }
public function markAllAsRead($member_id) { Symphony::Database()->query(sprintf('DELETE FROM `tbl_entries_data_%d` WHERE `entry_id` = %d', Discussion::getUnreadCutoffField(), (int) $member_id)); Symphony::Database()->query(sprintf("INSERT INTO `tbl_entries_data_%d` VALUES (NULL, %d, '%s', %d, %d)", Discussion::getUnreadCutoffField(), (int) $member_id, DateTimeObj::get('c'), strtotime(DateTimeObj::get('c')), strtotime(DateTimeObj::getGMT('Y-m-d H:i:s')))); }