2018-04-04

This commit is contained in:
Visman 2018-04-04 11:21:11 +07:00
parent e3501c5a9d
commit 326582ff78
4 changed files with 87 additions and 38 deletions

View file

@ -414,7 +414,7 @@ class Validator
*/
public function getData()
{
if (empty($this->result)) {
if (empty($this->status)) {
throw new RuntimeException('Data not found');
}
return $this->result;

View file

@ -16,6 +16,7 @@ class DataModel extends Model
/**
* Устанавливает значения для свойств
* Флаги модификации свойст сброшены
*
* @param array $attrs
*
@ -30,23 +31,24 @@ class DataModel extends Model
}
/**
* Перезапись свойст модели
* Перезаписывает свойства модели
* Флаги модификации свойств сбрасываются/устанавливаются в зависимости от второго параметра
*
* @param array $attrs
* @param bool $setFlags
*
* @return DataModel
*/
public function replAttrs(array $attrs)
public function replAttrs(array $attrs, $setFlags = false)
{
foreach ($attrs as $key => $val) {
$this->{'__' . $key} = $val; //????
// unset($this->aCalc['key']);
}
foreach ($attrs as $name => $value) {
$this->__set($name, $value);
$modified = \array_diff(\array_keys($this->modified), \array_keys($attrs));
$this->modified = [];
foreach ($modified as $key) {
$this->modified[$key] = true;
if (! $setFlags) {
// $this->modified[$name] = true;
// } else {
unset($this->modified[$name]);
}
}
return $this;

View file

@ -91,6 +91,42 @@ class Profile extends Page
$this->c->Lang->load('profile');
if ($isEdit && 'POST' === $method) {
if ($rules->rename) {
$ruleUsername = 'required|string:trim,spaces|min:2|max:25|login|check_username';
} else {
$ruleUsername = 'absent';
}
if ($rules->setTitle) {
$ruleTitle = 'string:trim|max:50|no_url';
} else {
$ruleTitle = 'absent';
}
if ($rules->useAvatar) {
$ruleAvatar = "image|max:{$this->c->Files->maxImgSize('K')}";
} else {
$ruleAvatar = 'absent';
}
if ($this->user->isAdmMod) {
$ruleAdminNote = 'string:trim|max:30';
} else {
$ruleAdminNote = 'absent';
}
if ($rules->editWebsite) {
$ruleWebsite = 'string:trim|max:100'; // ???? валидация url?
} else {
$ruleWebsite = 'absent';
}
if ($rules->useSignature) {
$ruleSignature = "string:trim|max:{$this->c->config->p_sig_length}|check_signature";
} else {
$ruleSignature = 'absent';
}
$v = $this->c->Validator->reset()
->addValidators([
'no_url' => [$this->c->Validators, 'vNoURL'],
@ -98,24 +134,38 @@ class Profile extends Page
'check_signature' => [$this, 'vCheckSignature'],
])->addRules([
'token' => 'token:EditUserProfile',
'username' => $rules->rename? 'required|string:trim,spaces|min:2|max:25|login|check_username' : 'absent',
'title' => $rules->setTitle ? 'string:trim|max:50|no_url' : 'absent',
'upload_avatar' => $rules->useAvatar ? "image|max:{$this->c->Files->maxImgSize('K')}" : 'absent',
'admin_note' => $this->user->isAdmMod ? 'string:trim|max:30' : 'absent',
'username' => $ruleUsername,
'title' => $ruleTitle,
'upload_avatar' => $ruleAvatar,
'admin_note' => $ruleAdminNote,
'realname' => 'string:trim|max:40|no_url',
'gender' => 'required|integer|in:0,1,2',
'location' => 'string:trim|max:30|no_url',
'email_setting' => 'required|integer|in:0,1,2',
'url' => $rules->editLinks ? 'string:trim|max:100' : 'absent',
'signature' => $rules->useSignature ? "string:trim|max:{$this->c->config->p_sig_length}|check_signature" : 'absent',
'url' => $ruleWebsite,
'signature' => $ruleSignature,
])->addAliases([
'username' => 'Username',
'title' => 'Title',
'upload_avatar' => 'New avatar',
'admin_note' => 'Admin note',
'realname' => 'Realname',
'gender' => 'Gender',
'location' => 'Location',
'email_setting' => 'Email settings label',
'url' => 'Website',
'signature' => 'Signature',
])->addArguments([
'token' => ['id' => $curUser->id],
'username.check_username' => $curUser,
])->addMessages([
]);
if ($v->validation($_FILES + $_POST)) {
$valid = $v->validation($_FILES + $_POST);
$data = $v->getData();
unset($data['token'], $data['upload_avatar']);
if ($valid) {
if ($v->upload_avatar instanceof Image) {
$curUser->deleteAvatar();
$v->upload_avatar
@ -125,19 +175,16 @@ class Profile extends Page
->toFile($this->c->DIR_PUBLIC . "{$this->c->config->o_avatars_dir}/{$curUser->id}.(jpg|png|gif)");
}
$data = $v->getData();
unset($data['token'], $data['upload_avatar']);
foreach ($data as $attr => $value) {
$curUser->$attr = $value;
}
$curUser->replAttrs($data, true);
$this->c->users->update($curUser);
return $this->c->Redirect->page('EditUserProfile', ['id' => $curUser->id])->message('Profile redirect');
}
} else {
$this->fIswev = $v->getErrors();
$this->fIswev = $v->getErrors();
$curUser->replAttrs($data);
}
}
$clSuffix = $isEdit ? '-edit' : '';
@ -175,7 +222,7 @@ class Profile extends Page
'caption' => \ForkBB\__('Username'),
'required' => true,
'pattern' => '^.{2,25}$',
'value' => isset($v->username) ? $v->username : $curUser->username,
'value' => $curUser->username,
];
} else {
$fields['username'] = [
@ -192,7 +239,7 @@ class Profile extends Page
'type' => 'text',
'maxlength' => 50,
'caption' => \ForkBB\__('Title'),
'value' => isset($v->title) ? $v->title : $curUser->title,
'value' => $curUser->title,
'info' => \ForkBB\__('Leave blank'),
];
} else {
@ -257,7 +304,7 @@ class Profile extends Page
'type' => 'text',
'maxlength' => 30,
'caption' => \ForkBB\__('Admin note'),
'value' => isset($v->admin_note) ? $v->admin_note : $curUser->admin_note,
'value' => $curUser->admin_note,
];
} elseif ('' != $curUser->admin_note) {
$fields['admin_note'] = [
@ -286,7 +333,7 @@ class Profile extends Page
'type' => 'text',
'maxlength' => 40,
'caption' => \ForkBB\__('Realname'),
'value' => isset($v->realname) ? $v->realname : $curUser->realname,
'value' => $curUser->realname,
];
} elseif ('' != $curUser->realname) {
$fields['realname'] = [
@ -307,7 +354,7 @@ class Profile extends Page
'id' => 'gender',
'class' => 'block',
'type' => 'radio',
'value' => isset($v->gender) ? $v->gender : $curUser->gender,
'value' => $curUser->gender,
'values' => $genders,
'caption' => \ForkBB\__('Gender'),
];
@ -326,7 +373,7 @@ class Profile extends Page
'type' => 'text',
'maxlength' => 30,
'caption' => \ForkBB\__('Location'),
'value' => isset($v->location) ? $v->location : $curUser->location,
'value' => $curUser->location,
];
} elseif ('' != $curUser->location) {
$fields['location'] = [
@ -384,7 +431,7 @@ class Profile extends Page
'id' => 'email_setting',
'class' => 'block',
'type' => 'radio',
'value' => isset($v->email_setting) ? $v->email_setting : $curUser->email_setting,
'value' => $curUser->email_setting,
'values' => [
0 => \ForkBB\__('Display e-mail label'),
1 => \ForkBB\__('Hide allow form label'),
@ -393,7 +440,7 @@ class Profile extends Page
'caption' => \ForkBB\__('Email settings label'),
];
}
if ($rules->editLinks && $isEdit) {
if ($rules->editWebsite && $isEdit) {
$fields['url'] = [
'id' => 'website',
'type' => 'text',
@ -401,7 +448,7 @@ class Profile extends Page
'caption' => \ForkBB\__('Website'),
'value' => isset($v->url) ? $v->url : $curUser->url,
];
} elseif ($rules->viewLinks && $curUser->url) {
} elseif ($rules->viewWebsite && $curUser->url) {
$fields['url'] = [
'id' => 'website',
'class' => 'pline',
@ -427,7 +474,7 @@ class Profile extends Page
$fields['signature'] = [
'id' => 'signature',
'type' => 'textarea',
'value' => isset($v->signature) ? $v->signature : $curUser->signature,
'value' => $curUser->signature,
'caption' => \ForkBB\__('Signature'),
'info' => \ForkBB\__('Sig max size', \ForkBB\num($this->c->config->p_sig_length), \ForkBB\num($this->c->config->p_sig_lines)),
];

View file

@ -88,12 +88,12 @@ class Profile extends Rules
return '1' == $this->c->config->o_signatures;
}
protected function getviewLinks()
protected function getviewWebsite()
{
return $this->user->isAdmMod || '1' == $this->curUser->g_post_links;
}
protected function geteditLinks()
protected function geteditWebsite()
{
return $this->admin || (($this->moderator || $this->my) && '1' == $this->user->g_post_links);
}