Source of file IntercomScriptTags.php
Size: 3,890 Bytes - Last Modified: 2021-12-23T10:37:44+00:00
/var/www/docs.ssmods.com/process/src/code/IntercomScriptTags.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | <?php namespace SilverStripe\Intercom; use SilverStripe\Core\Convert; use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\View\ViewableData; /** * Generates the IntercomScriptTags. * Place into a template; forTemplate() returns the tag */ class IntercomScriptTags extends ViewableData { /** * @var bool */ private static $enabled = true; /** * @param Member $member * @return bool */ public function isEnabled(Member $member = null) { if (!Intercom::getSetting('INTERCOM_APP_ID')) { return false; } if (!$this->config()->enabled) { return false; } if ($this->config()->always_anonymous) { return true; } if (!$member) { $member = Security::getCurrentUser(); } if (!$this->config()->anonymous_access && !$this->config()->always_anonymous && !$member) { return false; } return true; } /** * Return the Intercom settings an array. * Extendable by adding extensions with updateIntercomSettings(). * * @param Member $member - if not provided, it will try to Member::currentUser(); * * @return array The settings, ready for JSON-encoding */ public function getIntercomSettings(Member $member = null) { if (!$this->isEnabled($member)) { return []; } $settings = [ 'app_id' => Intercom::getSetting('INTERCOM_APP_ID'), ]; // always_anonymous prevents the use of $member if ($this->config()->always_anonymous) { $member = null; } elseif (!$member) { $member = Security::getCurrentUser(); } if ($member) { $settings['name'] = trim($member->FirstName . ' ' . $member->Surname); $settings['email'] = $member->Email; $settings['created_at'] = trim($member->FirstName . ' ' . $member->Surname); $settings['created_at'] = $member->obj('Created')->Format('U'); foreach ((array)$this->config()->user_fields as $intercomKey => $propertyName) { $settings[$intercomKey] = $member->$propertyName; } if (Intercom::getSetting('INTERCOM_SECRET_KEY')) { $settings['user_hash'] = $this->generateUserHash($member->Email); } else { $settings['user_id'] = $member->ID; } if ($this->config()->company_property) { $prop = $this->config()->company_property; $org = $member->$prop; if ($org) { $settings['company']['id'] = $org->ID; $settings['company']['created_at'] = $org->obj('Created')->Format('U'); foreach ((array)$this->config()->company_fields as $intercomKey => $propertyName) { $settings['company'][$intercomKey] = $org->$propertyName; } } } }; $this->extend('updateIntercomSettings', $settings); return $settings; } /** * @todo Needs to use the token instead now, will that affect existing hashes? * * @param string $identifier * @return string|null */ public function generateUserHash($identifier) { if ($secret = Intercom::getSetting('INTERCOM_SECRET_KEY')) { return hash_hmac("sha256", $identifier, $secret); } } /** * @return string JSON */ public function IntercomSettingsJSON() { return Convert::raw2json($this->getIntercomSettings()); } public function forTemplate() { if (!$this->isEnabled()) { return null; } return $this->renderWith(__CLASS__); } } |