Seite 4 von 8

Verfasst: 18.01.2008 13:19
von Dr.Death
Kleines Update für eine Abfrage von mehreren Gruppen:

Baut diese Funktion in die Datei includes/functions.php ein.

SUCHE:
DAVOR EINFÜGEN:

Code: Alles auswählen

/** 
* get_group_auth 
* 
* Get group auth status 
* Returns TRUE if $user->data['user_id'] is in $access_group 
*/ 
function get_group_auth($access_group = "5") 
{ 
   global $db, $user; 

    
   $sql = 'SELECT g.group_id 
      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug 
      WHERE g.group_id = ug.group_id 
         AND ug.user_id = ' . $db->sql_escape($user->data['user_id']) . ' 
         AND ug.user_pending <> ' . TRUE . ' 
         AND g.group_id IN ( ' . $db->sql_escape($access_group) . ' ) '; 
   $result = $db->sql_query($sql); 

   $check_group_auth = $db->sql_affectedrows($result); 
   $db->sql_freeresult($result); 
   if ( $check_group_auth <> 0 ) 
   { 
      return TRUE; 
   } 
   return FALSE; 
}

Die Funktion kann nun wie folgt aufgerufen werden:

Code: Alles auswählen

// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden
$check_group = "4,5,7,8";

$is_in_group = get_group_auth($check_group); 

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück. 
if ($is_in_group == true) 
{ 
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt 
   $template->assign_var('S_IN_GROUP', true); 
}
Im betroffenen Template kann man dann eine einfache SWITCH Abfrage einbauen:

Code: Alles auswählen

<!-- IF S_IN_GROUP -->
         Hier Dein HTML Code wenn der User in der richtigen Gruppe ist.....
<!-- ELSE -->
		 Hier Dein HTML Code um den anderen Usern zu sagen, das sie nicht in der passenden Gruppe sind ;-)
<!-- ENDIF -->


EDIT: Fehlendes ; ergänzt

Verfasst: 18.01.2008 13:47
von Aktiv-X
Das habe ich gesucht, funktioniert aber irgendwie nicht.

Ich habe folgendes gemacht:

Funktions.php geöffnet und am ende der Datei folgendes eingefügt:
Hier einmal der Quelltest der Funktions.php

Code: Alles auswählen

/**
* Handler for init calls in phpBB. This function is called in user::setup();
* This function supports hooks.
*/
function phpbb_user_session_handler()
{
	global $phpbb_hook;

	if (!empty($phpbb_hook) && $phpbb_hook->call_hook(__FUNCTION__))
	{
		if ($phpbb_hook->hook_return(__FUNCTION__))
		{
			return $phpbb_hook->hook_return_result(__FUNCTION__);
		}
	}

	return;
}


/** 
* get_group_auth 
* 
* Get group auth status 
* Returns TRUE if user_id is in $access_group 
*/ 
function get_group_auth($access_group = "5") 
{ 
   global $db, $user; 

    
   $sql = 'SELECT g.group_id 
      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug 
      WHERE g.group_id = ug.group_id 
         AND ug.user_id = ' . $db->sql_escape($user->data['user_id']) . ' 
         AND ug.user_pending <> ' . TRUE . ' 
         AND g.group_id IN ( ' . $db->sql_escape($access_group) . ' ) '; 
   $result = $db->sql_query($sql); 

   $check_group_auth = $db->sql_affectedrows($result); 
   $db->sql_freeresult($result); 
   if ( $check_group_auth <> 0 ) 
   { 
      return TRUE; 
   } 
   return FALSE; 
}
?>
Dann habe ich meine Gewünschte Datei Editiert: Hier einmal der Quelltext der gesammten Datei, in der ich diese Funktion haben möchte.

Code: Alles auswählen

<?php
// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden 
$check_group = "4,5,7,8" 

$is_in_group = get_group_auth($check_group); 

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück. 
if ($is_in_group == true) 
{ 
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt 
   $template->assign_var('S_IN_GROUP', true); 
}
?>
<!DOCTYPE html PUBLIC>
<html>
<body bgcolor="#464646">
<head>

<title>TS-Viewer</title>
<link rel="stylesheet" href="../styles/acidtech/theme/stylesheet.css" type="text/css" />
</head>
<p align="center">
<img src="../styles/acidtech/imageset/site_logo.gif">
</p>
<center>
<table width="100%">
<tr><br><br><br><br>
<td width="150" valign="top">

<?php



