web-dev-qa-db-fra.com

Limiter la création d'articles par groupe d'utilisateurs

Je suis un peu perplexe par où commencer.

Cela devrait arriver:

  1. les administrateurs doivent pouvoir modifier un groupe d'utilisateurs et définir le nombre d'articles que les membres de ce groupe peuvent créer.
  2. Avant qu'un membre du groupe crée/enregistre un nouvel article dans fronté, la quantité d'articles créés par cet utilisateur est comparée au nombre maximum d'articles autorisés de son appartenance à un groupe. Pseudo Code:

    if ($articlesCreatedByUser < $allowedArticlesByGroup){
      $article->save();
    } else {
      die('you reached the article limit');
    

Comme je commence tout juste avec le développement de Joomla, voici mes questions.

  • avec Joomla3, il est facile de créer des champs supplémentaires entiers pour les utilisateurs, est-ce également possible avec les groupes d'utilisateurs? Sinon, que faudrait-il pour étendre le formulaire backend du groupe d'utilisateurs?
  • quel est le moyen le plus simple de limiter le formulaire de création d’article comme expliqué ci-dessus. Je ne suis pas sûr de devoir plonger dans la création de plug-in (et accrocher dans beforesave) ou d'étendre la méthode com_content et sa méthode de sauvegarde de modèle?

Merci!

Toni

enter image description here

1
t Book

Je suggérerais de développer un plugin de contenu avec un remplacement de modèle pour effectuer cette tâche. L'exemple ci-dessous limite au maximum 5 articles par jour et par utilisateur.

public function onContentBeforeSave($context, $article, $isNew)
{
    if ( $context != 'com_content.form' || !$isNew) 
    {
        return true;
    }

    $user = JFactory::getUser();
    $db = JFactory::getDbo();

    $query = $db->getQuery(true)
        ->select('count(*)')
        ->from('#__content')
        ->where('created_by = '.$user->id.' and created > CURDATE()');
    $db->setQuery($query);
    $articlesCreatedByUser = (int)$db->loadResult();

    // get the allowed articles somehow..
    $allowedArticlesByGroup = 5;

    // check the allowed articles.
    if ($articlesCreatedByUser >= $allowedArticlesByGroup)
    {
        $article->setError('Maximum of '.$allowedArticlesByGroup.' articles are allowed per day.');
        return false;
    }

    return true;
}

Le plugin empêchera les utilisateurs de créer de nouveaux articles au-delà de la limite autorisée. Maintenant, pour empêcher les utilisateurs d’accéder à la page de création d’article, remplacez la disposition du formulaire et ajoutez la logique ci-dessus.

1
Nagarjun