Source of file ElementTestimonials.php
Size: 3,779 Bytes - Last Modified: 2021-12-24T06:46:05+00:00
/var/www/docs.ssmods.com/process/src/src/Elements/ElementTestimonials.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | <?php namespace Dynamic\Elements\Elements; use DNADesign\Elemental\Models\BaseElement; use Dynamic\Elements\Model\Testimonial; use Dynamic\Elements\Model\TestimonialCategory; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter; use SilverStripe\Forms\ListboxField; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBField; use Symbiote\GridFieldExtensions\GridFieldAddExistingSearchButton; /** * Class ElementTestimonials * @package Dynamic\Elements\Elements * * @property int $Limit * @property string $Content */ class ElementTestimonials extends BaseElement { /** * @var string */ private static $icon = 'font-icon-chat'; /** * @var string */ private static $singular_name = 'Testimonials Element'; /** * @var string */ private static $plural_name = 'Testimonials Elements'; /** * @var string */ private static $table_name = 'ElementTestimonials'; /** * @var array */ private static $db = [ 'Limit' => 'Int', 'Content' => 'HTMLText', ]; /** * @var array */ private static $many_many = [ 'TestimonialCategories' => TestimonialCategory::class, ]; /** * @var array */ private static $defaults = [ 'Limit' => 3, ]; /** * @return DBHTMLText */ public function getSummary() { if ($this->TestimonialCategories()->count() > 0) { $ct = 0; foreach ($this->TestimonialCategories() as $category) { $ct += $category->Testimonials()->count(); } if ($ct == 1) { $label = ' testimonial'; } else { $label = ' testimonials'; } return DBField::create_field( 'HTMLText', $ct . $label )->Summary(20); } } /** * @return array */ protected function provideBlockSchema() { $blockSchema = parent::provideBlockSchema(); $blockSchema['content'] = $this->getSummary(); return $blockSchema; } /** * @return string */ public function getType() { return _t(__CLASS__ . '.BlockType', 'Testimonials'); } /** * @return FieldList */ public function getCMSFields() { $this->beforeUpdateCMSFields(function (FieldList $fields) { $fields->dataFieldByName('Content') ->setRows(8); $fields->dataFieldByName('Limit') ->setTitle('Number of testimonials to show'); if ($this->exists()) { $fields->removeByName([ 'TestimonialCategories' ]); $fields->addFieldToTab('Root.Main', 'Limit', ListboxField::create( 'TestimonialCategories', 'Categories', TestimonialCategory::get()->map()->toArray() ) ); } }); return parent::getCMSFields(); } /** * @return mixed */ public function getTestimonialsList() { $random = DB::get_conn()->random(); $testimonials = Testimonial::get(); $categories = $this->TestimonialCategories(); if ($categories->count() > 0) { $testimonials = $testimonials->filterAny(['TestimonialCategories.ID' => $categories->column()]); } $testimonials = $testimonials->sort($random); if (0 < $this->Limit) { $testimonials = $testimonials->limit($this->Limit); } return $testimonials; } } |