/** * Marks a issue as read using the appropriate method. * * @param array Array of data for the issue being marked * @param integer Unix timestamp that the issue is being marked read */ function mark_issue_read($issueinfo, $time) { global $vbulletin, $db; $userid = $vbulletin->userinfo['userid']; $time = intval($time); if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $db->query_write("\r\n\t\t\tREPLACE INTO " . TABLE_PREFIX . "pt_issueread\r\n\t\t\t\t(issueid, userid, readtime)\r\n\t\t\tVALUES\r\n\t\t\t\t({$issueinfo['issueid']}, " . $vbulletin->userinfo['userid'] . ", {$time})\r\n\t\t"); // in case of automatic project marking if ($vbulletin->options['threadmarking'] == 2) { $perms_sql = build_issue_permissions_sql($vbulletin->userinfo); if (!empty($perms_sql["{$issueinfo['projectid']}"]["{$issueinfo['issuetypeid']}"])) { // TODO: be aware of private replies $unread = $db->query_first("\r\n\t\t\t\t\tSELECT COUNT(*) AS count\r\n\t\t\t\t\tFROM " . TABLE_PREFIX . "pt_issue AS issue\r\n\t\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "pt_issueread AS issueread ON (issueread.issueid = issue.issueid AND issueread.userid = " . $vbulletin->userinfo['userid'] . ")\r\n\t\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "pt_projectread AS projectread ON (projectread.projectid = issue.projectid AND projectread.userid = " . $vbulletin->userinfo['userid'] . " AND projectread.issuetypeid = issue.issuetypeid)\r\n\t\t\t\t\tWHERE issue.projectid = {$issueinfo['projectid']}\r\n\t\t\t\t\t\tAND " . $perms_sql["{$issueinfo['projectid']}"]["{$issueinfo['issuetypeid']}"] . "\r\n\t\t\t\t\t\tAND issue.lastpost > " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . "\r\n\t\t\t\t\t\tAND issue.lastpost > IF(issueread.readtime IS NOT NULL, issueread.readtime, " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . ")\r\n\t\t\t\t\t\tAND issue.lastpost > IF(projectread.readtime IS NOT NULL, projectread.readtime, " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . ")\r\n\t\t\t\t"); if ($unread['count'] == 0) { mark_project_read($issueinfo['projectid'], $issueinfo['issuetypeid'], TIMENOW); } } } } else { set_bbarray_cookie('issue_lastview', $issueinfo['issueid'], $time); } }
$issuelastposttime = current($issueoldcount); $marking = ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']); if ($marking) { $projectview = max($projectread["{$issuetypeid}"], TIMENOW - $vbulletin->options['markinglimit'] * 86400); } else { $projectview = intval(fetch_bbarray_cookie('project_lastview', $project['projectid'] . $issuetypeid)); if (!$projectview) { $projectview = $vbulletin->userinfo['lastvisit']; } } $perms_sql = build_issue_permissions_sql($vbulletin->userinfo); if ($issuelastposttime >= $projectview and $perms_sql["{$project['projectid']}"]["{$issuetypeid}"]) { // TODO: may need to change this to take into account private replies $unread = $db->query_first("\r\n\t\t\t\tSELECT COUNT(*) AS count\r\n\t\t\t\tFROM " . TABLE_PREFIX . "pt_issue AS issue\r\n\t\t\t\t" . ($marking ? "\r\n\t\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "pt_issueread AS issueread ON (issueread.issueid = issue.issueid AND issueread.userid = " . $vbulletin->userinfo['userid'] . ")\r\n\t\t\t\t" : '') . "\r\n\t\t\t\tWHERE issue.projectid = {$project['projectid']}\r\n\t\t\t\t\tAND " . $perms_sql["{$project['projectid']}"]["{$issuetypeid}"] . "\r\n\t\t\t\t\tAND issue.lastpost > " . intval($projectview) . "\r\n\t\t\t\t\t" . ($marking ? "\r\n\t\t\t\t\t\tAND issue.lastpost > IF(issueread.readtime IS NOT NULL, issueread.readtime, " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . ")\r\n\t\t\t\t\t" : '') . "\r\n\t\t\t"); if ($unread['count'] == 0) { mark_project_read($project['projectid'], $issuetypeid, TIMENOW); } } } // issue type selection options $issuetype_options = build_issuetype_select($projectperms, array_keys($vbulletin->pt_projects["{$project['projectid']}"]['types']), $vbulletin->GPC['issuetypeid']); $any_issuetype_selected = !$vbulletin->GPC['issuetypeid'] ? ' selected="selected"' : ''; // version options $version_cache = array(); foreach ($vbulletin->pt_versions as $version) { if ($version['projectid'] != $project['projectid']) { continue; } $version_cache["{$version['projectversiongroupid']}"][] = $version; } $appliesversion_options = '';