Source of file PageFeedbackExtension.php
Size: 2,009 Bytes - Last Modified: 2021-12-23T11:00:08+00:00
/var/www/docs.ssmods.com/process/src/src/Extensions/PageFeedbackExtension.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | <?php namespace Vulcan\PageFeedback\Extensions; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridFieldConfig_RecordViewer; use SilverStripe\Forms\ReadonlyField; use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\HasManyList; use Vulcan\PageFeedback\Models\PageFeedbackEntry; /** * Class PageFeedback * * @author Reece Alexander <reece@steadlane.com.au> * * @method HasManyList|PageFeedbackEntry[] PageFeedbackEntries() * @property \Page|PageFeedbackExtension $owner */ class PageFeedbackExtension extends DataExtension { private static $db = []; private static $has_many = [ 'PageFeedbackEntries' => PageFeedbackEntry::class ]; /** * Forces spam protection on all forms relating to this module. * Requires the spamprotection module * * @config * @var bool */ private static $form_spam_protection = false; public function updateCMSFields(FieldList $fields) { parent::updateCMSFields($fields); $fields->addFieldsToTab('Root.PageFeedback', [ GridField::create('PageFeedback', 'Page Feedback', $this->owner->PageFeedbackEntries(), GridFieldConfig_RecordViewer::create()) ]); $fields->addFieldsToTab('Root.Main', [ ReadonlyField::create('MyPageRating', 'Page Rating', sprintf('%s (%s votes)', $this->getPageRating(), $this->owner->PageFeedbackEntries()->count())) ], 'Title'); } /** * Gets the average Page Rating * * @return float|int */ public function getPageRating() { $rating = 0; if (!$this->owner->PageFeedbackEntries()->count()) { return $rating; } $stack = []; /** @var PageFeedbackEntry $feedback */ foreach ($this->owner->PageFeedbackEntries() as $feedback) { $stack[] = (int)$feedback->Rating; } return round(array_sum($stack) / count($stack), 1); } } |