Seite 1 von 1

"Das Team" für Gäste einsehbar machen

Verfasst: 14.01.2015 09:37
von dom_beta
Hallo,

wie kann man "Das Team" für Gäste einsehbar machen?

Danke

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 14.01.2015 13:36
von HabNurNeFrage
Hi,

ohne weitere Veränderungen über die Berechtigungen geht es nur, wenn Du Gästen den Zugriff auf alle User-Profile erlaubst.
Eine einzelne Berechtigung nur für ./memberlist.php?mode=leaders gibt es nicht.

Du kannst Dir eine einfache Mod in Form einer zusätzlichen Seite dafür selbst erstellen:

Speichere Folgendes als teampage.php

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

$user->session_begin();
$auth->acl($user->data);
$user->setup(array('memberlist', 'groups'));


$user_ary = $auth->acl_get_list(false, array('a_', 'm_'), false);

$admin_id_ary = $global_mod_id_ary = $mod_id_ary = $forum_id_ary = array();
foreach ($user_ary as $forum_id => $forum_ary)
{
    foreach ($forum_ary as $auth_option => $id_ary)
    {
        if (!$forum_id)
        {
            if ($auth_option == 'a_')
            {
                $admin_id_ary = array_merge($admin_id_ary, $id_ary);
            }
            else
            {
                $global_mod_id_ary = array_merge($global_mod_id_ary, $id_ary);
            }
            continue;
        }
        else
        {
            $mod_id_ary = array_merge($mod_id_ary, $id_ary);
        }

        if ($forum_id)
        {
            foreach ($id_ary as $id)
            {
                $forum_id_ary[$id][] = $forum_id;
            }
        }
    }
}

$admin_id_ary = array_unique($admin_id_ary);
$global_mod_id_ary = array_unique($global_mod_id_ary);

$mod_id_ary = array_merge($mod_id_ary, $global_mod_id_ary);
$mod_id_ary = array_unique($mod_id_ary);

// Admin group id...
$sql = 'SELECT group_id
    FROM ' . GROUPS_TABLE . "
    WHERE group_name = 'ADMINISTRATORS'";
$result = $db->sql_query($sql);
$admin_group_id = (int) $db->sql_fetchfield('group_id');
$db->sql_freeresult($result);

// Get group memberships for the admin id ary...
$admin_memberships = group_memberships($admin_group_id, $admin_id_ary);

$admin_user_ids = array();

if (!empty($admin_memberships))
{
    // ok, we only need the user ids...
    foreach ($admin_memberships as $row)
    {
        $admin_user_ids[$row['user_id']] = true;
    }
}
unset($admin_memberships);

$sql = 'SELECT forum_id, forum_name
    FROM ' . FORUMS_TABLE;
$result = $db->sql_query($sql);

$forums = array();
while ($row = $db->sql_fetchrow($result))
{
    $forums[$row['forum_id']] = $row['forum_name'];
}
$db->sql_freeresult($result);

