Exemple #1
0
/**
* Fetches the IDs of the notices to display on a particular page.
*
* @return	array	Array of IDs to display
*/
function fetch_relevant_notice_ids()
{
	global $vbulletin, $vbphrase, $foruminfo, $threadinfo, $postinfo;


	$forum_pages = array('poll', 'editpost', 'threadrate', 'postings', 'showthread', 'newthread', 'forumdisplay', 'newreply', 'threadtag', 'inlinemod', 'announcement', 'showpost');

	$ignore_np_notices = isset($_COOKIE[COOKIE_PREFIX . 'np_notices_displayed']) ? explode(',', $_COOKIE[COOKIE_PREFIX . 'np_notices_displayed']) : array();
	$display_notices = array();
	$vbulletin->np_notices_displayed = array();

	($hook = vBulletinHook::fetch_hook('notices_check_start')) ? eval($hook) : false;

	foreach ($vbulletin->noticecache AS $noticeid => $notice)
	{
		foreach ($notice AS $criteriaid => $conditions)
		{
			switch ($criteriaid)
			{
				case 'persistent':
				{
					if ($conditions == 0 AND in_array($noticeid, $ignore_np_notices)) // session cookie set in print_output()
					{
						continue 3;
					}
					break;
				}
				case 'dismissible':
				{
					if (in_array($noticeid, fetch_dismissed_notices()))
					{
						continue 3;
					}
					break;
				}
				/*case 'notice_x_not_displayed': // this is now handled differently - see $remove_display_notices below
				{
					if (in_array(intval($conditions[0]), $display_notices))
					{
						continue 3;
					}
					break;
				}*/
				case 'in_usergroup_x':
				{
					if (!is_member_of($vbulletin->userinfo, intval($conditions[0])))
					{
						continue 3;
					}
					break;
				}
				case 'not_in_usergroup_x':
				{
					if (is_member_of($vbulletin->userinfo, intval($conditions[0])))
					{
						continue 3;
					}
					break;
				}
				case 'browsing_forum_x':
				{
					if ($foruminfo['forumid'] != intval($conditions[0]) OR !in_array(THIS_SCRIPT, $forum_pages))
					{
						continue 3;
					}
					break;
				}
				case 'browsing_forum_x_and_children':
				{
					if (!in_array(THIS_SCRIPT, $forum_pages) OR !in_array(intval($conditions[0]), explode(',', $foruminfo['parentlist'])))
					{
						continue 3;
					}
					break;
				}
				case 'no_visit_in_x_days':
				{
					if ($vbulletin->userinfo['lastvisit'] > TIMENOW - $conditions[0] * 86400)
					{
						continue 3;
					}
					break;
				}
				case 'has_never_posted':
				{
					if ($vbulletin->userinfo['lastpost'] > 0)
					{
						continue 3;
					}
					break;
				}
				case 'no_posts_in_x_days':
				{
					if ($vbulletin->userinfo['lastpost'] == 0 OR $vbulletin->userinfo['lastpost'] > TIMENOW - $conditions[0] * 86400)
					{
						continue 3;
					}
					break;
				}
				case 'has_x_postcount':
				{
					if (!check_notice_criteria_between($vbulletin->userinfo['posts'], $conditions[0], $conditions[1]))
					{
						continue 3;
					}
					break;
				}
				case 'has_x_reputation':
				{
					if (!check_notice_criteria_between($vbulletin->userinfo['reputation'], $conditions[0], $conditions[1]))
					{
						continue 3;
					}
					break;
				}
				case 'has_x_infraction_points':
				{
					if (!check_notice_criteria_between($vbulletin->userinfo['ipoints'], $conditions[0], $conditions[1]))
					{
						continue 3;
					}
					break;
				}
				case 'pm_storage_x_percent_full':
				{
					if ($vbulletin->userinfo['permissions']['pmquota'])
					{
						$pmboxpercentage = $vbulletin->userinfo['pmtotal'] / $vbulletin->userinfo['permissions']['pmquota'] * 100;
						if (!check_notice_criteria_between($pmboxpercentage, $conditions[0], $conditions[1]))
						{
							continue 3;
						}
					}
					else
					{
						continue 3;
					}
					break;
				}
				case 'username_is':
				{
					if (strtolower($vbulletin->userinfo['username']) != strtolower(trim($conditions[0])))
					{
						continue 3;
					}
					break;
				}
				case 'is_birthday':
				{
					if (substr($vbulletin->userinfo['birthday'], 0, 5) != vbdate('m-d', TIMENOW, false, false))
					{
						continue 3;
					}
					break;
				}
				case 'came_from_search_engine':
					if (!is_came_from_search_engine())
					{
						continue 3;
					}
					break;
				case 'style_is_x':
				{
					if (STYLEID != intval($conditions[0]))
					{
						continue 3;
					}
					break;
				}
				case 'in_coventry':
				{
					if (!in_array($vbulletin->userinfo['userid'], preg_split('#\s+#', $vbulletin->options['globalignore'], -1, PREG_SPLIT_NO_EMPTY)))
					{
						continue 3;
					}
					break;
				}
				case 'is_date':
				{
					if (empty($conditions[1]) AND vbdate('d-m-Y', TIMENOW, false, false) != $conditions[0]) // user timezone
					{
						continue 3;
					}
					else if ($conditions[1] AND gmdate('d-m-Y', TIMENOW) != $conditions[0]) // utc
					{
						continue 3;
					}
					break;
				}
				case 'is_time':
				{
					if (preg_match('#^(\d{1,2}):(\d{2})$#', $conditions[0], $start_time) AND preg_match('#^(\d{1,2}):(\d{2})$#', $conditions[1], $end_time))
					{
						if (empty($conditions[2])) // user timezone
						{
							$start = mktime($start_time[1], $start_time[2]) + $vbulletin->options['hourdiff'];
							$end   = mktime($end_time[1], $end_time[2]) + $vbulletin->options['hourdiff'];
							$now   = mktime() + $vbulletin->options['hourdiff'];
						}
						else // utc
						{
							$start = gmmktime($start_time[1], $start_time[2]);
							$end   = gmmktime($end_time[1], $end_time[2]);
							$now   = gmmktime();
						}

						if ($now < $start OR $now > $end)
						{
							continue 3;
						}
					}
					else
					{
						continue 3;
					}
					break;
				}
				default:
				{
					$abort = false;

					($hook = vBulletinHook::fetch_hook('notices_check_criteria')) ? eval($hook) : false;

					if ($abort)
					{
						continue 3;
					}
				}
			}
		}

		$display_notices["$noticeid"] = $noticeid;

		if ($notice['persistent'] == 0)
		{
			$vbulletin->np_notices_displayed["$noticeid"] = $noticeid;
		}
	}

	// now go through removing notices using the 'notice_x_not_displayed' criteria
	$remove_display_notices = array();
	foreach ($vbulletin->noticecache AS $noticeid => $notice)
	{
		if (isset($notice['notice_x_not_displayed']) AND isset($display_notices[intval($notice['notice_x_not_displayed'][0])]))
		{
			$remove_display_notices["$noticeid"] = $noticeid;
		}
	}
	foreach ($remove_display_notices AS $noticeid)
	{
		unset($display_notices["$noticeid"], $vbulletin->np_notices_displayed["$noticeid"]);
	}

	return $display_notices;
}
Exemple #2
0
/**
* Fetches the IDs of the notices to display on a particular page.
*
* @return	array	Array of IDs to display
*/
function fetch_relevant_notice_ids()
{
    global $vbulletin, $vbphrase, $stylevar, $foruminfo, $threadinfo, $postinfo;
    $forum_pages = array('poll', 'editpost', 'threadrate', 'postings', 'showthread', 'newthread', 'forumdisplay', 'newreply', 'threadtag', 'inlinemod', 'announcement', 'showpost');
    $ignore_np_notices = explode(',', $_COOKIE[COOKIE_PREFIX . 'np_notices_displayed']);
    $display_notices = array();
    $vbulletin->np_notices_displayed = array();
    ($hook = vBulletinHook::fetch_hook('notices_check_start')) ? eval($hook) : false;
    foreach ($vbulletin->noticecache as $noticeid => $notice) {
        foreach ($notice as $criteriaid => $conditions) {
            switch ($criteriaid) {
                case 'persistent':
                    if ($conditions == 0 and in_array($noticeid, $ignore_np_notices)) {
                        continue 3;
                    }
                    break;
                    /*case 'notice_x_not_displayed': // this is now handled differently - see $remove_display_notices below
                    		{
                    			if (in_array(intval($conditions[0]), $display_notices))
                    			{
                    				continue 3;
                    			}
                    			break;
                    		}*/
                /*case 'notice_x_not_displayed': // this is now handled differently - see $remove_display_notices below
                		{
                			if (in_array(intval($conditions[0]), $display_notices))
                			{
                				continue 3;
                			}
                			break;
                		}*/
                case 'in_usergroup_x':
                    if (!is_member_of($vbulletin->userinfo, intval($conditions[0]))) {
                        continue 3;
                    }
                    break;
                case 'not_in_usergroup_x':
                    if (is_member_of($vbulletin->userinfo, intval($conditions[0]))) {
                        continue 3;
                    }
                    break;
                case 'browsing_forum_x':
                    if ($foruminfo['forumid'] != intval($conditions[0]) or !in_array(THIS_SCRIPT, $forum_pages)) {
                        continue 3;
                    }
                    break;
                case 'browsing_forum_x_and_children':
                    if (!in_array(intval($conditions[0]), explode(',', $foruminfo['parentlist'])) or !in_array(THIS_SCRIPT, $forum_pages)) {
                        continue 3;
                    }
                    break;
                case 'no_visit_in_x_days':
                    if ($vbulletin->userinfo['lastvisit'] > TIMENOW - $conditions[0] * 86400) {
                        continue 3;
                    }
                    break;
                case 'has_never_posted':
                    if ($vbulletin->userinfo['lastpost'] > 0) {
                        continue 3;
                    }
                    break;
                case 'no_posts_in_x_days':
                    if ($vbulletin->userinfo['lastpost'] == 0 or $vbulletin->userinfo['lastpost'] > TIMENOW - $conditions[0] * 86400) {
                        continue 3;
                    }
                    break;
                case 'has_x_postcount':
                    if (!check_notice_criteria_between($vbulletin->userinfo['posts'], $conditions[0], $conditions[1])) {
                        continue 3;
                    }
                    break;
                case 'has_x_reputation':
                    if (!check_notice_criteria_between($vbulletin->userinfo['reputation'], $conditions[0], $conditions[1])) {
                        continue 3;
                    }
                    break;
                case 'has_x_infraction_points':
                    if (!check_notice_criteria_between($vbulletin->userinfo['ipoints'], $conditions[0], $conditions[1])) {
                        continue 3;
                    }
                    break;
                case 'pm_storage_x_percent_full':
                    if ($vbulletin->userinfo['permissions']['pmquota']) {
                        $pmboxpercentage = $vbulletin->userinfo['pmtotal'] / $vbulletin->userinfo['permissions']['pmquota'] * 100;
                        if (!check_notice_criteria_between($pmboxpercentage, $conditions[0], $conditions[1])) {
                            continue 3;
                        }
                    } else {
                        continue 3;
                    }
                    break;
                case 'username_is':
                    if (strtolower($vbulletin->userinfo['username']) != strtolower(trim($conditions[0]))) {
                        continue 3;
                    }
                    break;
                case 'is_birthday':
                    if (substr($vbulletin->userinfo['birthday'], 0, 5) != vbdate('m-d', TIMENOW, false, false)) {
                        continue 3;
                    }
                    break;
                case 'style_is_x':
                    if (STYLEID != intval($conditions[0])) {
                        continue 3;
                    }
                    break;
                case 'in_coventry':
                    if (!in_array($vbulletin->userinfo['userid'], preg_split('#\\s+#', $vbulletin->options['globalignore'], -1, PREG_SPLIT_NO_EMPTY))) {
                        continue 3;
                    }
                    break;
                case 'is_date':
                    if (vbdate('d-m-Y', TIMENOW, false, false) != $conditions[0]) {
                        continue 3;
                    }
                    break;
                default:
                    $abort = false;
                    ($hook = vBulletinHook::fetch_hook('notices_check_criteria')) ? eval($hook) : false;
                    if ($abort) {
                        continue 3;
                    }
            }
        }
        $display_notices["{$noticeid}"] = $noticeid;
        if ($notice['persistent'] == 0) {
            $vbulletin->np_notices_displayed["{$noticeid}"] = $noticeid;
        }
    }
    // now go through removing notices using the 'notice_x_not_displayed' criteria
    $remove_display_notices = array();
    foreach ($vbulletin->noticecache as $noticeid => $notice) {
        if (isset($notice['notice_x_not_displayed']) and isset($display_notices[intval($notice['notice_x_not_displayed'][0])])) {
            $remove_display_notices["{$noticeid}"] = $noticeid;
        }
    }
    foreach ($remove_display_notices as $noticeid) {
        unset($display_notices["{$noticeid}"], $vbulletin->np_notices_displayed["{$noticeid}"]);
    }
    return $display_notices;
}