function execute($par)
 {
     $this->getParams();
     $html = '';
     $error = false;
     $renderedAds = array();
     try {
         $campaign = new AdCampaign($this->campaignName);
         $ads = $campaign->getAds();
         foreach ($ads as $ad) {
             $renderedAds[] = Ad::fromName($ad['name'])->renderHtml();
         }
     } catch (MWException $e) {
         wfDebugLog('Promoter', $e->getMessage());
         $error = $e->getMessage();
     }
     if ($this->isPreview) {
         $this->setHeaders();
         if ($error) {
             $html = "Exception {$error}.";
         } else {
             $html = '<div id="adPreview clearfix">';
             foreach ($renderedAds as $ad) {
                 $html .= '<div class="col-sm-4">' . $ad . '</div>';
             }
             $html .= '</div>';
         }
         $this->getOutput()->addHTML($html);
     } else {
         $this->getOutput()->disable();
         $this->sendHeaders();
         print_r($renderedAds);
     }
 }
 function execute($par)
 {
     $this->getParams();
     $html = '';
     $chosenAd = null;
     $error = false;
     try {
         $adChooser = new AdChooser($this->campaignName, $this->anonymous);
         $chosenAd = $adChooser->chooseAd();
         $chosenAd = Ad::fromName($chosenAd['name']);
         $html = $chosenAd->renderHtml();
     } catch (MWException $e) {
         wfDebugLog('Promoter', $e->getMessage());
         $error = $e->getMessage();
     }
     if ($this->isPreview) {
         $this->setHeaders();
         $html = $error ? "Exception {$error}." : '<div id="adPreview" class="col-md-3 col-sm-4">' . $html . '</div>';
         $this->getOutput()->addHTML($html);
     } else {
         $this->getOutput()->disable();
         $this->sendHeaders();
         if ($error) {
             echo "mw.promoter.insertAd( false /* due to internal exception ({$error}) */ );";
         } else {
             echo $this->getJsData($chosenAd);
         }
     }
 }
 /**
  * Parser hook handler for {{#articletype}}
  *
  * @param Parser $parser : Parser instance available to render
  *  wikitext into html, or parser methods.
  *
  * @return string: HTML to insert in the page.
  */
 public static function renderGallery($input, array $args, Parser $parser, PPFrame $frame)
 {
     $parser->getOutput()->addModules('ext.promoter.gallery');
     $pageName = $parser->getTitle()->getText();
     try {
         $renderedAds = array();
         $adChooser = new AdChooser($pageName, !$parser->getUser()->isLoggedIn());
         $ads = $adChooser->getAds();
         foreach ($ads as $ad) {
             $renderedAds[] = Ad::fromName($ad['name'])->renderHtml();
         }
     } catch (AdCampaignExistenceException $e) {
         wfDebugLog('Promoter', $e->getMessage());
         //@todo i18n
         return '<span class="error">No campaign for this page</span>';
     } catch (MWException $e) {
         wfDebugLog('Promoter', $e->getMessage());
         return '<span class="error text-danger">An error occurred [' . $e->getMessage() . ']</span>';
     }
     $html = '<div class="promotion-gallery hidden hidden-print">' . '<h5 class="sr-only">זוהי גלריה המקדמת ערכים שונים באתר.</h5>' . '<div class="gallery-controls">' . '<span class="sr-only">בכל רגע מוצגות 3 ידיעות בגלריה. ניתן להציג ידיעה נוספת או לחזור לאחור באמצעות הכפתורים הבאים, או באמצעות מקשי החיצים כאשר הפוקוס הוא על הגלריה</span>' . '<a href="#" class="owl-prev"><span class="fa fa-chevron-right fa-lg" title="הקודם"></span><span class="sr-only">הצגת הידיעה הקודמת</span></a>' . '<a href="#" class="owl-next"><span class="fa fa-chevron-left fa-lg" title="הבא"></span><span class="sr-only">הצגת הידיעה הבאה</span></a>' . '</div>';
     if ($args['title']) {
         $html .= '<div class="header">' . $args['title'] . '</div>';
     }
     $html .= '<div class="owl-carousel clearfix" tabindex="0">' . implode('', $renderedAds) . '</div>' . '</div>';
     return $html;
 }
 /**
  * Generate the content of each table row (1 row = 1 ad)
  *
  * @param $row object: database row
  *
  * @return string HTML
  */
 function formatRow($row)
 {
     // Begin ad row
     $htmlOut = Xml::openElement('tr');
     if ($this->editable) {
         // Remove box
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), Xml::check('removeAds[]', false, array('value' => $row->ad_name, 'onchange' => $this->onRemoveChange)));
     }
     // Preview
     $ad = Ad::fromName($row->ad_name);
     $htmlOut .= Xml::tags('td', array('valign' => 'top'), $ad->linkToPreview());
     // End ad row
     $htmlOut .= Xml::closeElement('tr');
     return $htmlOut;
 }
 /**
  * Generate the content of each table row (1 row = 1 ad)
  */
 function formatRow($row)
 {
     // Begin ad row
     $htmlOut = Xml::openElement('tr');
     if ($this->editable) {
         // Add box
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), Xml::check('addAds[]', '', array('value' => $row->ad_name)));
         // Weight select
         $htmlOut .= Xml::tags('td', array('valign' => 'top', 'class' => 'pr-weight'), Xml::listDropDown("weight[{$row->ad_id}]", Promoter::dropDownList($this->msg('promoter-weight')->text(), range(0, 100, 5)), '', '25', '', ''));
     }
     // Link and Preview
     $ad = Ad::fromName($row->ad_name);
     $htmlOut .= Xml::tags('td', array('valign' => 'top'), $ad->linkToPreview());
     // End ad row
     $htmlOut .= Xml::closeElement('tr');
     return $htmlOut;
 }
