コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: class.discussion.php プロジェクト: bauhouse/forum
 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'))));
 }