Вход Регистрация
Файл: plugins/notifications/controllers/notifications.php
Строк: 301
<?php

class NOTIFICATIONS_CTRL_Notifications extends PEEP_ActionController
{
    
/**
     *
     * @var NOTIFICATIONS_BOL_Service
     */
    
private $service;
    private 
$userId;

    public function 
__construct()
    {
        
parent::__construct();

        
$this->service NOTIFICATIONS_BOL_Service::getInstance();
        
$this->userId PEEP::getUser()->getId();
    }

    public function 
settings()
    {
        if ( !
PEEP::getUser()->isAuthenticated() )
        {
            throw new 
AuthenticateException();
        }

        
$contentMenu = new BASE_CMP_PreferenceContentMenu();
        
$contentMenu->getElement('email_notifications')->setActive(true);
        
$this->addComponent('contentMenu'$contentMenu);

        
PEEP::getDocument()->setHeading(PEEP::getLanguage()->text('notifications''setup_page_heading'));
        
PEEP::getDocument()->setHeadingIconClass('peep_ic_mail');
        
PEEP::getDocument()->setTitle(PEEP::getLanguage()->text('notifications''setup_page_title'));

        
$actions $this->service->collectActionList();
        
$settings $this->service->findRuleList($this->userId);

        
$form = new NOTIFICATIONS_SettingForm();
        
$this->addForm($form);

        
$processActions = array();

        foreach ( 
$actions as $action )
        {
            
$field = new CheckboxField($action['action']);
            
$field->setValue(!empty($action['selected']));

            if ( isset(
$settings[$action['action']]) )
            {
                
$field->setValue((bool) $settings[$action['action']]->checked);
            }

            
$form->addElement($field);

            
$processActions[] = $action['action'];
        }

        if ( 
PEEP::getRequest()->isPost() )
        {
            
$result $form->process($_POST$processActions$settings);
            if ( 
$result )
            {
                
PEEP::getFeedback()->info(PEEP::getLanguage()->text('notifications''settings_changed'));
            }
            else
            {
                
PEEP::getFeedback()->warning(PEEP::getLanguage()->text('notifications''settings_not_changed'));
            }

            
$this->redirect();
        }

        
$tplActions = array();

        foreach ( 
$actions as $action )
        {
            if ( empty(
$tplActions[$action['section']]) )
            {
                
$tplActions[$action['section']] = array(
                    
'label' => $action['sectionLabel'],
                    
'icon' => empty($action['sectionIcon']) ? '' $action['sectionIcon'],
                    
'actions' => array()
                );
            }

            
$tplActions[$action['section']]['actions'][$action['action']] = $action;
        }



        
$this->assign('actions'$tplActions);
    }

    public function 
unsubscribe$params )
    {
        if ( isset(
$_GET['confirm-result']) && $_GET['confirm-result'] === "0" )
        {
            throw new 
RedirectException(PEEP_URL_HOME);
        }
        
        
$code $params['code'];
        
$userId $this->service->findUserIdByUnsubscribeCode($code);
        
$lang PEEP::getLanguage();

        if ( empty(
$userId) )
        {
            throw new 
RedirectAlertPageException($lang->text('notifications''unsubscribe_code_expired'));
        }

        if ( empty(
$_GET['confirm-result']) )
        {
            throw new 
RedirectConfirmPageException($lang->text('notifications''unsubscribe_confirm_msg'));
        }
        
        
$activeActions $this->service->collectActionList();
        
$rules $this->service->findRuleList($userId);

        
$action $params['action'] == 'all' null $params['action'];

        foreach ( 
$activeActions as $actionInfo )
        {
            if ( 
$params['action'] != 'all' && $actionInfo['action'] != $params['action'] )
            {
                continue;
            }

            if ( empty(
$rules[$actionInfo['action']]) )
            {
                
$rule = new NOTIFICATIONS_BOL_Rule();
                
$rule->action $actionInfo['action'];
                
$rule->userId $userId;
            }
            else
            {
                
$rule $rules[$actionInfo['action']];
            }

            
$rule->checked false;

            
$this->service->saveRule($rule);
        }

        throw new 
RedirectAlertPageException($lang->text('notifications''unsubscribe_completed'));
    }

    public function 
