<commit_before><?php

/**
 * SowerPHP: Minimalist Framework for PHP
 * Copyright (C) SowerPHP (http://sowerphp.org)
 *
 * Este programa es software libre: usted puede redistribuirlo y/o
 * modificarlo bajo los términos de la Licencia Pública General GNU
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */

namespace sowerphp\core;

/**
 * Clase para el envío de correo electrónico
 * @author <NAME>, DeLaF (esteban[at]delaf.cl)
 * @version 2014-09-16
 */
class Network_Email
{

    protected $_config = null; ///< Arreglo con la configuración para el correo electrónico
    protected $_replyTo = null; ///< A quien se debe responder el correo enviado
    protected $_to = array(); ///< Listado de destinatarios
    protected $_bcc = array(); ///< Listado de destinatarios BCC
    protected $_subject = null; ///< Asunto del correo que se enviará
    protected $_attach = array(); ///< Archivos adjuntos
    protected $_debug = false; ///< Si se debe mostrar datos de debug o no

    /**
     * Constructor de la clase
     * @param config Configuración del correo electrónico que se usará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2015-01-19
     */
    public function __construct($config = 'default')
    {
        // Si es un arreglo, se asume es la configuración directamente
        if (is_array($config)) {
            $this->_config = $config;
        }
        // Si no es arreglo, es el nombre de la configuración
        else {
            $this->_config = \SowerPHP\core\Configure::read('email.'.$config);
        }
        // si no están los campos mínimos necesarios error
        if (empty($this->_config['type']) || empty($this->_config['host']) || empty($this->_config['port']) || empty($this->_config['user']) || empty($this->_config['pass'])) {
             throw new Exception('Configuración del correo electrónico incompleta');
        }
        // determinar from
        if (isset($this->_config['from'])) {
            if (is_array($this->_config['from'])) {
                $this->_config['from'] = $this->_config['from']['name'].' <'.$this->_config['from']['email'].'>';
            } else if (strpos($this->_config['from'], '<')===false) {
                $this->_config['from'] = $this->_config['from'].' <'.$this->_config['user'].'>';
            }
        } else {
            $this->_config['from'] = $this->_config['user'].' <'.$this->_config['user'].'>';
        }
    }

    /**
     * Método para asignar si hay o no (por defecto) debug
     * @param debug =true hay debug, =false no hay debug
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-02-22
     */
    public function setDebug ($debug = false)
    {
        $this->_debug = $debug;
    }

    /**
     * Asignar desde que cuenta enviar el correo
     * @param email Correo desde donde se envía supuestamente el email
     * @param name Nombre de quien envía supuestamente el email
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-06-03
     */
    public function from ($email, $name = null) {
        $this->_config['from'] = array (
            'email' => $email,
            'name' => $name?$name:$email,
        );
    }

    /**
     * Define a quién se debe responder el correo
     * @param email Correo electrónico a quien responder
     * @param name Nombre a quien responder
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)<commit_msg>fix: from debe ser string ahora, no arreglo<commit_after><?php

/**
 * SowerPHP: Minimalist Framework for PHP
 * Copyright (C) SowerPHP (http://sowerphp.org)
 *
 * Este programa es software libre: usted puede redistribuirlo y/o
 * modificarlo bajo los términos de la Licencia Pública General GNU
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */

namespace sowerphp\core;

/**
 * Clase para el envío de correo electrónico
 * @author <NAME>, DeLaF (esteban[at]delaf.cl)
 * @version 2014-09-16
 */
class Network_Email
{

    protected $_config = null; ///< Arreglo con la configuración para el correo electrónico
    protected $_replyTo = null; ///< A quien se debe responder el correo enviado
    protected $_to = array(); ///< Listado de destinatarios
    protected $_bcc = array(); ///< Listado de destinatarios BCC
    protected $_subject = null; ///< Asunto del correo que se enviará
    protected $_attach = array(); ///< Archivos adjuntos
    protected $_debug = false; ///< Si se debe mostrar datos de debug o no

    /**
     * Constructor de la clase
     * @param config Configuración del correo electrónico que se usará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2015-01-19
     */
    public function __construct($config = 'default')
    {
        // Si es un arreglo, se asume es la configuración directamente
        if (is_array($config)) {
            $this->_config = $config;
        }
        // Si no es arreglo, es el nombre de la configuración
        else {
            $this->_config = \SowerPHP\core\Configure::read('email.'.$config);
        }
        // si no están los campos mínimos necesarios error
        if (empty($this->_config['type']) || empty($this->_config['host']) || empty($this->_config['port']) || empty($this->_config['user']) || empty($this->_config['pass'])) {
             throw new Exception('Configuración del correo electrónico incompleta');
        }
        // determinar from
        if (isset($this->_config['from'])) {
            if (is_array($this->_config['from'])) {
                $this->_config['from'] = $this->_config['from']['name'].' <'.$this->_config['from']['email'].'>';
            } else if (strpos($this->_config['from'], '<')===false) {
                $this->_config['from'] = $this->_config['from'].' <'.$this->_config['user'].'>';
            }
        } else {
            $this->_config['from'] = $this->_config['user'].' <'.$this->_config['user'].'>';
        }
    }

    /**
     * Método para asignar si hay o no (por defecto) debug
     * @param debug =true hay debug, =false no hay debug
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-02-22
     */
    public function setDebug ($debug = false)
    {
        $this->_debug = $debug;
    }

    /**
     * Asignar desde que cuenta enviar el correo
     * @param email Correo desde donde se envía supuestamente el email
     * @param name Nombre de quien envía supuestamente el email
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2015-01-19
     */
    public function from ($email, $name = null) {
        $this->_config['from'] = ($name?$name:$email).' <'.$email.'>';
    }

    /**
     * Define a quién se debe responder el correo
     * @param email Correo electrónico a quien responder
     * @param name Nombre a quien responder
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
{'fraction_non_alphanumeric': 0.13629499119053612, 'fraction_numerical': 0.008306065945129625, 'mean_word_length': 2.7485849056603775, 'pattern_counts': {'":': 0, '<': 40, '<?xml version=': 0, '>': 66, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '802798', 'n_tokens_mistral': 2548, 'n_tokens_neox': 2479, 'n_words': 779}