Source of file HideMailto.php
Size: 3,529 Bytes - Last Modified: 2021-12-23T10:41:58+00:00
/var/www/docs.ssmods.com/process/src/src/HideMailto.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | <?php namespace Sunnysideup\HideMailto; use SilverStripe\Control\Email\Email; use SilverStripe\View\ViewableData; use SilverStripe\Core\Convert; use SilverStripe\View\Requirements; use SilverStripe\CMS\Model\SiteTreeExtension; use SilverStripe\ORM\DataExtension; use SilverStripe\Security\Member; use Sunnysideup\HideMailto\HideMailto; use SilverStripe\Control\Director; use SilverStripe\CMS\Controllers\ContentController; class HideMailto extends SiteTreeExtension { private static $email_field = Email::class; private static $default_subject = "enquiry"; private static $replace_characters = array( "." => ".", "@" => "@", "a" => "a", "b" => "b", "c" => "c", "d" => "d", "e" => "e", "f" => "f", "g" => "g", "h" => "h", "i" => "i" ); /** * * @param String $email * @param String $subject * @return Obj (MailTo, Text, Original, Subject) */ public static function convert_email($email, $subject = '') { $obj = new ViewableData(); if (!$subject) { $subject = self::$default_subject; } //mailto part $mailTo = "mailto:".$email."?subject=".Convert::raw2mailto($subject); $mailToConverted = self::string_encoder($mailTo); $convertedEmail = self::string_encoder($email); $obj->MailTo = $mailToConverted; $obj->Text = $convertedEmail; $obj->Original = $email; $obj->Subject = $subject; //$obj->OnClick = "jQuery(this).attr('href', HideMailto2Email('".self::get_dot_replacer()."', '".$array[0]."', '".$array[1]."', '".Convert::raw2mailto($subject)."')); return true;"; //TO DO: add a JS function that puts the Requirements::javascript('silverstripe/admin: thirdparty/jquery/jquery.js'); //Requirements::javascript("sunnysideup/hidemailto: client/javascript/HideMailto2Email.js"); return $obj; } /** * encodes a string - randomly * @param String $string * @return String */ private static function string_encoder($string) { $encodedString = ''; $nowCodeString = ''; $originalLength = strlen($string); for ($i = 0; $i < $originalLength; $i++) { $encodeMode = rand(1, 2); switch ($encodeMode) { case 1: // Decimal code $nowCodeString = '&#' . ord($string[$i]) . ';'; break; case 2: // Hexadecimal code $nowCodeString = '&#x' . dechex(ord($string[$i])) . ';'; break; default: return 'ERROR: wrong encoding mode.'; } $encodedString .= $nowCodeString; } return $encodedString; } public function HideMailToObject() { if ($email = $this->getHiddenEmailData()) { $obj = self::convert_email($email); return $obj; } } private function getHiddenEmailData() { if ($field = self::$email_field) { if ($email = $this->owner->$field) { return $this->isEmail($email); } } } private function isEmail($email) { if (!preg_match("/^([A-Za-z0-9._-])+\@(([A-Za-z0-9-])+\.)+([A-Za-z0-9])+$/", trim($email))) { return ""; } else { return $email; } } } |