ActionSettings

Package actions
Inheritance class ActionSettings » Action » LsObject
Since 1.0
Source Code /classes/actions/ActionSettings.class.php
Экшен обрабтки настроек профиля юзера (/settings/)

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
aParams array Список параметров из URL Action
aParamsEventMatch array Список совпадений по регулярному выражению для евента Action
aRegisterEvent array Список зарегистрированных евентов Action
oEngine Engine|null Объект ядра Action
oUserCurrent ModuleUser_EntityUser|null Текущий юзер ActionSettings
sActionTemplate string|null Шаблон экшена Action
sCurrentAction null|string Текущий экшен Action
sCurrentEvent string|null Текущий евент Action
sCurrentEventName string|null Имя текущий евента Action
sDefaultEvent string|null Дефолтный евент Action
sMenuItemSelect string Какое меню активно ActionSettings
sMenuSubItemSelect string Какое подменю активно ActionSettings

Public Methods

Hide inherited methods

MethodDescriptionDefined By
EventShutdown() Выполняется при завершении работы экшена ActionSettings
ExecEvent() Запускает евент на выполнение Action
GetActionClass() Получить каталог с шаблонами экшена(совпадает с именем класса) Action
GetCurrentEventName() Возвращает имя евента Action
GetDefaultEvent() Получает евент по умолчанию Action
GetParam() Получает параметр из URL по его номеру, если его нет то null Action
GetParams() Получает список параметров из УРЛ Action
GetTemplate() Получить шаблон Action
Init() Инициализация ActionSettings
SetDefaultEvent() Устанавливает евент по умолчанию Action
SetParam() Установить значение параметра(эмуляция параметра в URL). Action
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Action
__construct() Конструктор Action

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
AddEvent() Добавляет евент в экшен Action
AddEventPreg() Добавляет евент в экшен, используя регулярное вырожение для евента и параметров Action
EventAccount() Форма смены пароля, емайла ActionSettings
EventCancelAvatar() Отмена ресайза аватарки, необходимо удалить временный файл ActionSettings
EventCancelFoto() Отмена ресайза фотки, необходимо удалить временный файл ActionSettings
EventInvite() Показ и обработка формы приглаешний ActionSettings
EventNotFound() Вызывается в том случаи если не найден евент который запросили через URL Action
EventProfile() Выводит форму для редактирования профиля и обрабатывает её ActionSettings
EventRemoveAvatar() Удаляет аватар ActionSettings
EventRemoveFoto() Удаляет фото ActionSettings
EventResizeAvatar() Вырезает из временной аватарки область нужного размера, ту что задал пользователь ActionSettings
EventResizeFoto() Вырезает из временной фотки область нужного размера, ту что задал пользователь ActionSettings
EventTuning() Дополнительные настройки сайта ActionSettings
EventUploadAvatar() Загрузка временной картинки для аватара ActionSettings
EventUploadFoto() Загрузка временной картинки фото для последущего ресайза ActionSettings
GetEventMatch() Возвращает элементы совпадения по регулярному выражению для евента Action
GetParamEventMatch() Возвращает элементы совпадения по регулярному выражению для параметров евента Action
RegisterEvent() Регистрация евентов ActionSettings
SetTemplate() Устанавливает какой шаблон выводить Action
SetTemplateAction() Устанавливает какой шаблон выводить Action

Property Details

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Текущий юзер

sMenuItemSelect property
protected string $sMenuItemSelect;

Какое меню активно

sMenuSubItemSelect property
protected string $sMenuSubItemSelect;

Какое подменю активно

Method Details

