/**
 * Генерирует форму редактирования пользователя в админ-панели.
 *
 * @param  $save_link Ссылка на обработчик формы (имя модуля и параметр action)
 * @param string $a Добавление или редавтирование пользователя (edit or add)
 * @param int $id Идентификатор пользователя
 * @param bool $isadmin Редактирование администратора (влияет на выборку и отключает активацию по email)
 * @param bool $EditProfile Редактирование своего профиля администратором (не может изменить свой статус если не системный администратор)
 * @return
 */
function AdminUserEditor($save_link, $a = 'add', $id = '0', $isadmin = false)
{
    $active = array(false, false, false);
    $SystemAdmin = System::user()->isSuperUser();
    $edit = $a == 'edit';
    $editProfile = $edit && !$SystemAdmin && $id == System::user()->Get('u_id');
    // Администратор редактирует свой профиль
    $editStatus = false;
    // Разрешено редактирование статуса
    $editType = false;
    // Разрешено редавтировать тип пользователя
    // Загружаем данные пользователя из БД
    if ($edit) {
        $user = System::database()->SelectOne('users', "`id`='{$id}'" . ($isadmin ? " and `type`='1'" : " and `type`='2'"));
        if (!$user) {
            AddTextBox('Ошибка', '<p align="center">Пользователь не найден, либо у вас не достаточно прав для редактирования администраторов.</p>');
            return;
        }
    }
    // Устатанавливаем ограничения доступа
    if ($isadmin) {
        // Редатируем администратора
        if ($SystemAdmin) {
            // Только системные администаторы могут редактировать статус и тип администраторов
            if (!(groupIsSystem(SafeEnv($user['access'], 11, int)) && GetSystemAdminsCount() <= 1)) {
                // Если он не системный или системных больше 1
                $editStatus = true;
            }
            $editType = $editStatus;
        }
    } else {
        // Если пользователь
        $editStatus = true;
        // Все администраторы с доступом могут редактировать статус пользователя
        $editType = $SystemAdmin;
        // Только системные администраторы могут создавать администраторов
    }
    if ($editType) {
        $user_types_db = System::database()->Select('usertypes');
        $types = array('member' => array('member', 'Пользователь', false));
        foreach ($user_types_db as $type) {
            $types[$type['id']] = array(SafeDB($type['id'], 11, int), SafeDB($type['name'], 255, str), false);
        }
    }
    if ($edit) {
        $login = SafeDB($user['login'], 30, str);
        $mail = SafeDB($user['email'], 50, str);
        $hideemail = $user['hideemail'] == 1 ? true : false;
        $snews = $user['servernews'] == 1 ? true : false;
        $name = SafeDB($user['name'], 50, str);
        $tname = SafeDB($user['truename'], 250, str);
        $age = SafeDB($user['age'], 11, str);
        $city = SafeDB($user['city'], 100, str);
        $url = SafeDB($user['url'], 250, str);
        $icq = SafeDB($user['icq'], 15, str);
        $gmt = SafeDB($user['timezone'], 255, str);
        $about = SafeDB($user['about'], 0, str);
        $avatar = SafeDB($user['avatar'], 250, str);
        $apersonal = SafeDB($user['a_personal'], 1, int);
        if ($editStatus) {
            if ($user['active'] == '1') {
                $active[0] = true;
            } elseif ($user['active'] == '0' && $user['activate'] == '') {
                $active[1] = true;
            } elseif ($user['active'] == '0' && $user['activate'] != '') {
                $active[2] = true;
            }
        }
        if ($editType) {
            if ($user['type'] == '1') {
                $types[$user['access']][2] = true;
            } else {
                $types['member'][2] = true;
                //пользователь
            }
        }
        $caption = 'Сохранить';
        if ($isadmin) {
            if ($editProfile) {
                $title = 'Редактирование профиля';
            } else {
                $title = 'Редактирование администратора';
            }
        } else {
            $title = 'Редактирование пользователя';
        }
    } else {
        $login = '';
        $mail = '';
        $snews = false;
        $hideemail = false;
        $name = '';
        $tname = '';
        $age = '';
        $city = '';
        $url = '';
        $icq = '';
        $gmt = System::config('general/default_timezone');
        $about = '';
        $avatar = '';
        $apersonal = '0';
        if ($editStatus) {
            $active[0] = true;
        }
        if ($editType) {
            $types['member'][2] = true;
        }
        $caption = 'Добавить';
        $title = 'Добавить пользователя';
    }
    FormRow('Логин', System::site()->Edit('login', $login, false, 'style="width:400px;" class="autofocus"'));
    FormRow('Пароль', System::site()->Edit('pass', '', true, 'style="width:400px;"'));
    FormRow('Повторите пароль<br /><small>(для проверки)</small>', System::site()->Edit('rpass', '', true, 'style="width:400px;"'));
    FormRow('E-mail', System::site()->Edit('email', $mail, false, 'style="width:300px;"') . ' <label for="hideemail">Скрыть</label>&nbsp;' . System::site()->Check('hideemail', '1', $hideemail, 'id="hideemail"'));
    FormRow('<label for="snews">Рассылка</label>', System::site()->Check('snews', '1', $snews, 'id="snews"'));
    FormRow('Ник', System::site()->Edit('nikname', $name, false, 'style="width:400px;"'));
    FormRow('Настоящее имя', System::site()->Edit('realname', $tname, false, 'style="width:400px;"'));
    FormRow('Возраст', System::site()->Edit('age', $age, false, 'style="width:400px;"'));
    FormRow('Город', System::site()->Edit('city', $city, false, 'style="width:400px;"'));
    FormRow('Сайт', System::site()->Edit('homepage', $url, false, 'style="width:400px;"'));
    FormRow('ICQ', System::site()->Edit('icq', $icq, false, 'style="width:400px;"'));
    $gmt = GetGmtData($gmt);
    FormRow('Часовой пояс', System::site()->Select('gmt', $gmt, false, 'style="width:400px;"'));
    FormRow('О себе', System::site()->TextArea('about', $about, 'style="width:400px; height:200px;"'));
    $avatars = GetGalleryAvatarsData($avatar, $apersonal);
    if ($apersonal == '1') {
        $selected = GetPersonalAvatar($id);
    } else {
        $selected = GetGalleryAvatar($avatars[1]);
    }
    System::site()->AddJS('
	ShowAvatar = function(){
		if(document.userform.avatar.value==\'\'){
			document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&user='******'general/personal_avatars_dir') . $avatar) . '\';
		}else{
			document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&aname=' : System::config('general/avatars_dir')) . '\'+document.userform.avatar.value;
		}
	}');
    FormRow('Аватар', System::site()->Select('avatar', $avatars[0], false, 'onchange="ShowAvatar();"'));
    FormRow('', '<img id="avatarview" src="' . $selected . '" border="0">');
    FormRow('Загрузить аватар', System::site()->FFile('upavatar'));
    if ($editStatus) {
        FormRow('Активация', System::site()->Radio('activate', 'auto', $active[0]) . 'Активировать' . System::site()->Radio('activate', 'manual', $active[1]) . 'Не активировать' . (!$isadmin ? System::site()->Radio('activate', 'mail', $active[2]) . 'По E-mail' : ''));
    }
    if ($editType) {
        $user_types = array();
        foreach ($types as $type) {
            System::site()->DataAdd($user_types, $type[0], $type[1], $type[2]);
        }
        FormRow('Статус', System::site()->Select('status', $user_types));
    }
    TAddSubTitle($title);
    AddCenterBox($title);
    AddForm('<form name="userform" action="' . ADMIN_FILE . '?exe=' . $save_link . '&id=' . $id . '" method="post"  enctype="multipart/form-data">', System::site()->Button('Отмена', 'onclick="history.go(-1);"') . System::site()->Submit($caption));
}
function IndexUserRegistration($acceptPost = false, $edit = false)
{
    if (!$edit) {
        System::user()->UnLogin(false);
    } else {
        if (!System::user()->Auth) {
            System::site()->Login();
            return;
        }
    }
    System::site()->AddJS(Indent('
		function checkData(f){
			if(f.login.value = \'\'){
				alert("Логин должен быть не менее ' . System::config('user/login_min_length') . ' и не более 15 символов.");
				f.login.focus();
				return false;
			}
		}
	'));
    if (!$edit && System::config('user/registration') == 'off') {
        System::site()->AddTextBox('Ошибка', '<p align="center">Извините, регистрация приостановлена.</p>');
        return;
    }
    if ($acceptPost) {
        AcceptPost($login, $pass, $rpass, $email, $hideemail, $nikname, $realname, $age, $homepage, $icq, $city, $avatar, $apersonal, $gmt, $about, $snews);
    } elseif ($edit) {
        GetEditUserData($login, $email, $hideemail, $nikname, $realname, $age, $homepage, $icq, $city, $avatar, $apersonal, $gmt, $about, $snews);
        $pass = '';
        $rpass = '';
    } else {
        $login = '';
        $pass = '';
        $rpass = '';
        $email = '';
        $hideemail = false;
        $nikname = '';
        $realname = '';
        $age = '';
        $homepage = '';
        $icq = '';
        $city = '';
        $avatar = 'noavatar.gif';
        $apersonal = '0';
        $gmt = System::config('general/default_timezone');
        $about = '';
        $snews = false;
    }
    //Генерируем текст формы
    System::site()->AddBlock('user_form', true, false, 'form');
    $vars = array();
    if ($edit) {
        $vars['action'] = 'update';
        $vars['laction'] = 'Сохранить';
        $topcaption = 'Данные пользователя';
    } else {
        $vars['action'] = 'create';
        $vars['laction'] = 'Зарегистрироваться';
        $topcaption = 'Регистрация';
    }
    $fields = explode(',', System::config('user/register_call_data'));
    //email,snews,realname,age,city,icq,gmt,about
    $activate = System::config('user/activate_type');
    //auto, mail, manual
    $vars['form_name'] = 'userform';
    $vars['url'] = Ufu('index.php?name=user&op=registration', 'user/{op}/');
    $vars['enctype'] = 'multipart/form-data';
    $vars['llogin'] = '******';
    $vars['login'] = $login;
    $vars['lpass'] = '******';
    $vars['pass'] = $pass;
    $vars['lrpass'] = '******';
    $vars['rpass'] = $rpass;
    $vars['lnikname'] = 'Ваше имя на сайте <font color="#FF0000">*</font>';
    $vars['nikname'] = $nikname;
    $vars['lrealname'] = 'Настоящее имя(Ф.И.О.)';
    $vars['realname'] = $realname;
    $vars['use_realname'] = in_array('realname', $fields) || $edit;
    $vars['lemail'] = 'E-mail <font color="#FF0000">*</font>';
    $vars['email'] = $email;
    $vars['lhideemail'] = 'Скрыть e-mail';
    $vars['hideemail'] = $hideemail ? ' checked="checked"' : '';
    $vars['use_email'] = in_array('email', $fields) || $activate == 'mail' || $edit;
    $vars['lage'] = 'Возраст';
    $vars['age'] = $age;
    $vars['use_age'] = in_array('age', $fields) || $edit;
    $vars['lhomepage'] = 'Сайт';
    $vars['homepage'] = $homepage;
    $vars['use_homepage'] = in_array('homepage', $fields) || $edit;
    $vars['licq'] = 'Номер ICQ';
    $vars['icq'] = $icq;
    $vars['use_icq'] = in_array('icq', $fields) || $edit;
    $vars['lcity'] = 'Город';
    $vars['city'] = $city;
    $vars['use_city'] = in_array('city', $fields) || $edit;
    $vars['lavatar'] = 'Аватар';
    $vars['lload_avatar'] = 'Загрузить аватар<br>(Размеры картинки могут быть автоматически уменьшены. Допустимые форматы: gif, jpeg, png.)';
    $vars['avatar_onchange_func'] = 'ShowAvatar()';
    $vars['avatar_filename'] = $avatar;
    $vars['use_avatar'] = in_array('avatar', $fields) || $edit;
    if ($vars['use_avatar']) {
        System::site()->AddBlock('avatars', true, true, 'avatar');
        $avatars = GetFiles(System::config('general/avatars_dir'), false, true, '.gif.jpg.jpeg.png');
        if ($apersonal == '1') {
            $selected = GetPersonalAvatar(System::user()->Get('u_id'));
        } elseif ($edit) {
            $selected = GetGalleryAvatar($avatar);
        } else {
            $selected = GetGalleryAvatar($avatars[1]);
        }
        if ($apersonal == '1') {
            System::site()->AddSubBlock('avatars', true, array('name' => '', 'caption' => 'Персональный', 'selected' => true));
        }
        for ($i = 0, $c = count($avatars); $i < $c; $i++) {
            $avars = array();
            $sel = $avatar == $avatars[$i];
            $avars['name'] = $avatars[$i];
            $avars['selected'] = $sel;
            $avars['caption'] = $avatars[$i];
            System::site()->AddSubBlock('avatars', true, $avars);
        }
        $vars['av_selected'] = $selected;
        System::site()->AddJS('
			function ShowAvatar(){
				if(document.userform.avatar.value==\'\'){
					document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&user='******'u_id') : System::config('general/personal_avatars_dir') . $avatar) . '\';
				}else{
					document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&aname=' : System::config('general/avatars_dir')) . '\'+document.userform.avatar.value;
				}
			}');
    }
    $vars['lgmt'] = 'Часовой пояс';
    $vars['use_gmt'] = in_array('gmt', $fields) || $edit;
    if ($vars['use_gmt']) {
        $gmtd = GetGmtArray();
        System::site()->AddBlock('gmt_data', true, true, 'gmt');
        for ($i = 0, $c = count($gmtd); $i < $c; $i++) {
            $gvars['name'] = $gmtd[$i][1];
            $gvars['caption'] = $gmtd[$i][0];
            $gvars['selected'] = $gmt == $gmtd[$i][1];
            System::site()->AddSubBlock('gmt_data', true, $gvars);
        }
    }
    $vars['labout'] = 'Немного о себе';
    $vars['about'] = $about;
    $vars['use_about'] = in_array('about', $fields) || $edit;
    $vars['kaptcha_url'] = 'index.php?name=plugins&p=antibot';
    $vars['kaptcha_width'] = '120';
    $vars['kaptcha_height'] = '40';
    $vars['lsnews'] = 'Разрешить администраторам сайта присылать Вам уведомления по электронной почте';
    $vars['snews'] = $snews ? ' checked="checked"' : '';
    $vars['use_snews'] = in_array('snews', $fields) || $edit;
    System::site()->AddTemplatedBox($topcaption, 'module/user_form.html');
    System::site()->SetTitle($topcaption);
    System::site()->Blocks['user_form']['vars'] = $vars;
}
    exit;
}
$user_id = null;
$avatar = '';
if (isset($_GET['user'])) {
    // Аватар из профиля пользователя
    $user_id = SafeEnv($_GET['user'], 11, int);
    $avatar = GetPersonalAvatar($user_id, true);
} elseif (isset($_GET['aname'])) {
    // Передано имя файла аватара в папке с аватарами
    $avatar = GetGalleryAvatar($_GET['aname']);
} else {
    System::log('Plugin::render_avatar Скрипт вызван без параметров.');
}
if ($avatar == '' || !is_file($avatar)) {
    $avatar = GetGalleryAvatar('noavatar.gif');
}
// Создаём уменьшенную копию аватара, если нужно и отправляем пользователю
if (isset($_GET['size'])) {
    switch ($_GET['size']) {
        case 'small':
            $avatar_64 = System::config('general/personal_avatars_dir') . GetFileName($avatar, true) . '_64x64' . GetFileExt($avatar);
            if (is_file($avatar_64)) {
                CreateThumb($avatar_64)->SendToHTTPClient();
            } else {
                CreateThumb($avatar, $avatar_64, 64, 64)->SendToHTTPClient();
            }
            break;
        case 'smallest':
            $avatar_24 = System::config('general/personal_avatars_dir') . GetFileName($avatar, true) . '_24x24' . GetFileExt($avatar);
            if (is_file($avatar_24)) {
 /**
  * Регистрирует данные неавторизованного пользователя.
  * @global type $config
  */
 public function RegisterGuestData()
 {
     $this->Auth = false;
     $this->Def('u_auth', false);
     $this->Def('u_level', '3');
     $this->Def('u_id', '0');
     $this->Def('u_access', '-1');
     $this->Def('u_ip', getip());
     $this->Def('u_avatar', GetGalleryAvatar('guest.gif'));
     $this->Def('u_data', array());
 }