<?php
/**
* iKaza: Seu lar, sua escolha!
*
* iKaza é um sistema imobiliário
*
* @author Michael Granados <michaelgranados@gmail.com>
* @version $Id$
* @copyright
* @package Ikaza
* @subpackage Library
*/
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
/**
* Biblioteca de e-mail criada para o iKaza
*
* @author Michael Granados <michaelgranados@gmail.com>
* @version $Id$
* @package Library
* @subpackage Core
*/
class MY_Email
extends CI_Email
{
/**
* @var Controller Instancia criada por {@link get_instance()}
*/
private $_ci = null;
/**
* @var string Template renderizado em formato HTML
*/
protected $mailHtmlContent;
/**
* @var string Template renderizado em formato Texto Puro
*/
protected $mailTextContent;
/**
* Constructor da biblioteca
*
* Somente instancia o {@see self::$_ci} e executa o construtor original
* do {@link http://codeigniter.com CodeIgniter}
*
* @param array $config Config original, conforme a biblioteca original
*
* @return void
*/
public function __construct($config = array())
{
$this->_ci =& get_instance();
parent::__consruct($array);
}
/**
* Cria um e-mail de forma complexa
*
* Com as variaveis necessarias, o metodo cria um e-mail nos formatos html
* e plain, salva o e-mail dentro da pasta gerada pelo metodo
* {@see self::_generateHash()} e envia para o usuário
*
* As variáveis receberão um ponteiro de nome "mailHash" que indica a base
* do arquivo físico onde o e-mail será enviado. Portanto, no e-mail você
* pode criar adicionar essa variável indicando ao usuário onde ele pode
* encontrar esse e-mail.
*
* <pre>
* Se não consegue ver o e-mail
* <a href="<?php site_url($mailHash) ?>"
* title="Veja o e-mail em um navegador"
* >veja o e-mail em um navegador</a>.
* </pre>
*
* @uses self::_generateHash()
* @uses self::makeTemplates()
* @uses self::writeMailInDisk()
* @uses parent::send()
*
* @param array $variables As variáveis que o template irá reger
* @param string $subject Título do e-mail
* @param string $templateName Nome do template que o metodo usará como base
* @param string $recipient Receptor do e-mail
* @param string $emissor Emissor do e-mail
*
* @return bool
*/
public function sendEmail(
array $variables,
/* string */ $subject,
/* string */ $templateName,
/* string */ $recipient,
/* string */ $emissor
) {
$variables['mailHash'] = $this->_generateHash();
$this->makeTemplates($templateName, $variables);
$this->initialize($config = array('mailtype' => 'html'));
$this->from($emissor)
->to($recipient)
->subject($subject);
$this->message($this->mailHtmlContent);
$this->set_alt_message($this->mailTextContent);
$this->writeMailInDisk($variables['mailHash']);
return $this->send();
}
/**
* Gera um hash de e-mail
*
* Este método usa o config de email para saber em que pasta o sistema
* deverá salvar o e-mail.
*
* @return string
*/
private function _generateHash()
{
$this->_ci->config->load(
'email', $use_sections = true, $fail_gracefully = true
);
$basePath = $this->_ci->config->item('base_path', 'email');
$mailhash = sha1(uniqid());
$mailhash = implode(
DIRECTORY_SEPARATOR, array(
$basePath,
substr($mailhash, 0, 5),
substr($mailhash, 5, 10),
substr($mailhash, 10) . '.html'
)
);
return $mailhash;
}
/**
* Cria os templates para usar no e-mail
*
* Cria os templates "plain" e "html" para usar no {@link self::sendMail()}.
* Os templates do tipo "plain" ganharão o sufixo ".plain.php", enquanto os
* templates do tipo "html" ganharão do sufixo ".php".
*
* @param string $templateName Template base name
* @param array $variables Variables used by template
*
* @return void
*/
protected function makeTemplates(
/* string */ $templateName, array $variables
) {
$this->mailHtmlContent = get_instance()->load->view(
$templateName . '.php', $variables, $return = true
);
$this->mailTextContent = get_instance()->load->view(
$templateName . '.plain.php', $variables, $return = true
);
}
/**
* Escreve o e-mail em um arquivo físico
*
* Dessa forma, podemos enviar ao usuário um link para que ele consiga ver
* o e-mail dentro de um navegador de sua preferencia.
*
* @param string $mailHash Local onde o e-mail será gravado
*
* @return void
*/
protected function writeMailInDisk(/* string */ $mailHash)
{
$this->_ci->load->helper('file');
$file = dirname(FCPATH) . DIRECTORY_SEPARATOR . $mailhash;
$dir = pathinfo($file, PATHINFO_DIRNAME);
mkdir($dir, 0777, $recursive = true);
write_file($file, $this->mailHtmlContent);
}
}