EventAccount() method
protected void EventAccount()
Source Code: /classes/actions/ActionSettings.class.php#448 (show)
protected function EventAccount() {
    
/**
     * Устанавливаем title страницы
     */
    
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_profile'));
    
$this->sMenuSubItemSelect='account';
    
/**
     * Если нажали кнопку "Сохранить"
     */
    
if (isPost('submit_account_edit')) {
        
$this->Security_ValidateSendForm();

        
$bError=false;
        
/**
         * Проверка мыла
         */
        
if (func_check(getRequest('mail'),'mail')) {
            if (
$oUserMail=$this->User_GetUserByMail(getRequest('mail')) and $oUserMail->getId()!=$this->oUserCurrent->getId()) {
                
$this->Message_AddError($this->Lang_Get('settings_profile_mail_error_used'),$this->Lang_Get('error'));
                
$bError=true;
            }
        } else {
            
$this->Message_AddError($this->Lang_Get('settings_profile_mail_error'),$this->Lang_Get('error'));
            
$bError=true;
        }
        
/**
         * Проверка на смену пароля
         */
        
if (getRequest('password','')!='') {
            if (
func_check(getRequest('password'),'password',5)) {
                if (
getRequest('password')==getRequest('password_confirm')) {
                    if (
func_encrypt(getRequest('password_now'))==$this->oUserCurrent->getPassword()) {
                        
$this->oUserCurrent->setPassword(func_encrypt(getRequest('password')));
                    } else {
                        
$bError=true;
                        
$this->Message_AddError($this->Lang_Get('settings_profile_password_current_error'),$this->Lang_Get('error'));
                    }
                } else {
                    
$bError=true;
                    
$this->Message_AddError($this->Lang_Get('settings_profile_password_confirm_error'),$this->Lang_Get('error'));
                }
            } else {
                
$bError=true;
                
$this->Message_AddError($this->Lang_Get('settings_profile_password_new_error'),$this->Lang_Get('error'));
            }
        }
        
/**
         * Ставим дату последнего изменения
         */
        
$this->oUserCurrent->setProfileDate(date("Y-m-d H:i:s"));
        
/**
         * Запускаем выполнение хуков
         */
        
$this->Hook_Run('settings_account_save_before', array('oUser'=>$this->oUserCurrent,'bError'=>&$bError));
        
/**
         * Сохраняем изменения
         */
        
if (!$bError) {
            if (
$this->User_Update($this->oUserCurrent)) {
                
$this->Message_AddNoticeSingle($this->Lang_Get('settings_account_submit_ok'));
                
/**
                 * Подтверждение смены емайла
                 */
                
if (getRequest('mail') and getRequest('mail')!=$this->oUserCurrent->getMail()) {
                    if (
$oChangemail=$this->User_MakeUserChangemail($this->oUserCurrent,getRequest('mail'))) {
                        if (
$oChangemail->getMailFrom()) {
                            
$this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_from_notice'));
                        } else {
                            
$this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_to_notice'));
                        }
                    }
                }

                
$this->Hook_Run('settings_account_save_after', array('oUser'=>$this->oUserCurrent));
            } else {
                
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
            }
        }
    }
}

Форма смены пароля, емайла

EventCancelAvatar() method
protected void EventCancelAvatar()
Source Code: /classes/actions/ActionSettings.class.php#335 (show)
protected function EventCancelAvatar() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Достаем из сессии файл и удаляем
     */
    
$sFileAvatar=$this->Session_Get('sAvatarFileTmp');
    
$this->Image_RemoveFile($sFileAvatar);
    
$this->Session_Drop('sAvatarFileTmp');
}

Отмена ресайза аватарки, необходимо удалить временный файл

EventCancelFoto() method
protected void EventCancelFoto()
Source Code: /classes/actions/ActionSettings.class.php#212 (show)
protected function EventCancelFoto() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Достаем из сессии файл и удаляем
     */
    
$sFile=$this->Session_Get('sFotoFileTmp');
    
$this->Image_RemoveFile($sFile);

    
$sFile=$this->Session_Get('sFotoFilePreviewTmp');
    
$this->Image_RemoveFile($sFile);
    
/**
     * Удаляем из сессии
     */
    
$this->Session_Drop('sFotoFileTmp');
    
$this->Session_Drop('sFotoFilePreviewTmp');
}

Отмена ресайза фотки, необходимо удалить временный файл

