Source of file Advertisement.php
Size: 11,874 Bytes - Last Modified: 2021-12-23T10:38:47+00:00
/var/www/docs.ssmods.com/process/src/src/Model/Advertisement.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 | <?php namespace Sunnysideup\Advertisements\Model; use SilverStripe\Core\Config\Config; use Sunnysideup\Advertisements\Model\Advertisement; use SilverStripe\Assets\Image; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\ORM\FieldType\DBField; use SilverStripe\Forms\ReadonlyField; use SilverStripe\AssetAdmin\Forms\UploadField; use SilverStripe\Forms\TreeMultiselectField; use SilverStripe\Forms\TextField; use SilverStripe\Forms\TreeDropdownField; use SilverStripe\Forms\NumericField; use SilverStripe\ORM\DB; use Sunnysideup\Advertisements\Model\AdvertisementDecorator; use SilverStripe\Core\Convert; use SilverStripe\ORM\DataObject; use Sunnysideup\Advertisements\Control\AdvertisementController; use Sunnysideup\DataobjectSorter\DataObjectSorterController; /* * *@author nicolaas[at] sunnysideup.co.nz * **/ class Advertisement extends DataObject { private static $table_name = 'Advertisement'; /** * * @var int */ private static $thumbnail_size = 140; /** * * @var int */ private static $width = 0; /** * * @var int */ private static $height = 0; /** * * @var bool */ private static $show_title = false; /** * * @var bool */ private static $show_description = false; /** * must be a string as booleans dont work well on configs * @varchar yes / no */ private static $resize_images = "yes"; /** * * @return string */ public static function recommended_image_size_statement() { $array = array(); if (Config::inst()->get(Advertisement::class, "width")) { $array[] = "width = ".Config::inst()->get(Advertisement::class, "width")."px"; } if (Config::inst()->get(Advertisement::class, "height")) { $array[] = "height = ".Config::inst()->get(Advertisement::class, "height")."px"; } $count = count($array); if ($count == 0) { return _t("Advertisement.NO_RECOMMENDED_SIZE_HAS_BEEN_SET", "No recommeded image size has been set."); } else { return _t("Advertisement.RECOMMENDED_SIZE", "Recommended Size").": ".implode(" "._t("Advertisement.AND", "and")." ", $array)."."; } } private static $db = array( "Title" => "Varchar(255)", "ExternalLink" => "Varchar(150)", "Description" => "Text", "Sort" => "Int" ); private static $has_one = array( "AdvertisementImage" => Image::class, "LinkedPage" => SiteTree::class, "AdditionalImage" => Image::class ); private static $belongs_many_many = array( "Parents" => SiteTree::class, ); private static $casting = array( "FullTitle" => "HTMLText", "Link" => "Varchar", "GroupID" => "Int" ); private static $defaults = array( "Sort" => 1000 ); private static $default_sort = "\"Sort\" ASC, \"Title\" ASC"; private static $searchable_fields = array( "Title" => "PartialMatchFilter" ); private static $singular_name = "Advertisement"; private static $plural_name = "Advertisements"; private static $summary_fields = array( "FullTitle" => "Image", "Link" => "Link" ); /** * @alias getLink * @return string */ public function Link() { return $this->getLink(); } /** * * @return string */ public function getLink() { $link = ''; if ($this->ExternalLink) { $link = $this->ExternalLink; } elseif ($this->LinkedPageID) { if ($this->LinkedPage()) { $link = $this->LinkedPage()->Link(); } } return $link; } /** * * @return HTMLText */ public function getFullTitle($additionalStyle = '') { $s = $this->Title; if ($this->AdvertisementImageID) { $image = $this->AdvertisementImage(); if ($image && $image->exists()) { $size = Config::inst()->get(Advertisement::class, "thumbnail_size"); $thumb = $image->Fit( $size, $size ); if ($thumb) { $s = ' <img src="'.$thumb->Link().'" title="'.$thumb->Link().'"/ style="vertical-align: top; display: block; float: left; padding-right: 10px; '.$additionalStyle.' "><div style="width: 100%;">'.$s.'</div><div style="clear: left;"></div>'; } } } return DBField::create_field("HTMLText", $s); } /** * * @return HTMLText */ public function FullTitle() { return $this->getFullTitle(); } /** * * @return int | null */ public function getGroupID() { if ($this->AdvertisementImageID) { $image = Image::get()->byID($this->AdvertisementImageID); if ($image) { return $image->ParentID; } } } /** * * @return int | null */ public function GroupID() { return $this->getGroupID(); } public function getCMSFields() { $fields = parent::getCMSFields(); $fields->removeFieldFromTab("Root", "Sort"); $fields->removeFieldFromTab("Root.Main", "AdvertisementImage"); $fields->removeFieldFromTab("Root.Main", "AdvertisementImageID"); $fields->removeFieldFromTab("Root.Main", "LinkedPageID"); $fields->removeFieldFromTab("Root.Main", "ExternalLink"); $fields->removeFieldFromTab("Root.Parents", "Parents"); $fields->removeFieldFromTab("Root", "Parents"); if (! $this->ShowTitle()) { $fields->removeFieldFromTab("Root", "Title"); } if (! $this->ShowDescription()) { $fields->removeFieldFromTab("Root", "Description"); } $fields->addFieldToTab("Root.Main", ReadonlyField::create("Link", 'Calculated Link')); $fields->addFieldToTab("Root.Main", $mainImageField = new UploadField($name = "AdvertisementImage", $title = $this->i18n_singular_name())); $mainImageField->setDescription(self::recommended_image_size_statement()); $fields->addFieldToTab( "Root.Main", $additionalImageField = UploadField::create( $name = "AdditionalImage", $title = $this->i18n_singular_name()." "._t("Advertisement.ADDITIONAL_IMAGE", "additional image") ) ); $additionalImageField->setDescription(self::recommended_image_size_statement()); if ($this->ID) { $treeField = TreeMultiselectField::create( "Parents", _t("Advertisement.GETCMSFIELDSPARENTID", "only show on ... (leave blank to show on all " .$this->i18n_singular_name() ." pages)"), SiteTree::class ); /*$callback = $this->callbackFilterFunctionForMultiSelect(); if($callback) { $treeField->setFilterFunction ($callback); }*/ $fields->addFieldToTab("Root.ShownOn", $treeField); } $fields->addFieldToTab( "Root.OptionalLink", $externalLinkField = new TextField($name = "ExternalLink", $title = _t("Advertisement.GETCMSFIELDSEXTERNALLINK", "link to external site")) ); $externalLinkField->setDescription(_t("Advertisement.GETCMSFIELDSEXTERNALLINK_EXPLANATION", "(e.g. http://www.wikipedia.org) - this will override an internal link")); $fields->addFieldToTab("Root.OptionalLink", TreeDropdownField::create($name = "LinkedPageID", $title = _t("Advertisement.GETCMSFIELDSEXTERNALLINKID", "link to a page on this website"), $sourceObject = SiteTree::class)); if (class_exists(DataObjectSorterController::class)) { //sorted on parent page... } else { $fields->addFieldToTab( "Root.Position", $sortField = NumericField::create( "Sort", _t("Advertisement.SORT", "Sort index number") ) ); $sortField->setDescription(_t("Advertisement.SORT_EXPLANATION", "the lower the number, the earlier it shows")); } $fields->removeFieldFromTab("Root.Main", "AlternativeSortNumber"); return $fields; } public function onBeforeWrite() { parent::onBeforeWrite(); if (! $this->Sort) { $defaults = $this->Config()->get("defaults"); $this->Sort = isset($defaults["Sort"]) ? $defaults["Sort"] : 0; } } public function requireDefaultRecords() { parent::requireDefaultRecords(); DB::query("UPDATE \"Advertisement\" SET \"Title\" = \"ID\" WHERE \"Title\" = '' OR \"Title\" IS NULL;"); } /** * * @return bool */ protected function callbackFilterFunctionForMultiSelect() { $inc = Config::inst()->get(AdvertisementDecorator::class, "page_classes_with_advertisements"); $exc = Config::inst()->get(AdvertisementDecorator::class, "page_classes_without_advertisements"); if (is_array($inc) && count($inc)) { $string = 'return in_array($obj->class, array(\''.implode("','", $inc).'\'));'; } elseif (is_array($exc) && count($exc)) { $string = 'return !in_array($obj->class, array(\''.implode("','", $exc).'\'));'; } if (isset($string)) { return create_function('$obj', $string); } else { return false; } } public function Image() { //will be depreciated in the future. return $this->ResizedAdvertisementImage(); } /** * * @return Image | null */ public function ResizedAdvertisementImage() { $resizedImage = null; $imageID = intval($this->AdvertisementImageID+ 0); if ($imageID) { if ($this->Config()->get("resize_images") == 'yes') { $imageObject = Image::get()->byID($imageID); $resizedImage = $imageObject; if ($imageObject) { if ($imageObject->ID) { $imageObject->Title = Convert::raw2att($this->Title); $w = Config::inst()->get(Advertisement::class, "width"); $h = Config::inst()->get(Advertisement::class, "height"); if ($h && $w) { $resizedImage = $imageObject->Fit($w, $h); } elseif ($h) { $resizedImage = $imageObject->ScaleHeight($h); } elseif ($w) { $resizedImage = $imageObject->ScaleWidth($w); } else { $resizedImage = $imageObject; } } else { //debug::show("no image"); } } else { //debug::show("could not find image"); } } else { return $this->AdvertisementImage(); } } else { //debug::show("no imageID ($imageID) "); } return $resizedImage; } public function ThinyThumb() { return "This function has not been implemented"; } /** * * @return bool */ public function ShowTitle() { return $this->Config()->get('show_title'); } /** * * @return bool */ public function ShowDescription() { return $this->Config()->get('show_description'); } } |