it-swarm-eu.dev

Come ottenere l'ID gruppo utente per nome gruppo?

Sto usando JM3.4. Ho aggiunto alcuni gruppi di utenti personalizzati. E ho aggiunto un campo per consentire all'utente di selezionare il gruppo di utenti durante la registrazione. Ho intenzione di hackerare il seguente codice:

// Get the default new user group, Registered if not specified.
$system = $params->get('new_usertype', 2);

$this->data->groups[] = $system;

Ho intenzione di verificare quale utente ha selezionato e ignorare il gruppo configurato dal sistema. Quindi ho aggiunto il seguente codice tra le due precedenti righe di codice:

if (!strcmp($this->data->role, "group0"))
{
    $system = 10;
}
elseif (!strcmp($this->data->role, "group1"))
{
    $system = 11;
}

La mia domanda è: come posso non codificare l'ID di gruppo qui, invece di 10,11, dovrebbe essere qualcosa del tipo: getGroupID('group0'), getGroupID('group1')

6
Rob L

Non sono sicuro che Joomla abbia un modo migliore per farlo, ma puoi creare la tua funzione e interrogare il database:

function getGroupId($groupName){
    $db = JFactory::getDBO();
    $db->setQuery($db->getQuery(true)
        ->select('*')
        ->from("#__usergroups")
    );
    $groups = $db->loadRowList();
    foreach ($groups as $group) {
        if ($group[4] == $groupName) // $group[4] holds the name of current group
            return $group[0];        // $group[0] holds group ID
    }
    return false; // return false if group name not found
}

Quindi utilizzare quanto segue per ottenere l'ID di un gruppo in base al nome:

echo (getGroupId("Administrator"));

Questo farà eco all'ID del gruppo chiamato "Amministratore", se esiste.

$groups avrà un aspetto simile al seguente:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 1
            [3] => 22
            [4] => Public
        )

    [1] => Array
        (
            [0] => 2
            [1] => 1
            [2] => 8
            [3] => 19
            [4] => Registered
        )
...

Informazioni aggiuntive

Questo potrebbe non essere d'aiuto nel tuo caso, ma JUserHelper ha un metodo chiamato getUserGroups ( https://api.joomla.org/cms-3/classes/JUserHelper.html# method_getUserGroups ) che elencherà tutti i gruppi a cui appartiene un utente. Uso:

getUserGroups(integer $userId) : array
4
johanpw

Si prega di evitare modifiche al framework. Questo ti porterà all'interruzione del sistema/funzionalità dopo l'aggiornamento. Crea un plug-in di tipo Utente e lavoraci su un evento chiamato onUserAfterSave. In questo modo sarai sicuro per l'aggiornamento. Aggiungi i campi dei parametri corretti (gruppo0 e gruppo1) al file XML del plug-in. I plugin hanno una propria configurazione, quindi non puoi ottenere quei parametri ogni volta che ne hai bisogno e modificarli nell'interfaccia utente.

Ecco una guida completa agli eventi dei plugin:

Qui puoi trovare un esempio di plugin:

Ecco un tipo di campo che si desidera utilizzare come parametro nella configurazione del plug-in

2
Artur Stępień

Puoi creare la tua funzione che puoi chiamare per ottenere l'id del gruppo come:

public function getGroupId($groupName)
{
   $db = JFactory::getDbo();
   $select = "select id from #__usergroups where title='".$groupName."'";
   $db->setQuery($select);
   $db->query();
   $data = $db->loadObject();

   $groupId = $data->id;

   if(empty($groupId))
   $groupId = 2;

   return $groupId;
}

quindi chiamalo come:

$system = $this->getGroupId($this->data->role);
2
shine

Da Joomla 3.6.3 (con l'aggiunta di serGroupsHelper class):

function getGroupId($groupName){
    foreach (JHelperUsergroups::getInstance()->getAll() as $group) {
        if ($group->title == $groupName) {
            return $group->id;
        }
    }
}
0
John Rix