EventInvite() method
protected void EventInvite()
Source Code: /classes/actions/ActionSettings.class.php#395 (show)
protected function EventInvite() {
    
/**
     * Только при активном режиме инвайтов
     */
    
if (!Config::Get('general.reg.invite')) {
        return 
parent::EventNotFound();
    }

    
$this->sMenuItemSelect='invite';
    
$this->sMenuSubItemSelect='';
    
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_invite'));
    
/**
     * Если отправили форму
     */
    
if (isPost('submit_invite')) {
        
$this->Security_ValidateSendForm();

        
$bError=false;
        
/**
         * Есть права на отправку инфайтов?
         */
        
if (!$this->ACL_CanSendInvite($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
            
$this->Message_AddError($this->Lang_Get('settings_invite_available_no'),$this->Lang_Get('error'));
            
$bError=true;
        }
        
/**
         * Емайл корректен?
         */
        
if (!func_check(getRequest('invite_mail'),'mail')) {
            
$this->Message_AddError($this->Lang_Get('settings_invite_mail_error'),$this->Lang_Get('error'));
            
$bError=true;
        }
        
/**
         * Запускаем выполнение хуков
         */
        
$this->Hook_Run('settings_invate_send_before', array('oUser'=>$this->oUserCurrent));
        
/**
         * Если нет ошибок, то отправляем инвайт
         */
        
if (!$bError) {
            
$oInvite=$this->User_GenerateInvite($this->oUserCurrent);
            
$this->Notify_SendInvite($this->oUserCurrent,getRequest('invite_mail'),$oInvite);
            
$this->Message_AddNoticeSingle($this->Lang_Get('settings_invite_submit_ok'));
            
$this->Hook_Run('settings_invate_send_after', array('oUser'=>$this->oUserCurrent));
        }
    }

    
$this->Viewer_Assign('iCountInviteAvailable',$this->User_GetCountInviteAvailable($this->oUserCurrent));
    
$this->Viewer_Assign('iCountInviteUsed',$this->User_GetCountInviteUsed($this->oUserCurrent->getId()));
}

Показ и обработка формы приглаешний

EventProfile() method
protected void EventProfile()
Source Code: /classes/actions/ActionSettings.class.php#532 (show)
protected function EventProfile() {
    
/**
     * Устанавливаем title страницы
     */
    
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_profile'));
    
$this->Viewer_Assign('aUserFields',$this->User_getUserFields(''));
    
$this->Viewer_Assign('aUserFieldsContact',$this->User_getUserFields(array('contact','social')));
    
/**
     * Загружаем в шаблон JS текстовки
     */
    
$this->Lang_AddLangJs(array(
                              
'settings_profile_field_error_max'
                          
));
    
/**
     * Если нажали кнопку "Сохранить"
     */
    
if (isPost('submit_profile_edit')) {
        
$this->Security_ValidateSendForm();

        
$bError=false;
        
/**
         * Заполняем профиль из полей формы
         */
        /**
         * Определяем гео-объект
         */
        
if (getRequest('geo_city')) {
            
$oGeoObject=$this->Geo_GetGeoObject('city',getRequest('geo_city'));
        } elseif (
getRequest('geo_region')) {
            
$oGeoObject=$this->Geo_GetGeoObject('region',getRequest('geo_region'));
        } elseif (
getRequest('geo_country')) {
            
$oGeoObject=$this->Geo_GetGeoObject('country',getRequest('geo_country'));
        } else {
            
$oGeoObject=null;
        }
        
/**
         * Проверяем имя
         */
        
if (func_check(getRequest('profile_name'),'text',2,Config::Get('module.user.name_max'))) {
            
$this->oUserCurrent->setProfileName(getRequest('profile_name'));
        } else {
            
$this->oUserCurrent->setProfileName(null);
        }
        
/**
         * Проверяем пол
         */
        
if (in_array(getRequest('profile_sex'),array('man','woman','other'))) {
            
$this->oUserCurrent->setProfileSex(getRequest('profile_sex'));
        } else {
            
$this->oUserCurrent->setProfileSex('other');
        }
        
/**
         * Проверяем дату рождения
         */
        
if (func_check(getRequest('profile_birthday_day'),'id',1,2) and func_check(getRequest('profile_birthday_month'),'id',1,2) and func_check(getRequest('profile_birthday_year'),'id',4,4)) {
            
$this->oUserCurrent->setProfileBirthday(date("Y-m-d H:i:s",mktime(0,0,0,getRequest('profile_birthday_month'),getRequest('profile_birthday_day'),getRequest('profile_birthday_year'))));
        } else {
            
$this->oUserCurrent->setProfileBirthday(null);
        }
        
/**
         * Проверяем информацию о себе
         */
        
if (func_check(getRequest('profile_about'),'text',1,3000)) {
            
$this->oUserCurrent->setProfileAbout($this->Text_Parser(getRequest('profile_about')));
        } else {
            
$this->oUserCurrent->setProfileAbout(null);
        }
        
/**
         * Ставим дату последнего изменения профиля
         */
        
$this->oUserCurrent->setProfileDate(date("Y-m-d H:i:s"));
        
/**
         * Запускаем выполнение хуков
         */
        
$this->Hook_Run('settings_profile_save_before', array('oUser'=>$this->oUserCurrent,'bError'=>&$bError));
        
/**
         * Сохраняем изменения профиля
         */
        
if (!$bError) {
            if (
$this->User_Update($this->oUserCurrent)) {
                
/**
                 * Создаем связь с гео-объектом
                 */
                
if ($oGeoObject) {
                    
$this->Geo_CreateTarget($oGeoObject,'user',$this->oUserCurrent->getId());
                    if (
$oCountry=$oGeoObject->getCountry()) {
                        
$this->oUserCurrent->setProfileCountry($oCountry->getName());
                    } else {
                        
$this->oUserCurrent->setProfileCountry(null);
                    }
                    if (
$oRegion=$oGeoObject->getRegion()) {
                        
$this->oUserCurrent->setProfileRegion($oRegion->getName());
                    } else {
                        
$this->oUserCurrent->setProfileRegion(null);
                    }
                    if (
$oCity=$oGeoObject->getCity()) {
                        
$this->oUserCurrent->setProfileCity($oCity->getName());
                    } else {
                        
$this->oUserCurrent->setProfileCity(null);
                    }
                } else {
                    
$this->Geo_DeleteTargetsByTarget('user',$this->oUserCurrent->getId());
                    
$this->oUserCurrent->setProfileCountry(null);
                    
$this->oUserCurrent->setProfileRegion(null);
                    
$this->oUserCurrent->setProfileCity(null);
                }
                
$this->User_Update($this->oUserCurrent);

                
/**
                 * Обрабатываем дополнительные поля, type = ''
                 */
                
$aFields $this->User_getUserFields('');
                
$aData = array();
                foreach (
$aFields as $iId => $aField) {
                    if (isset(
$_REQUEST['profile_user_field_'.$iId])) {
                        
$aData[$iId] = (string)getRequest('profile_user_field_'.$iId);
                    }
                }
                
$this->User_setUserFieldsValues($this->oUserCurrent->getId(), $aData);
                
/**
                 * Динамические поля контактов, type = array('contact','social')
                 */
                
$aType=array('contact','social');
                
$aFields $this->User_getUserFields($aType);
                
/**
                 * Удаляем все поля с этим типом
                 */
                
$this->User_DeleteUserFieldValues($this->oUserCurrent->getId(),$aType);
                
$aFieldsContactType=getRequest('profile_user_field_type');
                
$aFieldsContactValue=getRequest('profile_user_field_value');
                if (
is_array($aFieldsContactType)) {
                    foreach(
$aFieldsContactType as $k=>$v) {
                        if (isset(
$aFields[$v]) and isset($aFieldsContactValue[$k]) and is_string($aFieldsContactValue[$k])) {
                            
$this->User_setUserFieldsValues($this->oUserCurrent->getId(), array($v=>$aFieldsContactValue[$k]), Config::Get('module.user.userfield_max_identical'));
                        }
                    }
                }
                
$this->Message_AddNoticeSingle($this->Lang_Get('settings_profile_submit_ok'));
                
$this->Hook_Run('settings_profile_save_after', array('oUser'=>$this->oUserCurrent));
            } else {
                
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
            }
        }
    }
    
/**
     * Загружаем гео-объект привязки
     */
    
$oGeoTarget=$this->Geo_GetTargetByTarget('user',$this->oUserCurrent->getId());
    
$this->Viewer_Assign('oGeoTarget',$oGeoTarget);
    
/**
     * Загружаем в шаблон список стран, регионов, городов
     */
    
$aCountries=$this->Geo_GetCountries(array(),array('sort'=>'asc'),1,300);
    
$this->Viewer_Assign('aGeoCountries',$aCountries['collection']);
    if (
$oGeoTarget) {
        if (
$oGeoTarget->getCountryId()) {
            
$aRegions=$this->Geo_GetRegions(array('country_id'=>$oGeoTarget->getCountryId()),array('sort'=>'asc'),1,500);
            
$this->Viewer_Assign('aGeoRegions',$aRegions['collection']);
        }
        if (
$oGeoTarget->getRegionId()) {
            
$aCities=$this->Geo_GetCities(array('region_id'=>$oGeoTarget->getRegionId()),array('sort'=>'asc'),1,500);
            
$this->Viewer_Assign('aGeoCities',$aCities['collection']);
        }
    }

}

Выводит форму для редактирования профиля и обрабатывает её

EventRemoveAvatar() method
protected void EventRemoveAvatar()
Source Code: /classes/actions/ActionSettings.class.php#315 (show)
protected function EventRemoveAvatar() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Удаляем
     */
    
$this->User_DeleteAvatar($this->oUserCurrent);
    
$this->oUserCurrent->setProfileAvatar(null);
    
$this->User_Update($this->oUserCurrent);
    
/**
     * Возвращает дефолтную аватарку
     */
    
$this->Viewer_AssignAjax('sFile',$this->oUserCurrent->getProfileAvatarPath(100));
    
$this->Viewer_AssignAjax('sTitleUpload',$this->Lang_Get('settings_profile_avatar_upload'));
}

