Frage zu Calendar Mod von alightner

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
mario d.
Mitglied
Beiträge: 220
Registriert: 04.12.2003 20:18

Frage zu Calendar Mod von alightner

Beitrag von mario d. »

Hallo liebe Forengemeinde,

derzeit bin ich an etwas am basteln, bei dem mir hier eventuell jemand helfen kann. Ich habe die Calendar Mod 0.1.1 von alightner verbaut und möchte das in der Mod mitgelieferte ucp-Modul "UCP_MAIN_CALENDAR_MYEVENTS" verändern. Bisher ist es so, dass man dort im persönlichen Bereich alle Termine angezeigt bekommt, die man selbst angelegt hat.

Ich möchte jedoch erreichen, dass Benutzer alle angelegten Termine angezeigt bekommen (egal, ob selbst angelegt oder nicht), sofern diese Termine einer Gruppe zugeordnet sind, deren Mitglieder die Benutzer sind. Andernfalls sollen bestehende Termine in der Liste nicht aufgeführt werden.

Es mag komisch klingen. Diese Änderung macht in meinem Fall jedoch großen Sinn. Die kleinen Sprach- und Template-Änderungen stellen kein Problem für mich dar. Nur die Änderungen in der

Code: Alles auswählen

functions_calendar.php
bereiten mir als sporadischem Laienbastler, der zudem schon seit Jahren nicht mehr aktiv war, enorme Probleme.

Den Teil, auf den es meiner Meinung nach im weiteren Sinne ankommt, stelle ich nachfolgend ein:

Code: Alles auswählen

