/**
 * Marks a discussion or group as read.
 *
 * @param string $type						- 'group' or 'discussion'
 * @param int $userid						- The id of the user
 * @param int $itemid						- The id of the item to mark
 */
function exec_sg_mark_as_read($type, $itemid)
{
    global $vbulletin;
    if ($vbulletin->userinfo['userid']) {
        if ($vbulletin->options['threadmarking']) {
            $table = TABLE_PREFIX . ($type == 'group' ? 'groupread' : 'discussionread');
            $idcol = $type == 'group' ? 'groupid' : 'discussionid';
            $vbulletin->db->query_write("REPLACE INTO {$table} (userid,{$idcol},readtime)\n\t\t\t\t\t\t\t\t\t\tVALUES (" . intval($vbulletin->userinfo['userid']) . ", " . intval($itemid) . ", " . TIMENOW . ")");
            if ('discussion' == $type and 2 == $vbulletin->options['threadmarking']) {
                // quite expensive check to see if there are any unread discussions
                if ($discussion = fetch_socialdiscussioninfo($itemid)) {
                    require_once DIR . '/includes/class_groupmessage.php';
                    // Create discussion collection
                    $collection_factory =& new vB_Group_Collection_Factory($vbulletin);
                    $collection = $collection_factory->create('discussion', $discussion['groupid'], 0, 1, false, true);
                    $collection->filter_show_read(false);
                    if (!$collection->fetch_count()) {
                        exec_sg_mark_as_read('group', $discussion['groupid']);
                    }
                    unset($collection, $collection_factory);
                }
            }
        } else {
            // set read in cookie
            set_bbarray_cookie($type . '_marking', $itemid, TIMENOW);
        }
    } else {
        vbsetcookie('lastvisit', TIMENOW);
    }
}
 /**
  * Additional data to update after a save call (such as denormalized values in other tables).
  *
  * @param	boolean	Do the query?
  */
 function post_save_each($doquery = true)
 {
     // When creating a group, the creator needs to be come a user automatically
     if (empty($this->condition)) {
         $socialgroupmemberdm =& datamanager_init('SocialGroupMember', $this->registry, ERRTYPE_STANDARD);
         $socialgroupmemberdm->set('userid', $this->fetch_field('creatoruserid'));
         $socialgroupmemberdm->set('groupid', $this->fetch_field('groupid'));
         $socialgroupmemberdm->set('dateline', $this->fetch_field('dateline'));
         $socialgroupmemberdm->set('type', 'member');
         $socialgroupmemberdm->save();
         unset($socialgroupmemberdm);
         exec_sg_mark_as_read('group', $this->fetch_field('groupid'));
     }
     ($hook = vBulletinHook::fetch_hook('socgroupdata_postsave')) ? eval($hook) : false;
     if ($this->fetch_field('socialgroupcategoryid') != $this->existing['socialgroupcategoryid']) {
         fetch_socialgroup_category_cloud(true);
     }
     if ($this->fetch_field('name') != $this->existing['name'] or $this->fetch_field('description') != $this->existing['description']) {
         fetch_socialgroup_newest_groups(true, false, !$this->registry->options['sg_enablesocialgroupicons']);
     }
 }
示例#3
0
                     $discussion_dm->setr_info('group', $group);
                     // set the relevant counter to 1 based on new messages state
                     $discussion_dm->set($dataman->fetch_field('state'), 1);
                     $discussionid = $discussion_dm->save();
                     unset($discussion_dm);
                     if (!fetch_group_auto_moderation($group)) {
                         exec_sg_mark_as_read('discussion', $discussionid);
                     }
                     // IIS may have issues setting cookies with header redirects
                     $forceredirect = strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false;
                     ($hook = vBulletinHook::fetch_hook('group_message_post_complete')) ? eval($hook) : false;
                     $vbulletin->url = 'group.php?' . $vbulletin->session->vars['sessionurl'] . "&do=discuss&groupid={$group['groupid']}&discussionid={$discussion['discussionid']}&gmid={$gmid}#gmessage{$gmid}";
                     eval(print_standard_redirect('visitormessagethanks', true, $forceredirect));
                 } else {
                     // mark discussion as read
                     exec_sg_mark_as_read('discussion', $discussion['discussionid']);
                     // IIS may have issues setting cookies with header redirects
                     $forceredirect = strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false;
                     ($hook = vBulletinHook::fetch_hook('group_message_post_complete')) ? eval($hook) : false;
                     $vbulletin->url = 'group.php?' . $vbulletin->session->vars['sessionurl'] . "&do=discuss&groupid={$group['groupid']}&discussionid={$discussion['discussionid']}&gmid={$gmid}#gmessage{$gmid}";
                     // send notifications
                     if (!$messageinfo and !$edit_discussion and $discussion['subscribers']) {
                         exec_send_sg_notification($discussion['discussionid'], $gmid, $postusername = false);
                     }
                     eval(print_standard_redirect('visitormessagethanks', true, $forceredirect));
                 }
             }
         }
     }
     unset($dataman);
 }