test()
    {

        
/* PEEP::getConfig()->addConfig('notifications', 'schedule_dhour', '00', 'Schedule hour');
          PEEP::getConfig()->addConfig('notifications', 'schedule_wday', '1', 'Schedule week day'); */

        
require_once dirname(dirname(__FILE__)) . DS 'cron.php';

        
$cron = new NOTIFICATIONS_Cron();
        
//$cron->run();
        
$cron->deleteExpired();
        exit;
    }

    public function 
apiUnsubscribe$params )
    {
        if ( empty(
$params['emails']) || !is_array($params['emails']) )
        {
            throw new 
InvalidArgumentException('Invalid email list');
        }

        foreach ( 
$params['emails'] as $email )
        {
            
$user BOL_UserService::getInstance()->findByEmail($email);

            if ( 
$user === null )
            {
                throw new 
LogicException('User with email ' $email ' not found');
            }

            
$userId $user->getId();

            
$activeActions $this->service->collectActionList();
            
$rules $this->service->findRuleList($userId);

            
$action = empty($params['action']) ? null $params['action'];

            foreach ( 
$activeActions as $actionInfo )
            {
                if ( 
$action !== null && $actionInfo['action'] != $action )
                {
                    continue;
                }

                if ( empty(
$rules[$actionInfo['action']]) )
                {
                    
$rule = new NOTIFICATIONS_BOL_Rule();
                    
$rule->action $actionInfo['action'];
                    
$rule->userId $userId;
                }
                else
                {
                    
$rule $rules[$actionInfo['action']];
                }

                
$rule->checked false;

                
$this->service->saveRule($rule);
            }
        }
    }
}

class 
NOTIFICATIONS_SettingForm extends Form
{

    public function 
__construct()
    {
        
parent::__construct('notificationSettingForm');

        
$language PEEP::getLanguage();

        
$field = new RadioField('schedule');

        
        
$field->addOption(NOTIFICATIONS_BOL_Service::SCHEDULE_AUTO$language->text('notifications''schedule_automatic'));
        
$field->addOption(NOTIFICATIONS_BOL_Service::SCHEDULE_NEVER$language->text('notifications''schedule_never'));

        
$schedule NOTIFICATIONS_BOL_Service::getInstance()->getSchedule(PEEP::getUser()->getId());
        
$field->setValue($schedule);
        
$this->addElement($field);

        
$btn = new Submit('save');
        
$btn->setValue($language->text('notifications''save_setting_btn_label'));

        
$this->addElement($btn);
    }

    public function 
process$data$actions$dtoList )
    {
        
$userId PEEP::getUser()->getId();
        
$result 0;
        
$service NOTIFICATIONS_BOL_Service::getInstance();

        if ( !empty(
$data['schedule']) )
        {
            
$result += (int) $service->setSchedule($userId$data['schedule']);

            unset(
$data['schedule']);
        }

        foreach ( 
$actions as $action )
        {
            
/* @var $dto NOTIFICATIONS_BOL_Rule */
            
if ( empty($dtoList[$action]) )
            {
                
$dto = new NOTIFICATIONS_BOL_Rule();
                
$dto->userId $userId;
                
$dto->action $action;
            }
            else
            {
                
$dto $dtoList[$action];
            }

            
$checked = (int) !empty($data[$action]);

            if ( !empty(
$dto->id) && $dto->checked == $checked )
            {
                continue;
            }

            
$dto->checked $checked;
            
$result++;

            
$service->saveRule($dto);
        }

        return 
$result;
    }
}
Онлайн: 1
Реклама