File: D:/HostingSpaces/SBogers10/base.komma.pro/vendor/komma/kms/src/Users/Kms/KmsUserSection.php
<?php
namespace Komma\KMS\Users\Kms;
use Komma\KMS\Auth\AuthValidationHelper;
use Komma\KMS\Core\Attributes\PasswordMailTypes;
use Komma\KMS\Core\Attributes\View;
use Komma\KMS\Globalization\RegionInfo;
use Komma\KMS\Core\Attributes\Documents;
use Komma\KMS\Core\Attributes\SendPasswordMail;
use Komma\KMS\Core\Attributes\Attribute;
use Komma\KMS\Core\Attributes\Models\ImageProperty;
use Komma\KMS\Core\Attributes\Models\SelectOption;
use Komma\KMS\Core\Attributes\Password;
use Komma\KMS\Core\Attributes\Select;
use Komma\KMS\Core\Attributes\TextField;
use Komma\KMS\Core\Sections\Section;
use Komma\KMS\Users\Genders;
use Komma\KMS\Users\Models\KmsUserRole;
use Komma\KMS\Users\Models\KmsUser;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Validation\Rule;
final class KmsUserSection extends Section
{
public function defineAttributesAndTabs(Model $currentModel = null): void
{
$this->tabs->makeTab()->addItems([
(new Documents())
->setReference('user')
->setLabelText(__('KMS::global.image'))
->onlyAllowImages()
->setMaxDocuments(1)
->setSmallDragAndDropArea()
->setSubFolder('users')
->setImageProperties([
(new ImageProperty())->setName('small')->setCropMethod(ImageProperty::Resize)->setWidth(300),
]),
(new TextField())
->setReference('first_name')
->setLabelText(__('KMS::global.first_name'))
->setReadOnly(false),
(new TextField())
->setReference('last_name')
->setLabelText(__('KMS::global.last_name'))
->setReadOnly(false),
(new TextField())
->setReference('email')
->setLabelText(__('KMS::global.email'))
->setReadOnly(false)
->setRules([
'required',
'email',
Rule::unique('kms_users', 'email')->ignore(($currentModel) ? $currentModel->id : null)
])
->setMessages([
'email' => __('KMS::kms_users.enterValidEmailAddress'),
'unique' => __('KMS::kms_users.enterUniqueValue')
])
->mapValueFrom(Attribute::ValueFromModel, 'email')
]);
if($currentModel && $currentModel->exists && $currentModel->hasEmptyPassword()) {
$this->tabs->getTab()->addItem((new View())->setViewName('KMS::partials/entity.noPassword'));
}
else {
$passwordAttribute = (new Password())
->setReference(KmsUser::PASSWORD_COLUMN_NAME);
if(request()->get('Password-password') !== '') {
$passwordAttribute
->setRules(AuthValidationHelper::setRules()['password'])
->setMessages([
'required' => __('KMS::kms_users.enterPassword'),
'min' => __('KMS::kms_users.passwordMinLength'),
'regex' => __('KMS::kms_users.lowerCapitalNumber')
]);
}
$this->tabs->getTab()->addItem($passwordAttribute);
}
if($currentModel && $currentModel->exists) {
$this->tabs->getTab()->addItems([
new SendPasswordMail($currentModel, PasswordMailTypes::WELCOME),
new SendPasswordMail($currentModel, PasswordMailTypes::RESET)
]);
}
/** @var $regular Collection */
/** @var $hotlist Collection */
[$regular, $hotlist] = RegionInfo::getSpecificCultures()->sortBy(function(RegionInfo $regionInfo) {
return $regionInfo->getNativeName();
})->partition(function(RegionInfo $regionInfo) {
return (!in_array($regionInfo->getThreeLetterISORegionName(), config('languages.country_hotlist', []))); //Region infos that are in the hotlist will be put in the hotlist collection, the rest in the regular one.
});
$regionInfoOptions = $hotlist->merge($regular)->map(function(RegionInfo $regionInfo) {
return (new SelectOption())->setContent($regionInfo->getNativeName())->setHtmlContent($regionInfo->getNativeName())->setValue($regionInfo->getName());
})->toArray();
$regionSelect = (new Select())
->setReference('culture')
->setLabelText(__('KMS::kms_users.culture'))
->setItems($regionInfoOptions);
if(!$currentModel) $regionSelect->setValue('nl-NL');
$roleOptions = [];
$roles = KmsUserRole::getAsArray();
foreach($roles as $role) {
if (\Auth::user()->isAtLeast($role)) {
$roleOptions[] = (new SelectOption())->setContent(__('KMS::roles.'.$role))->setHtmlContent(__('KMS::roles.'.$role))->setValue($role);
}
}
$genderOptions = [];
collect(Genders::getAsArray())->each(function($gender) use (&$genderOptions) {
$genderOptions[] = (new SelectOption())->setContent(__('KMS::auth.genders.'.$gender))->setHtmlContent(__('KMS::auth.genders.'.$gender))->setValue($gender);
});
$this->tabs->getTab()->addItems([
(new Select())
->setReference('role')
->setLabelText(__('KMS::kms_users.role'))
->setItems($roleOptions)
->setPlaceholderText(__('KMS::kms_users.exampleRole')),
$regionSelect,
(new Select())
->setReference('gender')
->setLabelText(__('KMS::auth.gender'))
->setItems($genderOptions)
]);
}
}