diff options
Diffstat (limited to 'lib/models/Banner.class.php')
| -rw-r--r-- | lib/models/Banner.class.php | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/lib/models/Banner.class.php b/lib/models/Banner.class.php deleted file mode 100644 index a418760..0000000 --- a/lib/models/Banner.class.php +++ /dev/null @@ -1,232 +0,0 @@ -<?php -/** - * banner.php - model class for the banner administration - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * @author Nico Müller <nico.mueller@uni-oldenburg.de> - * @copyright 2012 Stud.IP Core-Group - * @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2 - * @category Stud.IP - * @package admin - * @since 2.4 - * - * @property string $id alias column for ad_id - * @property string $ad_id database column - * @property string $banner_path database column - * @property string|null $description database column - * @property string|null $alttext database column - * @property string $target_type database column - * @property string $target database column - * @property int $startdate database column - * @property int $enddate database column - * @property int $priority database column - * @property int $views database column - * @property int $clicks database column - * @property int $mkdate database column - * @property int $chdate database column - * @property SimpleORMapCollection|BannerRoles[] $banner_roles has_many BannerRoles - */ - -class Banner extends SimpleORMap -{ - protected static function configure($config = []) - { - $config['db_table'] = 'banner_ads'; - - $config['has_many']['banner_roles'] = [ - 'class_name' => BannerRoles::class, - 'assoc_foreign_key' => 'ad_id', - 'on_delete' => 'delete' - ]; - - parent::configure($config); - } - - /** - * Returns a random banner - */ - public static function getRandomBanner() - { - $query = "SELECT ad_id, priority, startdate, enddate - FROM banner_ads - WHERE priority > 0 - AND (startdate = 0 OR startdate < UNIX_TIMESTAMP()) - AND (enddate = 0 OR enddate > UNIX_TIMESTAMP())"; - $statement = DBManager::get()->query($query); - - // array that contains banner ids and an offset - // offsets start with 0 and increase by pow(2, priority) - // a random number between 0 and sum(pow(2,priorities)) is - // drawn and the banner with the highest offset smaller than - // this number is chosen - - $banners = []; - $sum = 0; - // collect banners to consider, build banners array - while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { - if (BannerRoles::checkUserAccess($row['ad_id'])) { - $sum += pow(2, $row['priority']); - $banners[] = [ - 'ad_id' => $row['ad_id'], - 'offset' => $sum - ]; - } - } - - // draw random number and select banner - $x = mt_rand(0, $sum); - $ad_id = false; - foreach ($banners as $i) { - if ($i['offset'] >= $x) { - $ad_id = $i['ad_id']; - break; - } - } - - return new Banner($ad_id); - } - - /** - * Get all banners - * - * @return array() list of banners - */ - public static function getAllBanners() - { - $query = "SELECT ad_id FROM banner_ads ORDER BY priority DESC"; - $statement = DBManager::get()->query($query); - $ids = $statement->fetchAll(PDO::FETCH_COLUMN); - - $banners = []; - foreach ($ids as $id) { - $banners[$id] = new Banner($id); - } - return $banners; - } - - /** - * delete entry from database - * the object is cleared and turned to new state - * @return boolean - */ - public function delete() - { - if (!$this->isNew()) { - // Remove banner file - unlink($GLOBALS['DYNAMIC_CONTENT_PATH'] . '/banner/' . $this->banner_path); - } - return parent::delete(); - } - - /* - * Check the priority for a banner - * @param Int $prio priority (1-10) - * @return - */ - public function getViewProbability() - { - static $computed = false, $sum = null; - - if ($this->priority == 0) { - return '--'; - } - - if ($computed === false) { - $sum = DBManager::get()->query("SELECT SUM(POW(2, priority)) FROM banner_ads WHERE priority > 0") - ->fetchColumn(); - $computed = true; - } -// return '1/' . (1 / (pow(2, $prio) / $sum)); - return number_format(100 / (1 / (pow(2, $this->priority) / $sum)), 2, ',', '.') . '%'; - } - - - /** - * Returns the appropriate link for this banner. - * - * @return string - */ - public function getLink($internal = false) - { - if ($this->isNew()) { - return ''; - } - - if ($internal) { - return URLHelper::getLink('dispatch.php/banner/click/' . $this->ad_id); - } - - if ($this->target_type === 'url') { - return $this->target; - } - if ($this->target_type === 'seminar') { - return URLHelper::getLink('dispatch.php/course/details/', ['sem_id' => $this->target]); - } - if ($this->target_type === 'user') { - return URLHelper::getLink('dispatch.php/profile', ['username' => $this->target]); - } - if ($this->target_type === 'inst') { - return URLHelper::getLink( - 'dispatch.php/institute/overview', - ['auswahl' => $this->target] - ); - } - - return ''; - } - - /** - * Returns the img-tag for this banner - * - * @return string - */ - public function toImg($attributes = []) - { - $attr = [ - 'src' => $GLOBALS['DYNAMIC_CONTENT_URL'] . '/banner/' . $this->banner_path, - 'border' => '0', - ]; - if ($this->alttext) { - $attr['title'] = $attr['alt'] = $this->alttext; - } - $attr = array_merge($attr, $attributes); - - $attr_string = ''; - foreach ($attr as $key => $value) { - $attr_string .= sprintf(' %s="%s"', $key, htmlReady($value)); - } - - return '<img' . $attr_string . '>'; - } - - /** - * Returns the complete html (link + img) for this banner - * - * @return string - */ - public function toHTML($internal = true) - { - if ($this->isNew()) { - return ''; - } - - if ($this->target_type === 'url') { - $template = '<a href="%s" target="_blank" rel="noopener noreferrer">%s</a>'; - } elseif ($this->target_type === 'none') { - $template = '%2$s'; - } else { - $template = '<a href="%s">%s</a>'; - } - - $link = sprintf($template, $this->getLink($internal), $this->toImg()); - - $this->views += 1; - $this->store(); - - return sprintf('<div class="studip-banner">%s</div>', $link); - } -} |
