/**
  * @param string $campaignName
  * @param bool $anonymous
  * @throws NoAdsMatchingCriteriaException
  * @throws NoFallbackCampaign
  * @throws FallbackCampaignDisabled
  */
 function __construct($campaignName, $anonymous = false)
 {
     global $wgPromoterFallbackCampaign;
     $this->anonymous = $anonymous;
     $campaign = new AdCampaign($campaignName);
     if (!AdCampaign::campaignExists($campaignName) || !$campaign->isEnabled()) {
         /* If the selected campaign doesn't exist or is disabled, fallback: */
         $campaign = new AdCampaign($wgPromoterFallbackCampaign);
         if (!AdCampaign::campaignExists($wgPromoterFallbackCampaign)) {
             throw new NoFallbackCampaign();
         } elseif (!$campaign->isEnabled()) {
             throw new FallbackCampaignDisabled();
         }
     }
     $this->campaignName = $campaign->getName();
     $this->ads = $campaign->getAds();
     $this->filterAds();
     if (count($this->ads) < 1) {
         throw new NoAdsMatchingCriteriaException($this->campaignName);
     }
     /*
     echo '<pre dir="ltr">';
     print_r( $this->ads );
     echo '</pre>';
     */
     $this->allocate();
     //$chosenAd = $this->chooseAd();
 }