*/ class EclipseAds { /** * The selected ad to display * @var Ad object */ protected $ad = array(); /** * List of all ads to chose from * @var array */ protected $ads = array(); /** * The HTML output of the ad * @var string */ protected $output = ""; /** * The description of the page that will display the ad * @var string */ protected $source = ""; /** * The total weight of all ads * @var int */ protected $total_weight = 0; /** * Constructor * @param string $source */ public function __construct($source = "") { if ($source != "") { $this->source = $source; } } /** * The ad builder, this funciton is ussually overwritten in a parent class * @return string */ protected function _build($layout = "", $type = "", $impression_id = "") { return ""; } /** * Add an add to the list of ads * @param object $Ad */ public function newAd($Ad = NULL) { if ($Ad->validAd()) { $this->ads[] = $Ad; } } /** * Randomly chose an ad from the list * @return boolean */ protected function _choseAd() { if (!empty($this->ads)) { $this->_getTotalWeight(); switch ($this->total_weight) { // split evenly case 0: $random = array_rand($this->ads, 1); $this->ad = $this->ads[$random]; break; // use weight to chose an ad. default: $draw = rand(1, $this->total_weight); $current = 0; foreach ($this->ads as $Ad) { $current = $current + $Ad->getWeight(); if ($draw <= $current) { $this->ad = $Ad; break; } } } } } private function _getTotalWeight() { $this->total_weight = 0; foreach ($this->ads as $ad) { $this->total_weight = $ad->getWeight() + $this->total_weight; } return $this->total_weight; } /** * Return HTML of the add and count impression if possible */ public function output($layout = "") { $this->_choseAd(); if (!empty($this->ad)) { if ($this->ad->getType() == "empty") { return ""; } $campaign = $this->ad->getCampaign(); $impression_id = ""; if (!empty($this->ad) && $campaign != "") { $CampaignImpression = new CampaignImpression($campaign); $impression_id = $CampaignImpression->recordImpression(); } $this->_build($layout, $this->ad->getType(), $impression_id); } return $this->output; } }