Удаляет аватар

EventRemoveFoto() method
protected void EventRemoveFoto()
Source Code: /classes/actions/ActionSettings.class.php#192 (show)
protected function EventRemoveFoto() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Удаляем
     */
    
$this->User_DeleteFoto($this->oUserCurrent);
    
$this->oUserCurrent->setProfileFoto(null);
    
$this->User_Update($this->oUserCurrent);
    
/**
     * Возвращает дефолтную аватарку
     */
    
$this->Viewer_AssignAjax('sFile',$this->oUserCurrent->getProfileFotoDefault());
    
$this->Viewer_AssignAjax('sTitleUpload',$this->Lang_Get('settings_profile_photo_upload'));
}

Удаляет фото

EventResizeAvatar() method
protected void EventResizeAvatar()
Source Code: /classes/actions/ActionSettings.class.php#268 (show)
protected function EventResizeAvatar() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Получаем файл из сессии
     */
    
$sFileAvatar=$this->Session_Get('sAvatarFileTmp');
    if (!
file_exists($sFileAvatar)) {
        
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
        return;
    }
    
/**
     * Получаем размер области из параметров
     */
    
$aSize=array();
    
$aSizeTmp=getRequest('size');
    if (isset(
$aSizeTmp['x']) and is_numeric($aSizeTmp['x'])
        and isset(
$aSizeTmp['y']) and is_numeric($aSizeTmp['y'])
            and isset(
$aSizeTmp['x2']) and is_numeric($aSizeTmp['x2'])
                and isset(
$aSizeTmp['y2']) and is_numeric($aSizeTmp['y2'])) {
        
$aSize=array('x1'=>$aSizeTmp['x'],'y1'=>$aSizeTmp['y'],'x2'=>$aSizeTmp['x2'],'y2'=>$aSizeTmp['y2']);
    }
    
