/** * Marks a forum, its child forums and all contained posts as read * * @param integer Forum ID to be marked as read - leave blank to mark all forums as read * * @return array Array of affected forum IDs */ function mark_forums_read($forumid = false) { global $vbulletin; $db =& $vbulletin->db; $return_url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']; $return_phrase = 'markread'; $return_forumids = array(); if (!$forumid) { if ($vbulletin->userinfo['userid']) { // init user data manager $userdata =& datamanager_init('User', $vbulletin, ERRTYPE_STANDARD); $userdata->set_existing($vbulletin->userinfo); $userdata->set('lastactivity', TIMENOW); $userdata->set('lastvisit', TIMENOW - 1); $userdata->save(); if ($vbulletin->options['threadmarking']) { $query = ''; foreach ($vbulletin->forumcache as $fid => $finfo) { // mark the forum and all child forums read $query .= ", ({$fid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; } if ($query) { $query = substr($query, 2); $db->query_write("\n\t\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumread\n\t\t\t\t\t\t\t(forumid, userid, readtime)\n\t\t\t\t\t\tVALUES\n\t\t\t\t\t\t\t{$query}\n\t\t\t\t\t"); } } } else { vbsetcookie('lastvisit', TIMENOW); } $return_forumids = array_keys($vbulletin->forumcache); } else { // temp work around code, I need to find another way to mass set some values to the cookie $vbulletin->input->clean_gpc('c', COOKIE_PREFIX . 'forum_view', TYPE_STR); global $bb_cache_forum_view; $bb_cache_forum_view = @unserialize(convert_bbarray_cookie($vbulletin->GPC[COOKIE_PREFIX . 'forum_view'])); require_once DIR . '/includes/functions_misc.php'; $childforums = fetch_child_forums($forumid, 'ARRAY'); $return_forumids = $childforums; $return_forumids[] = $forumid; if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $query = "({$forumid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; foreach ($childforums as $child_forumid) { // mark the forum and all child forums read $query .= ", ({$child_forumid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; } $db->query_write("\n\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumread\n\t\t\t\t\t(forumid, userid, readtime)\n\t\t\t\tVALUES\n\t\t\t\t\t{$query}\n\t\t\t"); require_once DIR . '/includes/functions_bigthree.php'; $foruminfo = fetch_foruminfo($forumid); $parent_marks = mark_forum_read($foruminfo, $vbulletin->userinfo['userid'], TIMENOW); if (is_array($parent_marks)) { $return_forumids = array_unique(array_merge($return_forumids, $parent_marks)); } } else { foreach ($childforums as $child_forumid) { // mark the forum and all child forums read $bb_cache_forum_view["{$child_forumid}"] = TIMENOW; } set_bbarray_cookie('forum_view', $forumid, TIMENOW); } if ($vbulletin->forumcache["{$forumid}"]['parentid'] == -1) { $return_url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']; } else { $return_url = 'forumdisplay.php?' . $vbulletin->session->vars['sessionurl'] . 'f=' . $vbulletin->forumcache["{$forumid}"]['parentid']; } $return_phrase = 'markread_single'; } return array('url' => $return_url, 'phrase' => $return_phrase, 'forumids' => $return_forumids); }
/** * Sets the value for data stored in an array-cookie * * @param string Name of the cookie * @param mixed ID of the data within the cookie * @param mixed Value for the data * @param boolean If true, make this a permanent cookie */ function set_bbarray_cookie($cookiename, $id, $value, $permanent = false) { // sets the value for a array and sets the cookie global $vbulletin; $cookie_name = COOKIE_PREFIX . $cookiename; // name of cookie variable $cache_name = 'bb_cache_' . $cookiename; // name of cache variable global $$cache_name; // internal array for cacheing purposes $cookie =& $vbulletin->input->clean_gpc('c', $cookie_name, TYPE_STR); $cache =& $$cache_name; if ($cookie != '' AND !isset($cache)) { $cache = @unserialize(convert_bbarray_cookie($cookie)); } $cache["$id"] = $value; vbsetcookie($cookiename, convert_bbarray_cookie(serialize($cache), 'set'), $permanent); }