Rendre propriétaire l’utilisateur qui ajoute le fichier via WP Customer Area Front-Office Publishing

Lorsqu’un utilisateur ajoute un fichier via le Front-Office Publishing, il doit sélectionner un owner. Trois options s’offrent à nous actuellement :

  1. Laisser la possibilité à l’utilisateur de sélectionner lui-même le owner. Il peut alors sélectionner un groupe WordPress ou n’importe lequel utilisateur WordPress. Dans mon cas c’était inutile et inconcevable de laisser un utilisateur voir tous les autres utilisateurs de mon site WordPress
  2. Appliquer un owner par défaut (soit un groupe ou un utilisateur).
  3. Ne rien faire. Aucun owner par défaut et aucune possibilité de sélectionner le owner. Ça amène à une incapacité de continuer puisqu’il faut absolument sélectionner un owner… pratique.

Le problème, c’est que peu importe laquelle de ces options est choisie, en aucun cas les gens chez WP Customer Area ont pensé que ça pourrait être pertinent que l’utilisateur-ajouteur soit par défaut le owner.

Il faut donc le faire nous-même. Voici comment j’ai fais. Dans mon thème WordPress, j’ai ajouté un fichier template de WP Customer Area dans le but de l’écraser et d’ajouter la fonctionnalité demandée. C’est documenté ici, si vous vous demandez comment faire.

Voici donc le contenu de /wp-content/themes/montheme/customer-area/templates/post-owner-fields-readonly.template.php :

<?php /**
 * Template version: 3.0.0
 * Template zone: admin|frontend
 */ ?>

<?php /** @var array $owners */ ?>
<?php /** @var string $field_prefix */ ?>
<?php /** @var string $field_group */ ?>

<?php
// For our theme, we want to add the current user as owner on top of other 
// owners that could be set in the admin
// To do so, we have to keep track of the latest index of type 'usr'
$i_usr = 0;
?>

<?php foreach ($owners as $type => $ids) : ?>
    <?php if (empty($ids)) continue; ?>
    <?php foreach ($ids as $i => $owner_id) : ?>
        <?php
        if (empty($owner_id)) continue;
        if($type === 'usr') $i_usr++;
        ?>
        <input type="hidden" name="<?php echo $field_prefix . $type . '[' . $i . ']'; ?>" value="<?php echo $owner_id; ?>" />
    <?php endforeach; ?>
<?php endforeach; ?>

<input type="hidden" name="<?php echo $field_prefix ?>usr[<?php echo $i_usr ?>]" value="<?php echo get_current_user_id(); ?>" />

<p class="alert alert-default">
    <i class="fa fa-info-circle mr-xs"></i> <?php _e('You will automatically be set as owner.', 'cuar'); ?>
</p>

Toujours en gardant la fonctionnalité de base qui permet de sélectionner des owners par défaut (option 1 plus haut), l’utilisateur-ajouteur est toujours appliqué comme owner.

Seul défaut que vous remarquerez peut-être, c’est qu’il ne semble pas y avoir de protection/vérification sur les owners qu’on ajoute. Dans le sens où l’utilisateur-ajouteur ne devrait pas avoir la permission de sélectionner le owner. Mais en pratique, il a le droit.

Je n’ai pas vérifié, mais il semblerait que les auteurs ont appliqué la logique non-sécuritaire suivante:

Si (l'utilisateur peut sélectionner le owner):

    -> afficher le sélecteur, du genre <select name="cuar_owners_usr[]"> où on peut sélectionner le user qu'on veut

Sinon

    -> mettre un <input type="hidden" name="cuar_owners_usr[0]" value="2" />

C’est seulement l’affichage qui change. Le code derrière laisse, en tout temps, l’utilisateur-ajouteur mettre le owner qu’il souhaite. Ça me semblait important de le souligner. Dans mon utilisation, je dois dire que ça me simplifie la vie 😉


Cet article vous a plu ? Pensez à suivre ma page Facebook !







Keven

À propos de Keven

Passionné d'informatique, d'électronique et de « machines à gaz ». Papa d'un garçon et de deux jumelles. Sur mon bateau d'Aspie, tantôt troué tantôt réparé, j'échappe quelques lignes sur mon blogue que j'ai créé pour évader mes pensées.

Laisser un commentaire

Vous pouvez laisser un commentaire anonynement en indiquant le nom de votre choix.