$sql = $db->sql_build_query('SELECT', array(
    'SELECT'    => 'u.user_id, u.group_id as default_group, u.username, u.username_clean, u.user_colour, u.user_rank, u.user_posts, u.user_allow_pm, g.group_id, g.group_name, g.group_colour, g.group_type, ug.user_id as ug_user_id',

    'FROM'        => array(
        USERS_TABLE        => 'u',
        GROUPS_TABLE    => 'g'
    ),

    'LEFT_JOIN'    => array(
        array(
            'FROM'    => array(USER_GROUP_TABLE => 'ug'),
            'ON'    => 'ug.group_id = g.group_id AND ug.user_pending = 0 AND ug.user_id = ' . $user->data['user_id']
        )
    ),

    'WHERE'        => $db->sql_in_set('u.user_id', array_unique(array_merge($admin_id_ary, $mod_id_ary)), false, true) . '
        AND u.group_id = g.group_id',

    'ORDER_BY'    => 'g.group_name ASC, u.username_clean ASC'
));
$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result))
{
    $which_row = (in_array($row['user_id'], $admin_id_ary)) ? 'admin' : 'mod';

    // We sort out admins not within the 'Administrators' group.
    // Else, we will list those as admin only having the permission to view logs for example.
    if ($which_row == 'admin' && empty($admin_user_ids[$row['user_id']]))
    {
        // Remove from admin_id_ary, because the user may be a mod instead
        unset($admin_id_ary[array_search($row['user_id'], $admin_id_ary)]);

        if (!in_array($row['user_id'], $mod_id_ary) && !in_array($row['user_id'], $global_mod_id_ary))
        {
            continue;
        }
        else
        {
            $which_row = 'mod';
        }
    }

    $s_forum_select = '';
    $undisclosed_forum = false;

    if (isset($forum_id_ary[$row['user_id']]) && !in_array($row['user_id'], $global_mod_id_ary))
    {
        if ($which_row == 'mod' && sizeof(array_diff(array_keys($forums), $forum_id_ary[$row['user_id']])))
        {
            foreach ($forum_id_ary[$row['user_id']] as $forum_id)
            {
                if (isset($forums[$forum_id]))
                {
                    if ($auth->acl_get('f_list', $forum_id))
                    {
                        $s_forum_select .= '<option value="">' . $forums[$forum_id] . '</option>';
                    }
                    else
                    {
                        $undisclosed_forum = true;
                    }
                }
            }
        }
    }

    // If the mod is only moderating non-viewable forums we skip the user. There is no gain in displaying the person then...
    if (!$s_forum_select && $undisclosed_forum)
    {
//                $s_forum_select = '<option value="">' . $user->lang['FORUM_UNDISCLOSED'] . '</option>';
        continue;
    }

    // The person is moderating several "public" forums, therefore the person should be listed, but not giving the real group name if hidden.
    if ($row['group_type'] == GROUP_HIDDEN && !$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') && $row['ug_user_id'] != $user->data['user_id'])
    {
        $group_name = $user->lang['GROUP_UNDISCLOSED'];
        $u_group = '';
    }
    else
    {
        $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
        $u_group = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']);
    }

    $rank_title = $rank_img = '';
    get_user_rank($row['user_rank'], (($row['user_id'] == ANONYMOUS) ? false : $row['user_posts']), $rank_title, $rank_img, $rank_img_src);

    $template->assign_block_vars($which_row, array(
        'USER_ID'        => $row['user_id'],
        'FORUMS'        => $s_forum_select,
        'RANK_TITLE'    => $rank_title,
        'GROUP_NAME'    => $group_name,
        'GROUP_COLOR'    => $row['group_colour'],

        'RANK_IMG'        => $rank_img,
        'RANK_IMG_SRC'    => $rank_img_src,

        'U_GROUP'            => $u_group,
        'U_PM'                => ($config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($row['user_allow_pm'] || $auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'))) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=compose&u=' . $row['user_id']) : '',

        'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
        'USERNAME'            => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']),
        'USER_COLOR'        => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']),
        'U_VIEW_PROFILE'    => get_username_string('profile', $row['user_id'], $row['username'], $row['user_colour']),
    ));
}
$db->sql_freeresult($result);

$template->assign_vars(array(
    'PM_IMG'        => $user->img('icon_contact_pm', $user->lang['SEND_PRIVATE_MESSAGE']))
);

$template->assign_block_vars('navlinks', array(
    'FORUM_NAME' => 'Unser Team', 
    'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}teampage.$phpEx")));

page_header('Unser Team');

$template->set_filenames(array(
    'body' => 'teampage_body.html'
    ));

make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));

page_footer();

?>
Die Datei ins Forumroot hochladen.

Kopiere die Datei ./styles/<dein_stylename>/template/memberlist_leaders.html und speichere im selben Ordner als teampage_body.html

Nun kannst Du an beliebigen Stellen im Template (z.B. in overall_header.html oder overall_footer.html) Links zu dieser neuen Seite setzen:
<a href="./teampage.php">{L_THE_TEAM}</a>

Oder/und Du änderst den originalen Link zum Team in overall_footer.html:
Dort finden: <a href="{U_TEAM}">{L_THE_TEAM}</a> und mit dem zuvor genannten Link ersetzen.

Demo: http://bild4.bplaced.net/phpbb/ => da unten auf "Das Team" klicken.

LG

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 14.01.2015 18:06
von Elsensee
Oder: :D :P

Du öffnest: memberlist.php
Suchst: (ziemlich am Anfang..)

Code: Alles auswählen

case 'email':
break; 
Und fügst davor ein:

Code: Alles auswählen

case 'leaders': 
:)

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 14.01.2015 19:37
von HabNurNeFrage
Hi,

funktioniert bestens:
http://bild4.bplaced.net/phpbb/memberli ... de=leaders

Aber warum einfach, wenns auch umständlich geht? :wink: :lol:

LG

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 08.08.2015 05:05
von dom_beta
Elsensee hat geschrieben:Oder: :D :P

Du öffnest: memberlist.php
Suchst: (ziemlich am Anfang..)

Code: Alles auswählen

case 'email':
break;
Und fügst davor ein:

Code: Alles auswählen

case 'leaders':
:)
ähm, irgendwie funktioniert das nicht