/**
     * Вырезаем аватарку
     */
    
if ($sFileWeb=$this->User_UploadAvatar($sFileAvatar,$this->oUserCurrent,$aSize)) {
        
/**
         * Удаляем старые аватарки
         */
        
if ($sFileWeb!=$this->oUserCurrent->getProfileAvatar()) {
            
$this->User_DeleteAvatar($this->oUserCurrent);
        }
        
$this->oUserCurrent->setProfileAvatar($sFileWeb);

        
$this->User_Update($this->oUserCurrent);
        
$this->Session_Drop('sAvatarFileTmp');
        
$this->Viewer_AssignAjax('sFile',$this->oUserCurrent->getProfileAvatarPath(100));
        
$this->Viewer_AssignAjax('sTitleUpload',$this->Lang_Get('settings_profile_avatar_change'));
    } else {
        
$this->Message_AddError($this->Lang_Get('settings_profile_avatar_error'),$this->Lang_Get('error'));
    }
}

Вырезает из временной аватарки область нужного размера, ту что задал пользователь

EventResizeFoto() method
protected void EventResizeFoto()
Source Code: /classes/actions/ActionSettings.class.php#132 (show)
protected function EventResizeFoto() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('json');
    
/**
     * Достаем из сессии временный файл
     */
    
$sFile=$this->Session_Get('sFotoFileTmp');
    
