Вход Регистрация
Файл: 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$lettertrue
                        
)
                    ));

                }

            }

        }

        return 
true;

    }

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