Webboard

Pełna wersja: Zarządzenie grupami "z prawdziwego zdarzenia"
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Jak zapewne niektórzy wiedzą, w MyBB z poziomu zarządzania grupą (poprzez funkcję lidera grupy) nie można kogoś wyrzucić z grupy, jeśli ten ktoś ma ustawioną Naszą grupę jako domyślną grupę użytkownika.

Używam modyfikacji "Group sort", który segreguje grupy użytkowników według hierarchii ustawionej przez administratora. 
Grupa stojąca najwyżej w hierarchii staje się grupą domyślną.

Mam pewne rozwiązanie => chcę uczynić, aby Group sort ustawiał grupę o najwyższej hierarchii jako grupę wyświetlaną, zamiast jako grupę główną. Za to chciałbym, aby grupą główną była zawsze grupa "Zarejestrowany" o ID "2". Umożliwi to zarządzanie członkami grupy liderom.

W modyfikacji jest pewna zmienna:

Kod PHP:
// update user data
$primarygroup=array_shift($new_usergroups);
$usergroups=implode(','$new_usergroups);
$new_record=array(
'usergroup' => $primarygroup,
'additionalgroups' => $usergroups,
'displaygroup' => 0
);
$db->update_query(
'users',
$new_record,
'uid='.intval($uid)
); 


Próbowałem zmienić na:

Kod PHP:
// update user data
$primarygroup=array_shift($new_usergroups);
$usergroups=implode(','$new_usergroups);
$new_record=array(
'displaygroup' => $primarygroup,
'additionalgroups' => $usergroups,
'usergroup' => 2
);
$db->update_query(
'users',
$new_record,
'uid='.intval($uid)
); 


Ustawienie grupy głównej jako "2" jak najbardziej działa, jednak zaczyna wariować przy dodatkowych grupach, po prostu losowo wyrzuca ludzi z grup. Wygląda na to, że trzeba w modyfikacji przerobić coś jeszcze, ale niestety, moja wiedza i doświadczenia są wystarczające, aby uczynić to na własną rękę z oczekiwanym rezultatem.

Załączam modyfikację do postu.

[attachment=11064]

Oczywiście dziękuję za wszelką pomoc.

Próbowałem kiedyś samemu nauczyć się programowania, jednak po kilku podejściach do C i PHP stwierdziłem, że to chleb totalnie nie dla mojej głowy. Cóż, każdy ma predyspozycje do czegoś innego, a mi pozostaje liczyć na uprzejmość innych osób albo giełda.
Dobra... Zapoznałem się z funkcjami PHP występującymi w tym pluginie i sam dotarłem do rozwiązania.

W pliku groupsort.php znaleźć:

Kod PHP:
$primarygroup=array_shift($new_usergroups);
$usergroups=implode(','$new_usergroups);
$new_record=array(
'usergroup' => $primarygroup,
'additionalgroups' => $usergroups,
'displaygroup' => 0
); 

i podmienić na:

Kod PHP:
    $primarygroup=2;
    
$usergroups=implode(','$new_usergroups);
    
$displaygroup=array_shift($new_usergroups);
    
$new_record=array(
        
'usergroup' => $primarygroup,
        
'additionalgroups' => $usergroups,
        
'displaygroup' => $displaygroup
    
); 

Mogę napisać poradnik. ;)
Nooo...

Teraz należałoby wziąć poprawkę na to, że również przypisuje do grupy "zarejestrowani", gdy ktoś jest zbanowany (pół biedy) albo nieaktywowany (wówczas opcja aktywacji przez admina/e-mail szlag trafia).

Czy ktoś ma pomysł?
Posiedziałem 2 godziny nad tym i paru rzeczy się nauczyłem.

Poprawiony kod do podmiany:

Kod PHP:
    // update user data

    
if(in_array(2,$usergroups) && !in_array(5,$usergroups) && !in_array(7,$usergroups))
    {
        
$primarygroup=2;
    }
    
    if(
in_array(5,$usergroups))
    {
        
$primarygroup=5;
    }
    
    if(
in_array(7,$usergroups))
    {
        
$primarygroup=7;
    }
    
    
$usergroups=implode(','$new_usergroups);
    
$displaygroup=array_shift($new_usergroups);
    
$new_record=array(
        
'usergroup' => $primarygroup,
        
'additionalgroups' => $usergroups,
        
'displaygroup' => $displaygroup
    
); 

W przypadku aktywacji kont należy przejść do /admin/modules/user/awaiting_activation.php

Kod PHP:
            // Move out of awaiting activation if they're in it.
            
if($user['usergroup'] == 5)
            {
                
$updated_user['usergroup'] = 2;
            }

            
$db->update_query("users"$updated_user"uid='{$user['uid']}'"); 

Zamienić na

Kod PHP:
            // Move out of awaiting activation if they're in it.
            
if($user['usergroup'] == 5)
            {
                
$updated_user['usergroup'] = 2;
                
$dodatkowe['additionalgroups'] = 2;
            }

            
$db->update_query("users"$updated_user"uid='{$user['uid']}'");
            
$db->update_query("users"$dodatkowe"uid='{$user['uid']}'"); 

W przypadku aktywacji konta ważne, jest, aby nadal nie było liczby "5" w additionalgroups.

Można sobie załączyć cron groupsort.php co godzinę.