$sFilePreview=$this->Session_Get('sFotoFilePreviewTmp');
    if (!
file_exists($sFile)) {
        
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
        return;
    }
    
/**
     * Определяем размер большого фото для подсчета множителя пропорции
     */
    
$fRation=1;
    if (
$aSizeFile=getimagesize($sFile) and isset($aSizeFile[0])) {
        
$fRation=$aSizeFile[0]/200// 200 - размер превью по которой пользователь определяет область для ресайза
        
if ($fRation<1) {
            
$fRation=1;
        }
    }
    
/**
     * Получаем размер области из параметров
     */
    
$aSize=array();
    
$aSizeTmp=getRequest('size');
    if (isset(
$aSizeTmp['x']) and is_numeric($aSizeTmp['x'])
        and isset(
$aSizeTmp['y']) and is_numeric($aSizeTmp['y'])
            and isset(
$aSizeTmp['x2']) and is_numeric($aSizeTmp['x2'])
                and isset(
$aSizeTmp['y2']) and is_numeric($aSizeTmp['y2'])) {
        
$aSize=array('x1'=>round($fRation*$aSizeTmp['x']),'y1'=>round($fRation*$aSizeTmp['y']),'x2'=>round($fRation*$aSizeTmp['x2']),'y2'=>round($fRation*$aSizeTmp['y2']));
    }
    
/**
     * Вырезаем аватарку
     */
    
if ($sFileWeb=$this->User_UploadFoto($sFile,$this->oUserCurrent,$aSize)) {
        
/**
         * Удаляем старые аватарки
         */
        
$this->oUserCurrent->setProfileFoto($sFileWeb);
        
$this->User_Update($this->oUserCurrent);

        
$this->Image_RemoveFile($sFilePreview);
        
/**
         * Удаляем из сессии
         */
        
$this->Session_Drop('sFotoFileTmp');
        
$this->Session_Drop('sFotoFilePreviewTmp');
        
$this->Viewer_AssignAjax('sFile',$this->oUserCurrent->getProfileFoto());
        
$this->Viewer_AssignAjax('sTitleUpload',$this->Lang_Get('settings_profile_photo_change'));
    } else {
        
$this->Message_AddError($this->Lang_Get('settings_profile_avatar_error'),$this->Lang_Get('error'));
    }
}

Вырезает из временной фотки область нужного размера, ту что задал пользователь

EventShutdown() method
public void EventShutdown()
Source Code: /classes/actions/ActionSettings.class.php#702 (show)
public function EventShutdown() {
    
$iCountTopicFavourite=$this->Topic_GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId());
    
$iCountTopicUser=$this->Topic_GetCountTopicsPersonalByUser($this->oUserCurrent->getId(),1);
    
$iCountCommentUser=$this->Comment_GetCountCommentsByUserId($this->oUserCurrent->getId(),'topic');
    
$iCountCommentFavourite=$this->Comment_GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId());
    
$iCountNoteUser=$this->User_GetCountUserNotesByUserId($this->oUserCurrent->getId());

    
$this->Viewer_Assign('oUserProfile',$this->oUserCurrent);
    
$this->Viewer_Assign('iCountWallUser',$this->Wall_GetCountWall(array('wall_user_id'=>$this->oUserCurrent->getId(),'pid'=>null)));
    