switch ($mode)
{
case 'leaders':
case 'email':
case 'contactadmin':
break;

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 08.08.2015 06:44
von waldkatze
Du hast warscheinlich die falsche Stelle im Code geändert.

Suche in der memberlist.php:

Code: Alles auswählen

// Check our mode...
if (!in_array($mode, array('', 'group', 'viewprofile', 'email', 'contact', 'searchuser', 'leaders')))
{
    trigger_error('NO_MODE');
} 
Danach müßte dann das stehen:

Code: Alles auswählen

switch ($mode)
{
    case 'leaders':
    case 'email':
    break;

    default:
        // Can this user view profiles/memberlist?
        if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
        {
            if ($user->data['user_id'] != ANONYMOUS)
            {
                trigger_error('NO_VIEW_USERS');
            }

            login_box('', ((isset($user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)])) ? $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)] : $user->lang['LOGIN_EXPLAIN_MEMBERLIST']));
        }
    break;
}

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 08.08.2015 17:15
von dom_beta
funktioniert immer noch nicht?!

Code: Alles auswählen

// Check our mode...
if (!in_array($mode, array('', 'group', 'viewprofile', 'email', 'contact', 'contactadmin', 'searchuser', 'team', 'livesearch')))
{
	trigger_error('NO_MODE');
}

switch ($mode)
{
	case 'email':
	case 'contactadmin':
	break;

	case 'livesearch':
		if (!$config['allow_live_searches'])
		{
			trigger_error('LIVE_SEARCHES_NOT_ALLOWED');
		}
		// No break

	default:
        // Can this user view profiles/memberlist?
        if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
        {
            if ($user->data['user_id'] != ANONYMOUS)
            {
                trigger_error('NO_VIEW_USERS');
            }

            login_box('', ((isset($user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)])) ? $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)] : $user->lang['LOGIN_EXPLAIN_MEMBERLIST']));
        }
	break;
}

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 08.08.2015 17:39
von redbull254
Hallo erstmal,


aktualisierst Du auch die Cache ? Hier mal eine Anleitung dazu:
Dein Style muss noch in der Datenbank aktualisiert werden!

Voraussetzung ist hierbei, das die Dateien zur Änderung herunter geladen und nach der Änderung wieder ins
phpBB-Verzeichnis geladen wurden. Anderfalls würden die im ACP gemachten Änderungen in der Datenbank
wieder mit den alten Werten überschrieben.

Gehe dazu folgende Schritt durch:

ACP --> Styles --> Style-Komponenten --> Themes
ACP --> Styles --> Style-Komponenten --> Templates
ACP --> Styles --> Style-Komponenten --> Grafiksammlungen

Dort angekommen, klicke jeweils auf den Link „Aktualisieren“

Nach den Aktualisierungen gehe zurück auf den ACP Index ( ACP --> Allgemein ) und klicke
bei „Den Cache leeren" auf den Button „Jetzt ausführen“.

Bei manchen Browsern ist es zusätzlich nötig, den Browser Cache zu löschen. ( Meistens mit STRG + F5 )

Alternative Möglichkeit (Nur für den kurzzeitigen Gebrauch gedacht):

ACP --> Allgemein --> Serverlast --> Rekompilieren veralteter Style-Komponenten: JA einstellen.

Das sollte aber hinterher wieder zurück gestellt werden. (Sonst unter anderem große Serverlast)

Der Cache muss aber trotzdem geleert werden.

Hinweis:
Beim Style „subsilver“ brauchen die Style-Komponenten --> Themes nicht aktualisiert werden.
Macht man dies trotzdem, kommt folgende Fehlermeldung:
„Dieses Theme ist im Dateisystem gespeichert. Daher gibt es keinen Grund, es zu aktualisieren.“

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 08.08.2015 18:49
von waldkatze
funktioniert immer noch nicht?!
Das kann so auch nicht funktionieren.
Ich sehe in deinem Code die Zeile case 'leaders': nicht.
Ändere doch mal den Code so wie ich dir oben schon gezeigt habe.

Code: Alles auswählen

switch ($mode)
{
    case 'leaders': // Das musst du noch einfügen !!!
    case 'email':
    break;

    default:
        // Can this user view profiles/memberlist?
        if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
        {
            if ($user->data['user_id'] != ANONYMOUS)
            {
                trigger_error('NO_VIEW_USERS');
            }

            login_box('', ((isset($user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)])) ? $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)] : $user->lang['LOGIN_EXPLAIN_MEMBERLIST']));
        }
    break;
} 

Re: "Das Team" für Gäste einsehbar machen

Verfasst: 09.08.2015 02:13
von Elsensee
Für den Fall, dass es sich bei dir um ein phpBB 3.1.x handelt, muss dort nicht leaders, sondern team stehen. :)