Вход Регистрация
Файл: system/controllers/subscriptions/hooks/send_letters.php
Строк: 86
<?php

class onSubscriptionsSendLetters extends cmsAction {

    public function 
run($attempt, $controller_name, $subject, $items){

        
// получаем список для контроллера и субъекта
        // где есть подписчики
        
$subscriptions_list = $this->model->filterEqual('controller', $controller_name)->
                
filterEqual('subject', $subject)->
                
filterGt('subscribers_count', 0)->
                
getSubscriptionsList();

        
// нет списка, удаляем задачу, возвратив true
        
if(!$subscriptions_list){
            return 
true;
        }

        
$controller = cmsCore::getController($controller_name);

        
// шаблон письма
        
$letter_text = cmsCore::getLanguageTextFile('letters/subscribe_new_item');
        if (!
$letter_text){ return false; }

        foreach (
$subscriptions_list as $subscription) {

            
// полный урл
            
$list_url = rel_to_href($subscription['subject_url'], true);

            
// получаем совпадения для подписки
            
$match_list = $controller->runHook('subscription_match_list', array($subscription, $items), false);
            if(!
$match_list){ continue; }

            
// если получили совпадения, рассылаем уведомления
            // получаем подписчиков
            
$subscribers = $this->model->getNotifiedUsers($subscription['id']);

            if(!
$subscribers){
                continue;
            }

            list(
$subscription,
                    
$subscribers,
                    
$match_list) = cmsEventsManager::hook('notify_subscribers', array(
                        
$subscription,
                        
$subscribers,
                        
$match_list
                    
));

            
// ссылки на новые записи
            
$links = array();

            foreach (
$match_list as $m) {
                
$links[] = '<a href="'.$m['url'].'">'.$m['title'].'</a>';
            }

            
$links = implode(', ', $links);

            foreach (
$subscribers as $user) {

                
// уведомление
                
if (in_array($user['notify_options']['subscriptions'], array('pm', 'both'))){

                    
$this->model_messages->addNotice(array($user['id']), array(
                        
'content' => sprintf(LANG_SBSCR_PM_NOTIFY, $list_url, $subscription['title'], $links)
                    ));

                }

                
// email
                
if (in_array($user['notify_options']['subscriptions'], array('email', 'both'))){

                    
$unsubscribe_url = href_to_abs('subscriptions', 'email_unsubscribe', $user['confirm_token']);

                    
$to = array(
                        
'email'          => $user['email'],
                        
'name'           => $user['nickname'],
                        
'email_reply_to' => false,
                        
'name_reply_to'  => false,
                        
'custom_headers' => array(
                            
'List-Unsubscribe' => $unsubscribe_url
                        
)
                    );

                    
$data = array(
                        
'site'            => $this->cms_config->sitename,
                        
'date'            => html_date(),
                        
'time'            => html_time(),
                        
'nickname'        => $user['nickname'],
                        
'title'           => $subscription['title'],
                        
'list_url'        => $list_url,
                        
'unsubscribe_url' => $unsubscribe_url,
                        
'subjects'        => $links
                    
);

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

                    
cmsQueue::pushOn('email', array(
                        
'controller' => 'messages',
                        
'hook'       => 'queue_send_email',
                        
'params'     => array(
                            
$to, $letter, true
                        
)
                    ));

                }

            }

        }

        return 
true;

    }

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