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; }
/** * 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; }