View file upload/includes/functions_ad.php

File size: 8.8Kb
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.5
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/

function build_ad_template($location)
{
	global $ad_cache, $vbulletin;
	$template = "";
	foreach($ad_cache AS $adid => $ad)
	{
		// active ads on the same location only
		if ($ad['active'] AND $ad['adlocation'] == $location)
		{
			$criterion = $vbulletin->db->query_read("
				SELECT * FROM " . TABLE_PREFIX . "adcriteria
				WHERE adid = " . $adid . "
			");

			// create the template conditionals
			$conditional_prefix = "";
			$conditional_postfix = "";

			while($criteria = $vbulletin->db->fetch_array($criterion))
			{
				switch($criteria['criteriaid'])
				{
					case "in_usergroup_x":
						$conditional_prefix .= '<vb:if condition="is_member_of($' . 'bbuserinfo, ' . $criteria['condition1'] . ')">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "not_in_usergroup_x":
						$conditional_prefix .= '<vb:if condition="!is_member_of($' . 'bbuserinfo, ' . $criteria['condition1'] . ')">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "browsing_content_page":
						$conditional_prefix .= '<vb:if condition="CONTENT_PAGE == ' . $criteria['condition1'] . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "browsing_forum_x":
						$conditional_prefix .= '<vb:if condition="$' . 'vbulletin->GPC[\'forumid\'] == ' . $criteria['condition1'] . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "browsing_forum_x_and_children":
						// find out who the children are:
						$forum = $vbulletin->db->query_first("SELECT childlist FROM " . TABLE_PREFIX . "forum WHERE forumid = " . intval($criteria['condition1']));
						$conditional_prefix .= '<vb:if condition="in_array($' . 'vbulletin->GPC[\'forumid\'], array(' . $forum['childlist'] . '))">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "style_is_x":
						$conditional_prefix .= '<vb:if condition="STYLEID == ' . intval($criteria['condition1']) . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "no_visit_in_x_days":
						$conditional_prefix .= '<vb:if condition="$' . 'bbuserinfo[\'lastactivity\'] < TIMENOW - (86400*' . intval($criteria['condition1']) . ')">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "no_posts_in_x_days":
						$conditional_prefix .= '<vb:if condition="$' . 'bbuserinfo[\'lastpost\'] < TIMENOW - (86400*' . intval($criteria['condition1']) . ')">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "has_x_postcount":
						$conditional_prefix .= '<vb:if condition="$' . 'bbuserinfo[\'posts\'] > ' . intval($criteria['condition1']) . ' AND $' . 'bbuserinfo[\'posts\'] < ' . intval($criteria['condition2']) . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "has_never_posted":
						$conditional_prefix .= '<vb:if condition="$' . 'bbuserinfo[\'lastpost\'] == 0">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "has_x_reputation":
						$conditional_prefix .= '<vb:if condition="$' . 'bbuserinfo[\'reputation\'] > ' . intval($criteria['condition1']) . ' AND $' . 'bbuserinfo[\'reputation\'] < ' . intval($criteria['condition2']) . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "pm_storage_x_percent_full":
						$conditional_prefix .= '<vb:if condition="$' . 'pmboxpercentage = $' . 'bbuserinfo[\'pmtotal\'] / $' . 'bbuserinfo[\'permissions\'][\'pmquota\'] * 100"></vb:if>';
						$conditional_prefix .= '<vb:if condition="$' . 'pmboxpercentage > ' . intval($criteria['condition1']) . ' AND $' . 'pmboxpercentage < ' . intval($criteria['condition2']) . '">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "came_from_search_engine":
						$conditional_prefix .= '<vb:if condition="is_came_from_search_engine()">';
						$conditional_postfix .= "</vb:if>";
						break;
					case "is_date":
						if ($criteria['condition2'])
						{
							$conditional_prefix .= '<vb:if condition="gmdate(\'d-m-Y\', TIMENOW) == \'' . str_replace("'", "\'", $criteria['condition1']) .'\'">';
							$conditional_postfix .= "</vb:if>";
						}
						else
						{
							$conditional_prefix .= '<vb:if condition="vbdate(\'d-m-Y\', TIMENOW, false, false) == \'' . str_replace("'", "\'", $criteria['condition1']) .'\'">';
							$conditional_postfix .= "</vb:if>";
						}
						break;
					case "is_time":
						if (preg_match('#^(\d{1,2}):(\d{2})$#', $criteria[1], $start_time) AND preg_match('#^(\d{1,2}):(\d{2})$#', $criteria[2], $end_time))
						{
							if ($criteria['condition3'])
							{
								$start = gmmktime($start_time[1], $start_time[2]);
								$end   = gmmktime($end_time[1], $end_time[2]);
								// $now   = gmmktime();
								$conditional_prefix .= '<vb:if condition="$' . 'now = gmmktime()"></vb:if>';
							}
							else
							{
								$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'];
								$conditional_prefix .= '<vb:if condition="$' . 'now = mktime() + ' . $vbulletin->options['hourdiff'] . '"></vb:if>';
							}
							$conditional_prefix .= '<vb:if condition="$' . 'now > ' . $start . ' OR $' . 'now < ' . $end . '">';
							$conditional_postfix .= '</vb:if>';
						}
						break;
					case "ad_x_not_displayed":
						// no ad shown? make note of it, and create the array for us
						$conditional_prefix .= '<vb:if condition="$noadshown = !isset($' . 'adsshown)"></vb:if>';
						$conditional_prefix .= '<vb:if condition="$noadshown"><vb:if condition="$' . 'adsshown = array()"></vb:if></vb:if>';
						// if no ads shown, OR ad x have not been shown, show the ad
						$conditional_prefix .= '<vb:if condition="$noadshown OR !in_array($adid, $' . 'adsshown)">';
						$conditional_postfix .= '</vb:if>';
						break;
					default:
						($hook = vBulletinHook::fetch_hook('ad_check_criteria')) ? eval($hook) : false;
						break;
				}
			}
			// add a faux conditional before all the closing conditions to mark that we've shown certain ad already
			$conditional_postfix = '<vb:if condition="$' . 'adsshown[] = ' . $adid . '"></vb:if>' . $conditional_postfix;

			// wrap the conditionals around their ad snippet / template
			$template .= $conditional_prefix . $ad['snippet'] . $conditional_postfix;
		}
	}

	return $template;
}

// #############################################################################
/**
* Function to replace ad code into correct template
*
* @param	string	Style for template
* @param	string	Ad location
* @param	string	Template compiled
* @param	string	Template uncompiled
* @param	string	Username for the edit
* @param	string	Version of the template
* @param	string	Product that uses this template
*/
function replace_ad_template($styleid, $location, $template, $template_un, $username, $templateversion, $product='vbulletin')
{
	global $db;
	$db->query_write("
		REPLACE INTO " . TABLE_PREFIX . "template SET
			styleid = '".$db->escape_string($styleid)."',
			title = 'ad_" . $db->escape_string($location) . "',
			template = '" . $db->escape_string($template) . "',
			template_un = '" . $db->escape_string($template_un) . "',
			templatetype = 'template',
			dateline = " . TIMENOW . ",
			username = '" . $db->escape_string($username) . "',
			version = '" . $db->escape_string($templateversion) . "',
			product = '".$db->escape_string($product)."'
	");
}

// #############################################################################
/**
* Function to wrap ad template in a div with the correct id
*
* @param	string	Template String
* @param	string	Ad location (global_header1)
* @param	string	ID Prefix (Default: 'ad_')
*/
function wrap_ad_template($template, $id_name, $id_prefix='ad_')
{
	if (!$template)
	{
		return '';
	}

	// wrap the template in a div with the correct id
	$template_wrapped = '<div id="' . $id_prefix . $id_name . '">' . $template . '</div>';

	return $template_wrapped;
}


/*======================================================================*\
|| ####################################################################
|| # CVS: $RCSfile$ - $Revision: 37230 $
|| ####################################################################
\*======================================================================*/
?>