Source of file EmailReminderEmailRecord.php
Size: 4,457 Bytes - Last Modified: 2021-12-23T10:41:35+00:00
/var/www/docs.ssmods.com/process/src/src/Model/EmailReminderEmailRecord.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | <?php namespace SunnySideUp\EmailReminder\Model; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\LiteralField; use SilverStripe\ORM\DataObject; use Sunnysideup\CmsEditLinkField\Forms\Fields\CMSEditLinkField; class EmailReminderEmailRecord extends DataObject { private static $singular_name = 'Email Reminder Record'; private static $plural_name = 'Email Reminder Records'; private static $table_name = 'EmailReminderEmailRecord'; private static $db = [ 'EmailTo' => 'Varchar(100)', 'ExternalRecordClassName' => 'Varchar(100)', 'ExternalRecordID' => 'Int', 'Result' => 'Boolean', 'HasTried' => 'Boolean', 'IsTestOnly' => 'Boolean', 'Subject' => 'Varchar', 'EmailContent' => 'HTMLText', ]; private static $indexes = [ 'EmailTo' => true, 'ExternalRecordClassName' => true, 'ExternalRecordID' => true, 'Result' => true, 'HasTried' => true, 'Created' => true, ]; private static $has_one = [ 'EmailReminderNotificationSchedule' => EmailReminderNotificationSchedule::class, ]; private static $summary_fields = [ 'Created.Nice' => 'When', 'EmailTo' => 'Sent to', 'Subject' => 'Subject', 'HasTried.NiceAndColourfull' => 'Has Sent', 'Result.NiceAndColourfull' => 'Sent Succesfully', 'IsTestOnly.NiceAndColourfullInvertedColours' => 'Test Only', ]; private static $default_sort = ['Created' => 'DESC', 'ID' => 'DESC']; /** * PartialMatchFilter. */ private static $searchable_fields = [ 'EmailTo' => 'PartialMatchFilter', 'Result' => 'ExactMatchFilter', 'Subject' => 'ExactMatchFilter', 'HasTried' => 'ExactMatchFilter', 'IsTestOnly' => 'ExactMatchFilter', ]; public function i18n_singular_name() { return self::$singular_name; } public function i18n_plural_name() { return self::$plural_name; } public function canCreate($member = null, $context = []) { return false; } public function canEdit($member = null, $context = []) { return false; } public function canDelete($member = null, $context = []) { return false; } /** * standard SS method. * * @return FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $linkedObject = $this->FindLinkedObject(); $fields->removeByName('ExternalRecordClassName'); $fields->removeByName('ExternalRecordID'); $fields->addFieldsToTab( 'Root.Details', [ $fields->dataFieldByName('EmailTo'), CMSEditLinkField::create('LinksTo', 'Linked To', $linkedObject), $fields->dataFieldByName('HasTried'), $fields->dataFieldByName('Result'), $fields->dataFieldByName('IsTestOnly'), $fields->dataFieldByName('EmailReminderNotificationScheduleID'), ] ); $fields->replaceField( 'EmailContent', LiteralField::create( 'EmailContent', $this->EmailContent ) ); return $fields; } /** * tests to see if an email can be sent * the emails can only be sent once unless previous attempts have failed. */ public function canSendAgain() { $send = true; if ($this->Result) { if ($this->IsTestOnly) { return true; } $send = false; $numberOfSecondsBeforeYouCanSendAgain = $this->EmailReminderNotificationSchedule()->RepeatDays * 86400; $todaysTS = strtotime('NOW'); $creationTS = strtotime($this->Created); $difference = $todaysTS - $creationTS; if ($difference > $numberOfSecondsBeforeYouCanSendAgain) { $send = true; } } return $send; } /** * @return mixed (DataObject) */ public function FindLinkedObject() { $linkedObject = null; if (class_exists($this->ExternalRecordClassName)) { $className = $this->ExternalRecordClassName; $linkedObject = $className::get()->byID($this->ExternalRecordID); } return $linkedObject ?: $this; } } |