<?php namespace WPDesk\Library\WPEmail\Abstracts; use Exception; abstract class EmailAbstract implements EmailInterface { /** * @var bool */ private $is_enable; /** * @var array */ protected $recipients = []; /** * @var array */ protected $placeholders = []; /** * @var string */ protected $subject = ''; /** * @var string */ protected $heading = ''; /** * @var array */ protected $attachments = []; /** * @var string */ protected $content = ''; /** * @var string */ protected $type = 'html'; /** * @var array */ protected $headers = []; /** * Define unique email ID. * * @return string */ abstract public function get_id(): string; /** * @return string */ public function get_from(): string { return ''; } /** * @return string */ public function get_from_name(): string { return ''; } /** * @return bool */ public function get_is_enable(): bool { return $this->is_enable; } /** * @param $enable * * @return EmailAbstract */ public function set_is_enable( $enable ): self { $this->is_enable = $enable; return $this; } /** * Set placeholders. * * @param array $placeholders * * @return self */ public function set_placeholders( array $placeholders = [] ): self { $this->placeholders = array_merge( $this->placeholders, $placeholders ); return $this; } /** * Get defined placeholders. * * @return string[] */ public function get_placeholders(): array { return $this->placeholders; } /** * Get email subject. * * @param string $subject * * @return self */ public function set_subject( string $subject ): self { $this->subject = $subject; return $this; } /** * Get email subject. * * @return string * @throws Exception */ public function get_subject(): string { if ( ! $this->subject ) { throw new Exception( 'Empty email subject' ); } return $this->subject; } /** * Set email heading. * * @param string $heading * * @return self */ public function set_heading( string $heading ): self { $this->heading = $heading; return $this; } /** * Get email heading. * * @return string */ public function get_heading(): string { return $this->heading; } /** * Get valid recipients. * * @param array $recipients * * @return self */ public function set_recipients( array $recipients = [] ): self { $this->recipients = $recipients; return $this; } /** * Get valid recipients. * * @return string[] */ public function get_recipients(): array { return $this->recipients; } /** * Get email headers. * * @param array $headers * * @return self */ public function set_headers( array $headers = [] ): self { $this->headers = $headers; return $this; } /** * Get email headers. * * @return string[] */ public function get_headers(): array { return $this->headers; } /** * Set attachments. * * @param array $attachments * * @return self */ public function set_attachments( array $attachments ): self { $this->attachments = $attachments; return $this; } /** * Get email attachments. * * @return array */ public function get_attachments(): array { return $this->attachments; } /** * Set email type. * * @param string $type * * @return self */ public function set_type( string $type = 'html' ): self { $this->type = $type; return $this; } /** * Get email type. * * @return string */ public function get_type(): string { return $this->type; } /** * Get content type. * * @return string */ public function get_content_type(): string { switch ( $this->get_type() ) { case 'html': return 'text/html'; case 'multipart': return 'multipart/alternative'; default: return 'text/plain'; } } /** * Get email content. * * @param string $content * * @return self */ public function set_content( string $content ): self { $this->content = $content; return $this; } /** * Get email content. * * @return string * @throws Exception */ public function get_content(): string { return $this->content; } /** * @param string $string * * @return array|string|string[] */ protected function replace_placeholders( string $string ): string { return (string) str_replace( array_keys( $this->placeholders ), array_values( $this->placeholders ), $string ); } }