/**
     * Общее число публикация и избранного
     */
    
$this->Viewer_Assign('iCountCreated',$iCountNoteUser+$iCountTopicUser+$iCountCommentUser);
    
$this->Viewer_Assign('iCountFavourite',$iCountCommentFavourite+$iCountTopicFavourite);
    
$this->Viewer_Assign('iCountFriendsUser',$this->User_GetCountUsersFriend($this->oUserCurrent->getId()));

    
/**
     * Загружаем в шаблон необходимые переменные
     */
    
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
    
$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);

    
$this->Hook_Run('action_shutdown_settings');
}

Выполняется при завершении работы экшена

EventTuning() method
protected void EventTuning()
Source Code: /classes/actions/ActionSettings.class.php#350 (show)
protected function EventTuning() {
    
$this->sMenuItemSelect='settings';
    
$this->sMenuSubItemSelect='tuning';

    
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_tuning'));
    
$aTimezoneList=array('-12','-11','-10','-9.5','-9','-8','-7','-6','-5','-4.5','-4','-3.5','-3','-2','-1','0','1','2','3','3.5','4','4.5','5','5.5','5.75','6','6.5','7','8','8.75','9','9.5','10','10.5','11','11.5','12','12.75','13','14');
    
$this->Viewer_Assign('aTimezoneList',$aTimezoneList);
    
/**
     * Если отправили форму с настройками - сохраняем
     */
    
if (isPost('submit_settings_tuning')) {
        
$this->Security_ValidateSendForm();

        if (
in_array(getRequest('settings_general_timezone'),$aTimezoneList)) {
            
$this->oUserCurrent->setSettingsTimezone(getRequest('settings_general_timezone'));
        }

        
$this->oUserCurrent->setSettingsNoticeNewTopicgetRequest('settings_notice_new_topic') ? );
        
$this->oUserCurrent->setSettingsNoticeNewCommentgetRequest('settings_notice_new_comment') ? );
        
$this->oUserCurrent->setSettingsNoticeNewTalkgetRequest('settings_notice_new_talk') ? );
        
$this->oUserCurrent->setSettingsNoticeReplyCommentgetRequest('settings_notice_reply_comment') ? );
        
$this->oUserCurrent->setSettingsNoticeNewFriendgetRequest('settings_notice_new_friend') ? );
        
$this->oUserCurrent->setProfileDate(date("Y-m-d H:i:s"));
        
/**
         * Запускаем выполнение хуков
         */
        
$this->Hook_Run('settings_tuning_save_before', array('oUser'=>$this->oUserCurrent));
        if (
$this->User_Update($this->oUserCurrent)) {
            
$this->Message_AddNoticeSingle($this->Lang_Get('settings_tuning_submit_ok'));
            
$this->Hook_Run('settings_tuning_save_after', array('oUser'=>$this->oUserCurrent));
        } else {
            
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
        }
    } else {
        if (
is_null($this->oUserCurrent->getSettingsTimezone())) {
            
$_REQUEST['settings_general_timezone']=(strtotime(date("Y-m-d H:i:s"))-strtotime(gmdate("Y-m-d H:i:s")))/3600 date('I');
        } else {
            
$_REQUEST['settings_general_timezone']=$this->oUserCurrent->getSettingsTimezone();
        }
    }
}

Дополнительные настройки сайта

EventUploadAvatar() method
protected void EventUploadAvatar()
Source Code: /classes/actions/ActionSettings.class.php#234 (show)
protected function EventUploadAvatar() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('jsonIframe',false);

    if(!isset(
$_FILES['avatar']['tmp_name'])) {
        return 
false;
    }
    
/**
     * Копируем загруженный файл
     */
    
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
    if (!
move_uploaded_file($_FILES['avatar']['tmp_name'],$sFileTmp)) {
        return 
false;
    }
    
/**
     * Ресайзим и сохраняем уменьшенную копию
     */
    
