Ajout de nouveaux trucs pour les users #1

Merged
kazhnuz merged 6 commits from feat/new-user-stuff into koblog 2025-01-11 20:03:59 +01:00
9 changed files with 161 additions and 5 deletions

View file

@ -37,7 +37,10 @@ echo Bootstrap::formInputHidden(array(
<div class="tab-content" id="nav-tabContent">
<!-- Profile tab -->
<div class="tab-pane fade show active" id="profile" role="tabpanel" aria-labelledby="nav-profile-tab">
<?php
echo Bootstrap::formTitle(array('title' => $L->g('Base Infos')));
// Display username but disable the field
echo Bootstrap::formInputText(array(
'name' => 'usernameDisabled',
@ -69,6 +72,8 @@ echo Bootstrap::formInputHidden(array(
'tip' => ''
));
echo Bootstrap::formTitle(array('title' => $L->g('Name')));
echo Bootstrap::formInputText(array(
'name' => 'nickname',
'label' => $L->g('Nickname'),
@ -95,6 +100,44 @@ echo Bootstrap::formInputHidden(array(
'placeholder' => '',
'tip' => ''
));
echo Bootstrap::formSelect(array(
'name' => 'displayNameMode',
'label' => $L->g('Display Name'),
'options' => array('nickname' => $L->g('Nickname'), 'fullname' => $L->g('Full Name'), 'firstname' => $L->g('First Name')),
'selected' => $user->displayNameMode(),
'class' => '',
'tip' => $L->g('if-not-present-fallback-on-username')
));
echo Bootstrap::formTitle(array('title' => $L->g('More Infos')));
echo Bootstrap::formInputText(array(
'name' => 'pronouns',
'label' => $L->g(string: 'Pronouns'),
'value' => $user->pronouns(),
'class' => '',
'placeholder' => '',
'tip' => ''
));
echo Bootstrap::formTextarea(array(
'name' => 'description',
'label' => $L->g('Description'),
'value' => $user->description(),
'class' => '',
'placeholder' => '',
'tip' => ''
));
echo Bootstrap::formInputText(array(
'name' => 'homepage',
'label' => $L->g(string: 'Website'),
'value' => $user->homepage(),
'class' => '',
'placeholder' => '',
'tip' => ''
));
?>
</div>

View file

@ -484,6 +484,35 @@ echo Bootstrap::formInputHidden(array(
'placeholder' => '',
'tip' => $L->g('Thumbnail quality in percentage')
));
echo Bootstrap::formTitle(array('title' => $L->g('Avatar')));
echo Bootstrap::formInputText(array(
'name' => 'avatarWidth',
'label' => $L->g('Width'),
'value' => $site->avatarWidth(),
'class' => '',
'placeholder' => '',
'tip' => $L->g('Avatar width in pixels')
));
echo Bootstrap::formInputText(array(
'name' => 'avatarHeight',
'label' => $L->g('Height'),
'value' => $site->avatarHeight(),
'class' => '',
'placeholder' => '',
'tip' => $L->g('Avatar height in pixels')
));
echo Bootstrap::formInputText(array(
'name' => 'avatarQuality',
'label' => $L->g('Quality'),
'value' => $site->avatarQuality(),
'class' => '',
'placeholder' => '',
'tip' => $L->g('Avatar quality in percentage')
));
?>
</div>

View file

@ -54,10 +54,14 @@ $filename = $username.'.png';
// Move from temporary directory to uploads folder
rename($_FILES['profilePictureInputFile']['tmp_name'], PATH_TMP.$tmpFilename);
$avaWidth = $site->avatarWidth() ? $site->avatarWidth() : PROFILE_IMG_WIDTH;
$avaHeight = $site->avatarHeight() ? $site->avatarWidth() : PROFILE_IMG_HEIGHT;
$avaQuality = $site->avatarQuality() ? $site->avatarWidth() : PROFILE_IMG_QUALITY;
// Resize and convert to png
$image = new Image();
$image->setImage(PATH_TMP.$tmpFilename, PROFILE_IMG_WIDTH, PROFILE_IMG_HEIGHT, 'crop');
$image->saveImage(PATH_UPLOADS_PROFILES.$filename, PROFILE_IMG_QUALITY, false, true);
$image->setImage(PATH_TMP.$tmpFilename, $avaWidth, $avaHeight, 'crop');
$image->saveImage(PATH_UPLOADS_PROFILES.$filename, $avaQuality, false, true);
// Delete temporary file
Filesystem::rmfile(PATH_TMP.$tmpFilename);

View file

@ -48,6 +48,9 @@ class Site extends dbJSON
'thumbnailWidth' => 400, // px
'thumbnailHeight' => 400, // px
'thumbnailQuality' => 100,
'avatarWidth' => 400, // px
'avatarHeight' => 400, // px
'avatarQuality' => 100,
'logo' => '',
'markdownParser' => true,
'customFields' => '{}'
@ -124,6 +127,21 @@ class Site extends dbJSON
return DOMAIN_BASE . 'sitemap.xml';
}
public function avatarWidth()
{
return $this->getField('avatarWidth');
}
public function avatarHeight()
{
return $this->getField('avatarHeight');
}
public function avatarQuality()
{
return $this->getField('avatarQuality');
}
public function thumbnailWidth()
{
return $this->getField('thumbnailWidth');

View file

@ -50,6 +50,46 @@ class User
return $this->getValue('username');
}
public function displayName()
{
$mode = $this->getValue('displayNameMode');
$name = $this->firstName();
$lastName = $this->lastName();
$nickname = $this->nickname();
$username = $this->username();
switch ($mode) {
case 'fullname':
if ($name && $lastName) {
return $name." ".$lastName;
} elseif ($name) {
return $name;
} else {
return $username;
}
case 'firstname':
return $name ?? $username;
case '':
case 'nickname':
default:
return $nickname ?? $username;
}
}
public function displayNameMode()
{
return $this->getValue('displayNameMode');
}
public function pronouns()
{
return $this->getValue('pronouns');
}
public function homepage()
{
return $this->getValue('homepage');
}
public function description()
{
return $this->getValue('description');
@ -189,6 +229,7 @@ class User
$tmp['mastodon'] = $this->mastodon();
$tmp['vk'] = $this->vk();
$tmp['profilePicture'] = $this->profilePicture();
$tmp['pronouns'] = $this->pronouns();
if ($returnsArray) {
return $tmp;

View file

@ -6,7 +6,10 @@ class Users extends dbJSON {
'firstName'=>'',
'lastName'=>'',
'nickname'=>'',
'displayNameMode'=>'nickname',
'pronouns'=>'',
'description'=>'',
'homepage'=>'',
'role'=>'author', // admin, editor, author
'password'=>'',
'salt'=>'!Pink Floyd!Welcome to the machine!',

View file

@ -130,9 +130,13 @@
"add-a-new-category": "Add a new category",
"name": "Name",
"username": "Username",
"display-name": "Display Name",
"first-name": "First name",
"last-name": "Last name",
"full-name": "Full name",
"pronouns": "Pronouns",
"to-schedule-the-content-select-the-date-and-time": "To schedule the content select the date and time, the status has to be set to \"Published\".",
"if-not-present-fallback-on-username":"If the value isn't present, it'll fallback on the username",
"email": "Email",
"role": "Role",
"registered": "Registered",
@ -376,6 +380,9 @@
"thumbnail-width-in-pixels": "Thumbnail width in pixels (px).",
"thumbnail-height-in-pixels": "Thumbnail height in pixels (px).",
"thumbnail-quality-in-percentage": "Thumbnail quality in percentage (%).",
"avatar-width-in-pixels": "Avatar width in pixels (px).",
"avatar-height-in-pixels": "Avatar height in pixels (px).",
"avatar-quality-in-percentage": "Avatar quality in percentage (%).",
"maximum-load-file-size-allowed:": "Maximum load file size allowed:",
"file-type-is-not-supported": "File type is not supported. Allowed types:",
"page-content": "Page content",
@ -393,5 +400,7 @@
"start-typing-to-see-a-list-of-suggestions": "Start typing to see a list of suggestions.",
"view": "View",
"insert-thumbnail": "Insert thumbnail",
"insert-linked-thumbnail": "Insert linked thumbnail"
"insert-linked-thumbnail": "Insert linked thumbnail",
"more-infos": "More infos",
"base-infos": "Base infos"
}

View file

@ -130,9 +130,13 @@
"add-a-new-category": "Ajouter une nouvelle catégorie",
"name": "Nom",
"username": "Nom dutilisateur",
"display-name": "Nom affiché",
"first-name": "Prénom",
"last-name": "Nom",
"full-name": "Prénom et Nom",
"pronouns": "Pronoms",
"to-schedule-the-content-select-the-date-and-time": "Pour planifier votre contenu, sélectionnez la date et lheure, le statut doit être défini sur \"Publié\".",
"if-not-present-fallback-on-username":"Si la valeur n'est pas présente, alors cela affichera le nom d'utilisateur",
"email": "E-mail",
"role": "Rôle",
"registered": "Inscrit",
@ -376,6 +380,9 @@
"thumbnail-width-in-pixels": "Largeur de la miniature en pixels (px).",
"thumbnail-height-in-pixels": "Hauteur de la miniature en pixels (px).",
"thumbnail-quality-in-percentage": "Qualité des miniatures en pourcentage (%).",
"avatar-width-in-pixels": "Largeur de l'avatar en pixels (px).",
"avatar-height-in-pixels": "Hauteur de l'avatar en pixels (px).",
"avatar-quality-in-percentage": "Qualité des avatars en pourcentage (%).",
"maximum-load-file-size-allowed:": "Taille maximale des fichiers autorisée :",
"file-type-is-not-supported": "Le type de fichier nest pas supporté. Liste des extensions autorisées :",
"page-content": "Contenu de la page",
@ -393,5 +400,7 @@
"start-typing-to-see-a-list-of-suggestions": "Commencez à taper pour voir une liste de suggestions.",
"view": "Vue",
"insert-thumbnail": "Insérer une miniature",
"insert-linked-thumbnail": "Insérer une miniature liée"
"insert-linked-thumbnail": "Insérer une miniature liée",
"more-infos": "Infos supplémentaires",
"base-infos": "Infos de bases"
}

View file

@ -14,7 +14,7 @@
<span class="pr-3"><i class="bi bi-clock"></i><?php echo $page->readingTime() . ' ' . $L->get('minutes') . ' ' . $L->g('read') ?></span>
<!-- Page author -->
<span><i class="bi bi-person"></i><?php echo $page->user('nickname') ?></span>
<span><i class="bi bi-person"></i><?php echo $page->user('displayName') ?></span>
</div>
<?php endif ?>