Вход Регистрация
Файл: system/controllers/users/actions/profile_edit.php
Строк: 75
<?php

class actionUsersProfileEdit extends cmsAction {

    public function 
run($profile$do=false){

        if (!
cmsUser::isLogged()) { cmsCore::error404(); }
        
        
$user cmsUser::getInstance();

        
// если нужно, передаем управление другому экшену
        
if ($do){
            
$this->runAction('profile_edit_'.$do, array($profile) + array_slice($this->params2));
            return;
        }

        
// проверяем наличие доступа
        
if ($profile['id'] != $user->id && !$user->is_admin) { cmsCore::error404(); }

        
// Получаем поля
        
$content_model cmsCore::getModel('content');
        
$content_model->setTablePrefix('');
        
$content_model->orderBy('ordering');
        
$fields $content_model->getContentFields('users');

        
// Строим форму
        
$form = new cmsForm();

        
// Разбиваем поля по группам
        
$fieldsets cmsForm::mapFieldsToFieldsets($fields, function($field$user){

            
// проверяем что группа пользователя имеет доступ к редактированию этого поля
            
if ($field['groups_edit'] && !$user->isInGroups($field['groups_edit'])) { return false; }

            return 
true;

        });

        
// Добавляем поля в форму
        
foreach($fieldsets as $fieldset){

            
$fieldset_id $form->addFieldset($fieldset['title']);

            foreach(
$fieldset['fields'] as $field){

                
// добавляем поле в форму
                
$form->addField($fieldset_id$field['handler']);

            }

        }

        
// Добавляем поле выбора часового пояса
        
$config cmsConfig::getInstance();
        
$fieldset_id $form->addFieldsetLANG_TIME_ZONE );
        
$form->addField($fieldset_id, new fieldList('time_zone', array(
            
'default' => $config->time_zone,
            
'generator' => function($item){
                return 
cmsCore::getTimeZones();
            }
        )));

        
// Форма отправлена?
        
$is_submitted $this->request->has('submit');

        if (
$is_submitted){

            
// Парсим форму и получаем поля записи
            
$new $form->parse($this->request$is_submitted$profile);
            
$old $profile;
            
$profile array_merge($profile$new);

            
// Проверям правильность заполнения
            
$errors $form->validate($this,  $profile);

            if (!
$errors){
                
$is_allowed cmsEventsManager::hookAll('user_profile_update'$profiletrue);
                if (
$is_allowed !== true && in_array(false$is_allowed)) { $errors true; }
            }

            if (!
$errors){

                
// Обновляем профиль и редиректим на его просмотр
                
$this->model->updateUser($profile['id'], $profile);

                
// Отдельно обновляем часовой пояс в сессии
                
cmsUser::sessionSet('user_data:time_zone'$profile['time_zone']);
        
                
// Постим уведомление о смене аватара в ленту
                
if (!$this->model->isAvatarsEqual($new['avatar'], $old['avatar'])){
                    
$activity_controller cmsCore::getController('activity');
                    
$activity_controller->deleteEntry($this->name"avatar"$profile['id']);
                    if (!empty(
$new['avatar'])){
                        
$activity_controller->addEntry($this->name"avatar", array(
                            
'user_id' => $profile['id'],
                            
'subject_title' => $profile['nickname'],
                            
'subject_id' => $profile['id'],
                            
'subject_url' => href_to('users'$profile['id']),
                            
'is_private' => 0,
                            
'group_id' => null,
                            
'images' => array(
                                array(
                                    
'url' => href_to('users'$profile['id']),
                                    
'src' => html_image_src($new['avatar'], 'normal')
                                )
                            ),
                            
'images_count' => 1
                        
));
                    }
                }

                
$this->redirectTo('users'$profile['id']);

            }

            if (
$errors){
                
cmsUser::addSessionMessage(LANG_FORM_ERRORS'error');
            }

        }

        return 
cmsTemplate::getInstance()->render('profile_edit', array(
            
'do' => 'edit',
            
'id' => $profile['id'],
            
'profile' => $profile,
            
'form' => $form,
            
'errors' => isset($errors) ? $errors false
        
));

    }

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