ActionSettings
Package | actions |
---|---|
Inheritance | class ActionSettings » Action » LsObject |
Since | 1.0 |
Source Code | /classes/actions/ActionSettings.class.php |
Экшен обрабтки настроек профиля юзера (/settings/)
Protected Properties
Property | Type | Description | Defined 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
Method | Description | Defined 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
Method | Description | Defined 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->setSettingsNoticeNewTopic( getRequest('settings_notice_new_topic') ? 1 : 0 );
$this->oUserCurrent->setSettingsNoticeNewComment( getRequest('settings_notice_new_comment') ? 1 : 0 );
$this->oUserCurrent->setSettingsNoticeNewTalk( getRequest('settings_notice_new_talk') ? 1 : 0 );
$this->oUserCurrent->setSettingsNoticeReplyComment( getRequest('settings_notice_reply_comment') ? 1 : 0 );
$this->oUserCurrent->setSettingsNoticeNewFriend( getRequest('settings_notice_new_friend') ? 1 : 0 );
$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');
}
Регистрация евентов