include("../linksleft.php")?>	

</td>

<td>
	
	
<!-- IF S_IN_GROUP --> 
	<center>
			<table class="tsbg" cellspacing="0" width="200">
			<caption><div class="cap-left"><div class="cap-right"><p style="line-height:5px">&nbsp;<h4>TS-Viewer</a></h4>&nbsp;</p></div></div></caption>
			<tr><td align="left">
			
<?php

	require('teamspeakdisplay/teamspeakdisplay.php');
	
	
	$settings = $teamspeakDisplay->getDefaultSettings();
	

	$settings['serveraddress'] = '85.214.51.195';
	$settings['serverudpport'] = '8812';
	
	if ($settings['serveraddress'] == '') { die('You need to configure this script as described inside the CONFIGURATION CODE block in ' . $_SERVER['PHP_SELF'] . '<br>\n'); }
	
	$teamspeakDisplay->displayTeamspeakEx($settings);	
?>

</td></tr>
			
			</table>
			</center>
			
<!-- ENDIF -->
			
			</td></tr></table></center><br><br>
		
	</body>
</html>

Jetzt habe ich aber folgende Fehlermeldung:

Parse error: syntax error, unexpected T_VARIABLE in /mnt/web1/53/22/51686022/htdocs/tsv/ts.php on line 5

Den Cache habe ich geleert, vielleicht habe ich einen Fehler gemacht? Wäre Toll wenn mir jemand helfen kann, da ich von der ganzen sache gar keine Ahnung habe.

Verfasst: 18.01.2008 14:12
von Dr.Death
Nein, so kann das nicht funktionieren.

Du musst Dich schon an die phpBB3 Standards halten und eine eigene PHP Datei erstellen indem der Funktionsaufruf und die Übergabe an das phpBB3 Template stattfindet.

Du kannst nicht einfach den PHP Code in eine HTML Datei einfügen ;-)

Siehe dazu bitte: http://olympuswiki.naderman.de/Adding_pages

DANKE

Verfasst: 18.01.2008 14:53
von sepp68
DANKE Dr.Death

Genau diesen Code habe gebraucht !!

Verfasst: 18.01.2008 14:59
von Aktiv-X
Wollte mir das genze ein bisschen einfacher machen.

Gibt es das ganze auch auf Deutsch? Was du mir da verlinkt hast?

wenn ich das ganze jetzt so mache, dann habe ich aber irgendwie kein Blanko Seite.