Exemplo n.º 6
0
 /**
  * FIXME: a little thin, it's just enough to get the job done
  *
  * @param $name
  * @param $ts
  * @return array|null ad settings as an associative array, with these properties:
  *    display_anon: 0/1 whether the ad is displayed to anonymous users
  *    display_account: 0/1 same, for logged-in users
  */
 static function getHistoricalAd($name, $ts)
 {
     $id = Ad::fromName($name)->getId();
     $dbr = PRDatabase::getDb();
     $newestLog = $dbr->selectRow("pr_ad_log", array("log_id" => "MAX(adlog_id)"), array("adlog_timestamp <= {$ts}", "adlog_ad_id = {$id}"), __METHOD__);
     if ($newestLog->log_id === null) {
         return null;
     }
     $row = $dbr->selectRow("pr_ad_log", array("display_anon" => "adlog_end_anon", "display_account" => "adlog_end_account"), array("adlog_id = {$newestLog->log_id}"), __METHOD__);
     $ad['display_anon'] = (int) $row->display_anon;
     $ad['display_account'] = (int) $row->display_account;
     return $ad;
 }
 protected function processSaveAdAction($formData)
 {
     $ad = Ad::fromName($this->adName);
     /* --- Ad settings --- */
     $ad->setAllocation(in_array('anonymous', $formData['display-to']), in_array('user', $formData['display-to']));
     $ad->setCaption($formData['ad-title']);
     $ad->setMainLink($formData['ad-link']);
     $ad->setBodyContent($formData['ad-body']);
     $ad->save($this->getUser());
     return null;
 }
 /**
  * Remove an ad assignment from a campaign
  */
 static function removeAdFor($campaignName, $adName)
 {
     $dbw = PRDatabase::getDb();
     $dbw->begin();
     $campaignId = AdCampaign::getCampaignId($campaignName);
     $adId = Ad::fromName($adName)->getId();
     $dbw->delete('pr_adlinks', array('ad_id' => $adId, 'cmp_id' => $campaignId));
     $dbw->commit();
 }
 /**
  * Create form for managing ads assigned to a campaign
  */
 function assignedAdsForm($campaign)
 {
     $dbr = PRDatabase::getDb();
     $res = $dbr->select(array('campaigns' => 'pr_campaigns', 'adlinks' => 'pr_adlinks', 'ads' => 'pr_ads'), array('ads.ad_id', 'ads.ad_name', 'adlinks.adl_weight'), array('campaigns.cmp_name' => $campaign, 'campaigns.cmp_id = adlinks.cmp_id', 'adlinks.ad_id = ads.ad_id'), __METHOD__, array('ORDER BY' => 'campaigns.cmp_id'));
     // No ads found
     if ($dbr->numRows($res) < 1) {
         return '';
     }
     if ($this->editable) {
         $readonly = array();
     } else {
         $readonly = array('disabled' => 'disabled');
     }
     $weights = array();
     $ads = array();
     foreach ($res as $row) {
         $ads[] = $row;
         $weights[] = $row->adl_weight;
     }
     $isBalanced = count(array_unique($weights)) === 1;
     // Build Assigned ads HTML
     $htmlOut = Html::hidden('change', 'weight');
     $htmlOut .= Xml::fieldset($this->msg('promoter-assigned-ads')->text());
     // Equal weight ads
     $htmlOut .= Xml::openElement('tr');
     $htmlOut .= Xml::tags('td', array(), Xml::label($this->msg('promoter-balanced')->text(), 'balanced'));
     $htmlOut .= Xml::tags('td', array(), Xml::check('balanced', $isBalanced, array_replace($readonly, array('value' => $campaign, 'id' => 'balanced'))));
     $htmlOut .= Xml::closeElement('tr');
     $htmlOut .= Xml::openElement('table', array('cellpadding' => 9, 'width' => '100%'));
     if ($this->editable) {
         $htmlOut .= Xml::element('th', array('align' => 'left', 'width' => '5%'), $this->msg("promoter-remove")->text());
     }
     $htmlOut .= Xml::element('th', array('align' => 'left', 'width' => '5%', 'class' => 'pr-weight'), $this->msg('promoter-weight')->text());
     /*
     $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ),
     	$this->msg( 'promoter-bucket' )->text() );
     */
     $htmlOut .= Xml::element('th', array('align' => 'left', 'width' => '70%'), $this->msg('promoter-ads')->text());
     // Table rows
     foreach ($ads as $row) {
         $htmlOut .= Xml::openElement('tr');
         if ($this->editable) {
             // Remove
             $htmlOut .= Xml::tags('td', array('valign' => 'top'), Xml::check('removeAds[]', false, array('value' => $row->ad_name)));
         }
         // Weight
         $htmlOut .= Xml::tags('td', array('valign' => 'top', 'class' => 'pr-weight'), $this->weightDropDown("weight[{$row->ad_id}]", $row->adl_weight));
         // Ad
         $ad = Ad::fromName($row->ad_name);
         $htmlOut .= Xml::tags('td', array('valign' => 'top'), $ad->linkToPreview());
         $htmlOut .= Xml::closeElement('tr');
     }
     $htmlOut .= Xml::closeElement('table');
     $htmlOut .= Xml::closeElement('fieldset');
     return $htmlOut;
 }