Source of file UserInvitation.php
Size: 3,802 Bytes - Last Modified: 2021-12-24T06:48:49+00:00
/var/www/docs.ssmods.com/process/src/src/Model/UserInvitation.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | <?php namespace FSWebWorks\SilverStripe\UserInvitations\Model; use SilverStripe\Control\Director; use SilverStripe\Control\Email\Email; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\FieldType\DBDatetime; use SilverStripe\Security\Member; use SilverStripe\Security\Permission; use SilverStripe\Security\RandomGenerator; /** * Class UserInvitation * @package FSWebWorks * @subpackage UserInvitation * * @property string FirstName * @property string Email * @property string TempHash * @property string Groups * @property int InvitedByID * @property Member InvitedBy * */ class UserInvitation extends DataObject { private static $table_name = "UserInvitation"; /** * Used to control whether a group selection on the invitation form is required. * @var bool */ private static $force_require_group = false; private static $db = [ 'FirstName' => 'Varchar', 'Email' => 'Varchar(254)', 'TempHash' => 'Varchar', 'Groups' => 'Text' ]; private static $has_one = [ 'InvitedBy' => Member::class ]; private static $indexes = [ 'Email' => true, 'TempHash' => true ]; /** * Removes the hash field from the list. * @return FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $fields->removeByName('TempHash'); return $fields; } public function onBeforeWrite() { if (!$this->ID) { $generator = new RandomGenerator(); $this->TempHash = $generator->randomToken('sha1'); $this->InvitedByID = Member::currentUserID(); } parent::onBeforeWrite(); } /** * Sends an invitation to the desired user */ public function sendInvitation() { $email = Email::create() ->setFrom(Email::config()->get('admin_email')) ->setTo($this->Email) ->setSubject( _t( 'UserInvation.EMAIL_SUBJECT', 'Invitation from {name}', ['name' => $this->InvitedBy()->FirstName] ) )->setHTMLTemplate('email/UserInvitationEmail') ->setData( [ 'Invite' => $this, 'SiteURL' => Director::absoluteBaseURL(), ] ); $email->send(); return $email; } /** * Checks if a user invite was already sent, or if a user is already a member * @return ValidationResult */ public function validate() { $valid = parent::validate(); if (self::get()->filter('Email', $this->Email)->first()) { // UserInvitation already sent $valid->addError(_t('UserInvitation.INVITE_ALREADY_SENT', 'This user was already sent an invite.')); } if (Member::get()->filter('Email', $this->Email)->first()) { // Member already exists $valid->addError(_t( 'UserInvitation.MEMBER_ALREADY_EXISTS', 'This person is already a member of this system.' )); } return $valid; } /** * Checks if this invitation has expired * @return bool */ public function isExpired() { $result = false; $days = self::config()->get('days_to_expiry'); $time = DBDatetime::now()->getTimestamp(); $ago = abs($time - strtotime($this->Created)); $rounded = round($ago / 86400); if ($rounded > $days) { $result = true; } return $result; } public function canCreate($member = null, $context = null) { return Permission::check('ACCESS_USER_INVITATIONS'); } } |