Genau das ganze ich nähmlich nicht meine sache. Liegt mir einfach nicht :(

Dahher dachte ich, mache ich mir das einfacher.

Verfasst: 20.01.2008 18:07
von Aktiv-X
Hallo,
ich habe jetzt meine Dateien mal geändert.

Nun weiß ich nicht genau wie ich weiter vorgehen soll, um den zugriff Gruppenabhängig zu machen. Bitte um Hilfe.

Hier einmal meine Dateien.
Diese wird abgefragt, und soll halt Abhängig von den Zugriffsrechten sein.

Code: Alles auswählen

<?php
/**
*
* @author Original Author Username webmaster@fc-gilde.eu - http://www.fc-gilde.eu
* @author Another Author Username webmaster@fc-gilde.eu - http://www.fc-gilde.eu
*
* @package {PACKAGENAME}
* @version $Id$
* @copyright (c) 2007 Your Group Name
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
define('IN_PHPBB', true);
// Specify the path to you phpBB3 installation directory.
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// The common.php file is required.
include($phpbb_root_path . 'common.' . $phpEx);
// since we are grabbing the user avatar, the function is inside the functions_display.php file since RC7
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
// specify styles and/or localisation
// in this example, we specify that we will be using the file: my_language_file.php
$user->setup('mods/tsv_lang');
 // Page title, this language variable should be defined in the language file you setup at the top of this page.
 page_header($user->lang['MY_TITLE']);
 // Set the filename of the template you want to use for this file.
 // This is the name of our template file located in /styles/<style>/templates/.
 $template->set_filenames(array(
 'body' => 'tsv_temp.html',
 )); 
 // Completing the script and displaying the page. 
 page_footer();
 


 ?>
Dann hier einmal meine Tamplate.

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<center>
<table width="100%">


<tr>	<br><br><br><br>
		<td width="150" valign="top">

				<!-- INCLUDE ../../../linksleft.php -->

		</td>
		<td>
	
			<center>
			<table class="tsbg" cellspacing="0" width="215">
			<caption><div class="cap-left"><div class="cap-right">&nbsp;<h4>TS-Viewer</a></h4>&nbsp;</div></div></caption>
			<tr>
			
					<td align="left">

				<iframe src="../../../tsv/ts1.php" height="600" width="215"></iframe>


					</td>
			</tr>
			</table>
			</center>
			
		</td>
</tr>
</table>
</center><br><br>
<!-- INCLUDE overall_footer.html -->
und meine Language Datei:

Code: Alles auswählen

<?php
/**
*
* groups [German]
*
* @author My Username webmaster@fc-filde.eu - http://www.fc-gilde.eu
*
* @package language
* @version $Id$ @copyright (c) 2007 Your Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
    exit;
	}
	if (empty($lang) || !is_array($lang))
	{
    $lang = array();
	}

	
$lang = array_merge($lang, array(
      'MY_TITLE'        => 'TS-Viewer',
	));
?>
In welche Dateien muß ichjetzt was rein setzten, damit der Zugriff Gruppenabhängig ist?

Ich habe davon voll keinen plan, aber ich hoffe das meine Dateien jetzt OK sind und es funktionieren würde.

Wenn es möglich ist, könnte mir jemand in meine oben gegeben Skripts den nötigen inhalt ergänzen. Das wäre super Klasse. Wie schon mal gesagt, ich habe davon überhaupt keinen plan.


EDIT:

So habe es hin bekommen!!!

Es gibt da aber einen Fehler in dem Skript:
Die Funktion kann nun wie folgt aufgerufen werden:

Code: Alles auswählen

// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden 
$check_group = "4,5,7,8" 

$is_in_group = get_group_auth($check_group); 

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück. 
if ($is_in_group == true) 
{ 
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt 
   $template->assign_var('S_IN_GROUP', true); 
} 
Es Fehlt ein " ; " hiernoch mal so wie es funktioniert:

Code: Alles auswählen

// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden 
$check_group = "4,5,7,8";

$is_in_group = get_group_auth($check_group); 

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück. 
if ($is_in_group == true) 
{ 
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt 
   $template->assign_var('S_IN_GROUP', true); 
} 

Vielen Dank für das Super Skript!!!

Verfasst: 23.01.2008 16:59
von Aktiv-X
Hallo,

ich habe noch mal eine Frage zu dem Skript. Es ist ja jetzt bei mir, wenn jemand auf den Link klickt der nicht in der im Skript festgelegten Gruppe ist, dass dieser Person dann nicht der Inhalt angezeigt wird. Und die Seite leer bleibt.

Gibt es nun die Möglichkeit das Skript so zu ändern, das derjenige der nicht die Rechte hat den Inhalt zu sehen eine Meldung bekommt?

zb. Leider steht ihnen der Inhalt dieser Seite nicht zur Verfügung

Ich weiß leider nicht, wie ich das machen sollte. Wäre also klasse wenn mir jemand helfen könnte.

Verfasst: 23.01.2008 17:10
von Berliner Schildkroete

Verfasst: 24.01.2008 16:55
von Aktiv-X
Hallo,

gibt es diese ganze sache auch auf Deutsch? Und, ist es überhaupt möglich das in Verbindung mit dem von mir vorher erwähnten Skript laufen zu lassen?

Vielleicht ist es jemanden möglich mir das ganze sonst einmal zu erklären, wie ich das in meine oben genannten Skripts intregrieren kann?
Kenne mich leider nicht so doll damit aus. Daher wäre es klasse wenn mich wer unterstützen könnte.

Verfasst: 24.01.2008 18:20
von issjut
Aktiv-X hat geschrieben:Hallo,

Gibt es nun die Möglichkeit das Skript so zu ändern, das derjenige der nicht die Rechte hat den Inhalt zu sehen eine Meldung bekommt?
Also wenn du es mit der Funktion vom Doc machst, dann könntest du ja mit....

Code: Alles auswählen

<!-- IF S_IN_GROUP -->
Seiteninhalt
<!-- ENDIF -->
die Seite für "unberechtigte" dicht machen.

Demnach würde....

Code: Alles auswählen

<!-- IF S_IN_GROUP -->
Seiteninhalt
<!-- ELSE -->
Leider steht ihnen der Inhalt dieser Seite nicht zur Verfügung
<!-- ENDIF -->
...dem User der in der Gruppe ist den Seiteninhalt angezeigt und allen anderen den entsprechende Text.[/code]