Вход Регистрация
Файл: system/controllers/messages/frontend.php
Строк: 165
<?php
class messages extends cmsFrontend {

    protected 
$useOptions true;

    private 
$sender_id;
    private 
$recipients = array();
    private 
$is_ignore_options false;

    
/**
     * Устанавливает отправителя сообщения
     * @param int $user_id
     */
    
public function setSender($user_id){

        
$this->sender_id $user_id;

    }

    
/**
     * Добавляет получателя сообщения
     * @param int $user_id
     */
    
public function addRecipient($user_id){

        
$this->recipients[] = $user_id;

    }

    
/**
     * Добавляет список получателей сообщения
     * @param array $list
     */
    
public function addRecipients($list){

        
$this->recipients array_merge($this->recipients$list);

    }

    public function 
clearRecipients(){
        
$this->recipients = array();
    }

    
/**
     * Отправляет сообщение
     * @param string $content
     * @return int | false
     */
    
public function sendMessage($content){

        
// Создаем контакты
        
foreach($this->recipients as $contact_id){
            if (!
$this->model->isContactExists($contact_id$this->sender_id)){
                
$this->model->addContact($contact_id$this->sender_id);
            }
        }

        
// Сохраняем сообщение
        
$message_id $this->model->addMessage($this->sender_id$this->recipients$content);

        
// Обновляем даты последних сообщений в контактах
        
if ($message_id){
            foreach(
$this->recipients as $contact_id){
                
$this->model->updateContactsDateLastMsg($this->sender_id$contact_id);
            }
        }

        return 
$message_id $message_id false;

    }

    public function 
ignoreNotifyOptions(){
        
$this->is_ignore_options true;
        return 
$this;
    }

    
/**
     * Отправляет уведомление через личные сообщения
     * @param array $notice
     * @param string $notice_type
     * @return int | false
     */
    
public function sendNoticePM($notice$notice_type=false){

        if (!
$notice_type){

            if (!
$this->recipients){ return; }

            return 
$this->model->addNotice($this->recipients$notice);

        }

        if (
$notice_type){

            
$options_only $this->is_ignore_options false : array('pm''both');
            
$recipients cmsCore::getModel('users')->getNotifiedUsers($notice_type$this->recipients$options_only);

            if (!
$recipients) { return false; }

            
$this->is_ignore_options false;

            return 
$this->model->addNotice($recipients$notice);

        }

    }

    
/**
     * Отправляет email-уведомления указанного типа всем
     * подписанным пользователям
     * @param string $notice_type
     * @param string $notice Массив ключей и значений для замены в тексте письма
     * @return boolean
     */
    
public function sendNoticeEmail($notice_type$notice=array()){

        if (!
$this->recipients){ return; }

        
$letter_text cmsCore::getLanguageTextFile("letters/{$notice_type}");
        if (!
$letter_text){ return false; }

        
$options_only $this->is_ignore_options false : array('email''both');
        
$recipients cmsCore::getModel('users')->getNotifiedUsers($notice_type$this->recipients$options_only);
        if (!
$recipients) { return false; }

        
$this->is_ignore_options false;

        
$letter_text string_replace_keys_values($letter_text$notice);

        
$mailer = new cmsMailer();

        
$success true;

        foreach(
$recipients as $recipient){

            
$to = array(
                
'name' => $recipient['nickname'],
                
'email' => $recipient['email']
            );

            
$letter = array(
                
'text' => string_replace_keys_values($letter_text$recipient)
            );

            
$success $success && $this->sendEmail($to$letter);

        }

        return 
$success;

    }

    public function 
sendEmail($to$letter$data=array()){

        if (
is_array($to)){
            if (empty(
$to['email'])) { return false; }
            if (empty(
$to['name'])){ $to['name'] = false; }
        } else {
            if (empty(
$to)) { return false; }
            
$to = array('email' => $to'name' => false);
        }

        if (
is_array($letter)){
            if (empty(
$letter['text'])){ $letter['text'] = cmsCore::getLanguageTextFile("letters/{$letter['name']}"); }
        } else {
            
$letter = array('text' => cmsCore::getLanguageTextFile("letters/{$letter}"));
        }

        if (!
$letter['text']){ return false; }

        
$config cmsConfig::getInstance();

        
$data array_merge(array(
            
'site' => $config->sitename,
            
'date' => html_date(time()),
            
'time' => html_time(time()),
        ), 
$data);

        
$letter['text'] = string_replace_keys_values($letter['text'], $data);

        
$mailer = new cmsMailer();

        
$mailer->addTo($to['email'], $to['name']);

        
$letter['text'] = $mailer->parseSubject($letter['text']);
        
$letter['text'] = $mailer->parseAttachments($letter['text']);

        
$mailer->setBodyHTMLnl2br($letter['text']) );

        
$result $mailer->send();

        
$mailer->clearTo()->clearAttachments();

        return 
$result;

    }

}
Онлайн: 1
Реклама