/** * Shows the new subscribed PT issues in the user CP * * @return string Printable issue bits */ function process_new_subscribed_issues() { global $vbulletin, $show, $stylevar, $vbphrase, $template_hook, $vbcollapse; if (!($vbulletin->userinfo['permissions']['ptpermissions'] & $vbulletin->bf_ugp_ptpermissions['canviewprojecttools'])) { return ''; } $perms_query = build_issue_permissions_query($vbulletin->userinfo); if (!$perms_query) { return ''; } $marking = ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']); if ($marking) { $issueview_sql = "IF(issueread IS NOT NULL, issueread, " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . ")"; $issueview_sql2 = "IF(projectread IS NOT NULL, projectread, " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . ")"; } else { $issueview = max(intval(fetch_bbarray_cookie('issue_lastview', $issue['issueid'])), intval(fetch_bbarray_cookie('issue_lastview', $issue['projectid'] . $issue['issuetypeid']))); if (!$issueview) { $issueview = $vbulletin->userinfo['lastvisit']; } $issueview_sql = intval($issueview); $issueview_sql2 = ''; } build_issue_private_lastpost_sql_all($vbulletin->userinfo, $private_lastpost_join, $private_lastpost_fields); $replycount_clause = fetch_private_replycount_clause($vbulletin->userinfo); $subscriptions = $vbulletin->db->query_read("\r\n\t\tSELECT issue.*, issuesubscribe.subscribetype,\r\n\t\t\tproject.title_clean\r\n\t\t\t" . ($marking ? ", issueread.readtime AS issueread, projectread.readtime AS projectread" : '') . "\r\n\t\t\t" . ($private_lastpost_fields ? ", {$private_lastpost_fields}" : '') . "\r\n\t\t\t" . ($replycount_clause ? ", {$replycount_clause} AS replycount" : '') . "\r\n\t\tFROM " . TABLE_PREFIX . "pt_issuesubscribe AS issuesubscribe\r\n\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issue.issueid = issuesubscribe.issueid)\r\n\t\tINNER JOIN " . TABLE_PREFIX . "pt_project AS project ON (project.projectid = issue.projectid)\r\n\t\t" . ($marking ? "\r\n\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\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" : '') . "\r\n\t\t{$private_lastpost_join}\r\n\t\tWHERE issuesubscribe.userid = " . $vbulletin->userinfo['userid'] . "\r\n\t\t\tAND (" . implode(' OR ', $perms_query) . ")\r\n\t\tHAVING lastpost > " . intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400) . "\r\n\t\t\tAND lastpost > " . $issueview_sql . "\r\n\t\t\t" . (!empty($issueview_sql2) ? " AND lastpost > " . $issueview_sql2 : '') . "\r\n\t\tORDER BY lastpost DESC\r\n\t"); $show['issuebit_project_title'] = true; $subscriptionbits = ''; while ($issue = $vbulletin->db->fetch_array($subscriptions)) { $issue = prepare_issue($issue); eval('$subscriptionbits .= "' . fetch_template('pt_issuebit') . '";'); } if (!$subscriptionbits) { return ''; } eval('$return = "' . fetch_template('pt_usercp_subscriptions') . '";'); return $return; }
/** * Adds conditions to get new/unread issues only. * * @param string * @param boolean True if you want to include this * * @return boolean True on success */ function add_newonly($name, $value) { if (!$value) { return PT_SEARCHGEN_CRITERIA_UNNECESSARY; } $vbulletin =& $this->registry; $marking_limit = intval(TIMENOW - $vbulletin->options['markinglimit'] * 86400); build_issue_private_lastpost_sql_all($this->registry->userinfo, $private_lastpost_join, $devnull); if ($private_lastpost_join) { $this->joins['private_lastpost'] = $private_lastpost_join; } $lastpost_col = $private_lastpost_join ? 'IF(issueprivatelastpost.lastpost IS NOT NULL, issueprivatelastpost.lastpost, issue.lastpost)' : 'issue.lastpost'; if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $this->joins['left_issueread'] = trim("\r\n\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"); $this->joins['left_projectread'] = trim("\r\n\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"); $this->where['newonly'] = trim("\r\n\t\t\t\t({$lastpost_col} > IF(issueread.readtime AND issueread.readtime > {$marking_limit}, issueread.readtime, {$marking_limit})\r\n\t\t\t\tAND {$lastpost_col} > IF(projectread.readtime AND projectread.readtime > {$marking_limit}, projectread.readtime, {$marking_limit})\r\n\t\t\t\tAND {$lastpost_col} > {$marking_limit})\r\n\t\t\t"); } else { $this->where['issueread'] = trim("\r\n\t\t\t\t{$lastpost_col} > " . intval($vbulletin->userinfo['lastvisit']) . "\r\n\t\t\t"); } return PT_SEARCHGEN_CRITERIA_ADDED; }
$request_groupid = urlencode($vbulletin->GPC['groupid']); if (!$vbulletin->GPC['pagenumber']) { $vbulletin->GPC['pagenumber'] = 1; } if (!$vbulletin->GPC['start']) { $vbulletin->GPC['start'] = ($vbulletin->GPC['pagenumber'] - 1) * $perpage; } // setup the sort arrow $opposite_sort = $search['sortorder'] == 'asc' ? 'desc' : 'asc'; $sort_arrow = array('title' => '', 'priority' => '', 'replies' => '', 'lastpost' => ''); eval('$sort_arrow["$search[sortby]"] = "' . fetch_template('pt_searchresultgroupbit_arrow') . '";'); if (!$perpage) { $perpage = 999999; } $marking = ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']); build_issue_private_lastpost_sql_all($vbulletin->userinfo, $private_lastpost_join, $private_lastpost_fields); $replycount_clause = fetch_private_replycount_clause($vbulletin->userinfo); $show['first_group'] = true; $resultgroupbits = ''; foreach ($groups as $groupid => $group) { $group_only = ($vbulletin->GPC['groupid'] and $vbulletin->GPC['groupid'] == $groupid); $hook_query_fields = $hook_query_joins = $hook_query_where = ''; ($hook = vBulletinHook::fetch_hook('projectsearch_results_query')) ? eval($hook) : false; $results = $db->query_read("\r\n\t\t\tSELECT issue.*, issuesearchresult.offset\r\n\t\t\t\t" . ($vbulletin->userinfo['userid'] ? ", issuesubscribe.subscribetype, IF(issueassign.issueid IS NULL, 0, 1) AS isassigned" : '') . "\r\n\t\t\t\t" . ($marking ? ", issueread.readtime AS issueread, projectread.readtime AS projectread" : '') . "\r\n\t\t\t\t" . ($private_lastpost_fields ? ", {$private_lastpost_fields}" : '') . "\r\n\t\t\t\t" . ($replycount_clause ? ", {$replycount_clause} AS replycount" : '') . "\r\n\t\t\t\t{$hook_query_fields}\r\n\t\t\tFROM " . TABLE_PREFIX . "pt_issuesearchresult AS issuesearchresult\r\n\t\t\tINNER JOIN " . TABLE_PREFIX . "pt_issue AS issue ON (issuesearchresult.issueid = issue.issueid)\r\n\t\t\t" . ($vbulletin->userinfo['userid'] ? "\r\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "pt_issuesubscribe AS issuesubscribe ON\r\n\t\t\t\t\t(issuesubscribe.issueid = issue.issueid AND issuesubscribe.userid = " . $vbulletin->userinfo['userid'] . ")\r\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "pt_issueassign AS issueassign ON\r\n\t\t\t\t\t(issueassign.issueid = issue.issueid AND issueassign.userid = " . $vbulletin->userinfo['userid'] . ")\r\n\t\t\t" : '') . "\r\n\t\t\t" . ($marking ? "\r\n\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\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" : '') . "\r\n\t\t\t{$private_lastpost_join}\r\n\t\t\t{$hook_query_joins}\r\n\t\t\tWHERE issuesearchresult.issuesearchid = {$search['issuesearchid']}\r\n\t\t\t\t" . (!$group_only ? " AND issuesearchresult.offset >= " . $vbulletin->GPC['start'] : '') . "\r\n\t\t\t\t" . ($groupid != -1 ? " AND issuesearchresult.groupid = '" . $db->escape_string($groupid) . "'" : '') . "\r\n\t\t\t\tAND ((" . implode(') OR (', $search_perms) . "))\r\n\t\t\t\t{$hook_query_where}\r\n\t\t\tORDER BY issuesearchresult.offset\r\n\t\t\t" . ($group_only ? "LIMIT " . $vbulletin->GPC['start'] . ", {$perpage}" : "LIMIT {$perpage}") . "\r\n\t\t"); $resultbits = ''; while ($issue = $db->fetch_array($results)) { $resultbits .= build_pt_search_resultbit($issue); } if (!$resultbits) { continue; }