$sDir=Config::Get('path.uploads.images')."/tmp/avatars/{$this->oUserCurrent->getId()}";
    if (
$sFileAvatar=$this->Image_Resize($sFileTmp,$sDir,'original',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),200,null,true)) {
        
/**
         * Зписываем в сессию
         */
        
$this->Session_Set('sAvatarFileTmp',$sFileAvatar);
        
$this->Viewer_AssignAjax('sTmpFile',$this->Image_GetWebPath($sFileAvatar));
    } else {
        
$this->Message_AddError($this->Image_GetLastError(),$this->Lang_Get('error'));
    }
    
unlink($sFileTmp);
}

Загрузка временной картинки для аватара

EventUploadFoto() method
protected void EventUploadFoto()
Source Code: /classes/actions/ActionSettings.class.php#93 (show)
protected function EventUploadFoto() {
    
/**
     * Устанавливаем формат Ajax ответа
     */
    
$this->Viewer_SetResponseAjax('jsonIframe',false);

    if(!isset(
$_FILES['foto']['tmp_name'])) {
        return 
false;
    }
    
/**
     * Копируем загруженный файл
     */
    
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
    if (!
move_uploaded_file($_FILES['foto']['tmp_name'],$sFileTmp)) {
        return 
false;
    }
    
/**
     * Ресайзим и сохраняем именьшенную копию
     * Храним две копии - мелкую для показа пользователю и крупную в качестве исходной для ресайза
     */
    
$sDir=Config::Get('path.uploads.images')."/tmp/fotos/{$this->oUserCurrent->getId()}";
    if (
$sFile=$this->Image_Resize($sFileTmp,$sDir,'original',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),1000,null,true)) {
        if (
$sFilePreview=$this->Image_Resize($sFileTmp,$sDir,'preview',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),200,null,true)) {
            
/**
             * Сохраняем в сессии временный файл с изображением
             */
            
$this->Session_Set('sFotoFileTmp',$sFile);
            
$this->Session_Set('sFotoFilePreviewTmp',$sFilePreview);
            
$this->Viewer_AssignAjax('sTmpFile',$this->Image_GetWebPath($sFilePreview));
            
unlink($sFileTmp);
            return;
        }
    }
    
$this->Message_AddError($this->Image_GetLastError(),$this->Lang_Get('error'));
    
unlink($sFileTmp);
}

Загрузка временной картинки фото для последущего ресайза

Init() method
public void Init()
Source Code: /classes/actions/ActionSettings.class.php#48 (show)
public function Init() {
    
/**
     * Проверяем авторизован ли юзер
     */
    
if (!$this->User_IsAuthorization()) {
        
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
        return 
Router::Action('error');
    }
    
/**
     * Получаем текущего юзера
     */
    
$this->oUserCurrent=$this->User_GetUserCurrent();
    
$this->SetDefaultEvent('profile');
    
/**
     * Устанавливаем title страницы
     */
    
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu'));
}

Инициализация

RegisterEvent() method
protected void RegisterEvent()
Source Code: /classes/actions/ActionSettings.class.php#69 (show)
protected function RegisterEvent() {
    
$this->AddEventPreg('/^profile$/i','/^upload-avatar/i','/^$/i','EventUploadAvatar');
    
$this->AddEventPreg('/^profile$/i','/^resize-avatar/i','/^$/i','EventResizeAvatar');
    
$this->AddEventPreg('/^profile$/i','/^remove-avatar/i','/^$/i','EventRemoveAvatar');
    
$this->AddEventPreg('/^profile$/i','/^cancel-avatar/i','/^$/i','EventCancelAvatar');
    
$this->AddEventPreg('/^profile$/i','/^upload-foto/i','/^$/i','EventUploadFoto');
    
$this->AddEventPreg('/^profile$/i','/^resize-foto/i','/^$/i','EventResizeFoto');
    
$this->AddEventPreg('/^profile$/i','/^remove-foto/i','/^$/i','EventRemoveFoto');
    
$this->AddEventPreg('/^profile$/i','/^cancel-foto/i','/^$/i','EventCancelFoto');
    
$this->AddEvent('profile','EventProfile');
    
$this->AddEvent('invite','EventInvite');
    
$this->AddEvent('tuning','EventTuning');
    
$this->AddEvent('account','EventAccount');
}

Регистрация евентов