/* used to generate the UCP "manage my events" module */
function display_posters_next_events_for_x_days( $x, $user_id )
{
	global $auth, $db, $user, $config, $template, $date, $available_etype_colors, $available_etype_images, $available_etype_display_names, $month_sel_code, $day_sel_code, $year_sel_code, $mode_sel_code;

	global $phpEx, $phpbb_root_path;

	$etype_url_opts = get_etype_url_opts();

	// Is the user able to view ANY events?
	$user_can_view_events = false;
	if ( $auth->acl_get('u_calendar_view_events') )
	{

		init_calendar_data();
		$subject_limit = get_calendar_config_value("display_truncated_name", 0);
		$group_options = get_sql_group_options($user->data['user_id']);
		$etype_options = get_etype_filter();

		$start_temp_date = time();
		//$end_temp_date = $start_temp_date + 31536000;
		$end_temp_date = $start_temp_date + ( $x * 86400 );
		// find all day events that are still taking place
		$sort_timestamp_cutoff = $start_temp_date - 86400+1;

		$disp_date_format = get_calendar_config_value("date_format", 'M d, Y');
		$disp_date_time_format = get_calendar_config_value("date_time_format", 'M d, Y h:i a');

		// don't list events that are more than 1 year in the future
		$sql = 'SELECT * FROM ' . CALENDAR_EVENTS_TABLE . '
				WHERE poster_id = '.$user_id.' AND( (event_access_level = 2) OR
					(poster_id = '.$db->sql_escape($user->data['user_id']).' ) OR
					(event_access_level = 1 AND ('.$group_options.') ) ) '.$etype_options.' AND
				((( event_start_time >= '.$db->sql_escape($start_temp_date).' AND event_start_time <= '.$db->sql_escape($end_temp_date).' ) OR
				 ( event_end_time > '.$db->sql_escape($start_temp_date).' AND event_end_time <= '.$db->sql_escape($end_temp_date).' ) OR
				 ( event_start_time < '.$db->sql_escape($start_temp_date).' AND event_end_time > '.$db->sql_escape($end_temp_date)." )) OR (sort_timestamp > ".$db->sql_escape($sort_timestamp_cutoff)." AND sort_timestamp <= ".$db->sql_escape($end_temp_date)." AND event_all_day = 1) ) ORDER BY sort_timestamp ASC";
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			$events['EVENT_URL'] = append_sid("{$phpbb_root_path}calendar.$phpEx", "view=event&calEid=".$row['event_id'].$etype_url_opts);
			$events['IMAGE'] = $available_etype_images[$row['etype_id']];
			$events['COLOR'] = $available_etype_colors[$row['etype_id']];
			$events['ETYPE_DISPLAY_NAME'] = $available_etype_display_names[$row['etype_id']];

			$events['FULL_SUBJECT'] = censor_text($row['event_subject']);
			$events['SUBJECT'] = $events['FULL_SUBJECT'];
			if( $subject_limit > 0 )
			{
				if(utf8_strlen($events['SUBJECT']) > $subject_limit)
				{
					$events['SUBJECT'] = truncate_string($events['SUBJECT'], $subject_limit) . '...';
				}
			}
			$events['IS_RECURRING'] = $row['recurr_id'];
			$events['RECURRING_TXT'] = get_recurring_event_string_via_id( $row['recurr_id'] );

			$poster_url = '';
			$invite_list = '';
			get_event_invite_list_and_poster_url($row, $poster_url, $invite_list );
			$events['POSTER'] = $poster_url;
			$events['INVITED'] = $invite_list;
			$events['ALL_DAY'] = 0;
			if( $row['event_all_day'] == 1 )
			{
				list($eday['eday_day'], $eday['eday_month'], $eday['eday_year']) = explode('-', $row['event_day']);
				$row['event_start_time'] = gmmktime(0,0,0,$eday['eday_month'], $eday['eday_day'], $eday['eday_year'])- $user->timezone - $user->dst;
				$row['event_end_time'] = $row['event_start_time']+86399;
				$events['ALL_DAY'] = 1;
				$events['START_TIME'] = $user->format_date($row['event_start_time'], $disp_date_format, true);
				$events['END_TIME'] = $user->format_date($row['event_end_time'], $disp_date_format, true);
			}
			else
			{
				$events['START_TIME'] = $user->format_date($row['event_start_time'], $disp_date_time_format, true);
				$events['END_TIME'] = $user->format_date($row['event_end_time'], $disp_date_time_format, true);
			}
			//$events['START_TIME'] = $user->format_date($row['event_start_time']);
			//$events['END_TIME'] = $user->format_date($row['event_end_time']);



			$edit_url = "";
			$edit_all_url = "";
			if( $user->data['is_registered'] && $auth->acl_get('u_calendar_edit_events') &&
				(($user->data['user_id'] == $row['poster_id'])|| $auth->acl_get('m_calendar_edit_other_users_events') ))
			{
				$edit_url = append_sid("{$phpbb_root_path}calendarpost.$phpEx", "mode=edit&calEid=".$row['event_id']."&calD=".$date['day']."&calM=".$date['month_no']."&calY=".$date['year']);
				if( $row['recurr_id'] > 0 )
				{
					$edit_all_url = append_sid("{$phpbb_root_path}calendarpost.$phpEx", "mode=edit&calEditAll=1&calEid=".$row['event_id']."&calD=".$date['day']."&calM=".$date['month_no']."&calY=".$date['year']);
				}
			}
			$delete_url = "";
			$delete_all_url = "";
			if( $user->data['is_registered'] && $auth->acl_get('u_calendar_delete_events') &&
				(($user->data['user_id'] == $row['poster_id'])|| $auth->acl_get('m_calendar_delete_other_users_events') ))

			{
				$delete_url = append_sid("{$phpbb_root_path}calendarpost.$phpEx", "mode=delete&calEid=".$row['event_id']."&calD=".$date['day']."&calM=".$date['month_no']."&calY=".$date['year'].$etype_url_opts);
				if( $row['recurr_id'] > 0 )
				{
					$delete_all_url = append_sid("{$phpbb_root_path}calendarpost.$phpEx", "mode=delete&calDelAll=1&calEid=".$row['event_id']."&calD=".$date['day']."&calM=".$date['month_no']."&calY=".$date['year'].$etype_url_opts);
				}
			}
			$events['U_EDIT'] = $edit_url;
			$events['U_EDIT_ALL'] = $edit_all_url;
			$events['U_DELETE'] = $delete_url;
			$events['U_DELETE_ALL'] = $delete_all_url;


			$template->assign_block_vars('myevents', $events);
		}
		$db->sql_freeresult($result);
	}
}
Ich wäre sehr dankbar, so mir denn jemand helfen könnte.

Beste Grüße
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von Miriam »

Ich möchte jedoch erreichen, dass Benutzer alle angelegten Termine angezeigt bekommen (egal, ob selbst angelegt oder nicht), sofern diese Termine einer Gruppe zugeordnet sind, deren Mitglieder die Benutzer sind.
Diese Funktion ist prinzipiell schon da, denn beim Anlegen eines Termins gibt es auch folgende Optionen, die jeweils eingestellt werden sollten:
  • Wer darf diesen Termin sehen?
  • Welche Gruppe darf diesen Termin sehen?
Es ist also (scheinbar) mehr oder minder eine Frage der "Disziplin", Termine und die Berechtigungen diese zu sehen, gleich beim Erstellen einzupflegen.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von HabNurNeFrage »

Hi,

Folgendes könntest Du testweise mal in die functions_calendar einbauen.

Finden:

Code: Alles auswählen

// no matter what the author can always see their own events
    if( $user_id === $event_data['poster_id'] ) 
Ersetzen durch:

Code: Alles auswählen

// no matter what the author can always see their own events
    // XXX mit Group-ID ersetzen, die alle Events sehen koennen sollen 
    // mehrere Gruppen authorisieren? Fuer jede einmal hinzufuegen: || ( $user->data['group_id'] === XXX )
    if( $user->data['group_id'] === XXX ) 
XXX darin müsste dann noch durch die Group-ID ersetzt werden, die Du authorisieren willst. Näheres im Comment :wink:

Vielleicht führt das zum gewünschten Ergebnis, vielleicht nicht => ist ungetestet...

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von Miriam »

Wenn die Vorgehensweise denn so sein soll, wäre hier die Feststellung der Gruppenmitgliedschaften ggf. unter zu Hilfenahme der Funktion group_memberships() sinnvoll.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von HabNurNeFrage »

Hi,

dass User öfter auch Mitglied in mehreren Gruppen sind, ist mich doch glatt kurz entfallen :oops:

Dann würde das hier an selbiger Stelle eventuell den Zweck erfüllen:

Code: Alles auswählen

if (!function_exists('group_memberships'))
{
    include_once($phpbb_root_path . 'includes/functions_user.'.$phpEx);
}

// XX ist die Gruppen-ID, die Events sehen soll, Mods und Admins sehen alle Events, auch wenn sie nicht in der Kalender-Gruppe sind:
if (group_memberships(XX,$user->data['user_id'],true) || $auth->acl_get('a_') || $auth->acl_get('m_')) 
XX ist die ID der Kalender-Nutzergruppe und wenn Moderatoren eventuell ausgeschlossen sein sollen, entferne daraus || $auth->acl_get('m_').

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von Miriam »

Eigentlich hatte ich das etwas anders vor meinem geistigen Auge :lol:
Wenn der Lesende auch in mindestens einer Gruppe ist, in der der Terminersteller ist, dann kann er, sie, es den Termin sehen. Die Abfrage der Admin- / Moderatorberechtigung ist natürlich noch ein Bonus.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von HabNurNeFrage »

mario d. hat geschrieben:... sofern diese Termine einer Gruppe zugeordnet sind, deren Mitglieder die Benutzer sind. ...
Hi,

da fällt mir gerade auf, dass diese Vorgabe noch einfacher gehen müsste:

Code: Alles auswählen

if (!function_exists('group_memberships'))
{
    include_once($phpbb_root_path . 'includes/functions_user.'.$phpEx);
}

if (group_memberships($event_data['group_id'],$user->data['user_id'],true))
@Miriam: Was schwebte Dir denn vor?

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Frage zu Calendar Mod von alightner

Beitrag von Miriam »

Am besten, wir warten mal auf eine Reaktion des TS.
Ohne es mir genau angeschaut zu haben, meine ich, daß diese Gruppenproblematik beim Erstellen eines Termins erschlagen werden kann.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
mario d.
Mitglied
Beiträge: 220
Registriert: 04.12.2003 20:18

Re: Frage zu Calendar Mod von alightner

Beitrag von mario d. »

Hallo zusammen!

Danke schon einmal für tatkräftigen Antworten.
Miriam hat geschrieben:Ohne es mir genau angeschaut zu haben, meine ich, daß diese Gruppenproblematik beim Erstellen eines Termins erschlagen werden kann.
Das bezweifle ich stark, da in der Übersicht "Meine Termine verwalten" nur die Termine angezeigt werden, die man persönlich erstellt hat. Dort sollen jedoch alle Termine angezeigt werden, gleich welcher Benutzer sie erstellt hat. Einschränkung soll lediglich sein, dass der jeweilige Benutzer Mitglied einer bestimmten Gruppe sein soll.

Beispiel:
Benutzer X ist jeweils Mitglied in den Gruppen A und B. Er ruft das Modul "Meine Termine verwalten" im UCP (welches dann selbstverständlich umbenannt sein wird)auf und bekommt alle Termine angezeigt, die eingetragen wurden, auch die, die er nicht persönlich angelegt hat. Es wird jedoch eine Filterung dahingehend vorgenommen, dass ihm nur die Termine angezeigt werden, die mindestens die Adressatenmarkierung "Gruppe B" beim Erstellen des Termins erhalten haben. Folglich bekommt X sämtliche Termine mit der Adressatenmarkierung "Gruppe B" angezeigt, nicht jedoch diese, die lediglich die Adressatenmarkierung der "Gruppe A" haben.

Momentan stehe ich ziemlich unter Druck, sodass ich nur kurz und knapp antworten und die hier dankenswerterweise zur Verfügung gestellten Codes erst am Mittwochabend testen kann. Ich werde dann umgehend berichten.

Beste Grüße
Mario
mario d.
Mitglied
Beiträge: 220
Registriert: 04.12.2003 20:18

Re: Frage zu Calendar Mod von alightner

Beitrag von mario d. »

Hallo,

an dieser Stelle noch einmal vielen lieben Dank für die bisherigen Antworten. Ich habe die zur Verfügung gestellten Codes verbaut und getestet. Jedoch leider ohne Erfolg.

In der Kalenderansicht soll alles so bleiben, wie es ist. Aus diesem Grund hilft mir die vorhandene Gruppendiversikationsmöglichkeit beim Anlegen eines Termins nicht weiter. Ich will an dieser Stelle auf mein Beispiel in meinem vorherigen Post verweisen. Wenn die Darstellung im UCP-Modul "Meine Termine verwalten" nach Gruppenzugehörigkeit unterscheiden und gleichzeitig dort alle angelegten Termine anzeigen könnte, wäre ich sehr glücklich. Wichtig ist, dass beispielsweise Termine, die der Adressatengruppe A zugeordenet werden, nicht angezeigt werden. Im Gegenzug jedoch jene Termine, die der Adressatengruppe B zugeordnet sind, sofern der jeweilige Benutzer Mitglied dieser Gruppe ist.

Beste Grüße
Mario
Antworten

Zurück zu „[3.0.x] Mod Support“