Callite - Calendar Lite 1.46b mydateformat-Korrektur gesucht

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Callite - Calendar Lite 1.46b mydateformat-Korrektur gesucht

Beitrag von schmidtedv »

Deine phpBB Version: 2.0.16
Typ Deines phpBB Forums: Standard phpBB (auch Vanilla genannt)
MODs: Ja
Dein Wissensstand: Fortgeschritten
Link zu Deinem Forum: http://support.schmidtedv.de

PHP Version:
MySQL Version:


Was hast Du gemacht, bevor das Problem aufgetreten ist?
den MOD noch nicht installiert, höhö


Was hast Du bereits versucht um das Problem zu lösen?
viel :-)



Fehlerbeschreibung und Nachricht

So, mal eine Bitte die soooo schwer doch eigentlich nicht zu lösen sein kann:

die function mydateformat reagiert ja empfindlich auf die Zeitzone (hat sie, wie ich inzwischen suchend feststellen durfte, schon immer)...dennoch, zumindest die function cal_create_date habe ich mir inzwischen korrigiert (zumindest glaube ich das).

Original cal_lite_functions.php:

Code: Alles auswählen

function cal_create_date($format, $gmepoch, $tz) 
{
global $board_config, $lang;
static $translate;

if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}

return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}
Korrektur (übernommen aus der functions.php):

Code: Alles auswählen

function cal_create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;

if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}

return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
}
Wenn ich allerdings die Original function mydateformat mit

Code: Alles auswählen

return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone'])), $translate) : @gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone']));
verwende, geht's bei meinem GMT+1 schief....nehme ich einfach die Prüfung raus

Code: Alles auswählen

return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time ), $translate) : @gmdate($dateformat, $gmt_time );
habe ich zwar korrekte Anzeigen sowohl für Start- und Endzeit...aber keine Anpassung mehr an eine andere Zeitzone, will sagen ein Termin am 04.05.2000, 14:00 bleibt unverändert und wird z.B. bei GMT+2 nicht zu (wenn ich das jetzt richtig überlege, wäre es minus?) 04.05.2000, 13:00...

Der gesamte aufbau der function mydateformat im Original ist hier

Code: Alles auswählen

function mydateformat($thisdate, $dateformat='d M Y G:i', $span=0)
{
	global $cal_config, $lang, $board_config, $userdata;

	if (!empty($cal_config['cal_dateformat'])) {
		$dateformat = $cal_config['cal_dateformat'];
	} elseif (empty($dateformat)) {
		$dateformat = 'd M Y G:i';	// MOD set to default as it's most likely this.
	}

	if ( !empty($userdata['user_lang'])) {
		$board_config['default_lang'] = $userdata['user_lang'];
	}

	// date comes in as the following: 
	$myr = substr($thisdate, 0, 4);
	$mym = substr($thisdate, 5, 2);
	$myd = substr($thisdate, 8, 2);
	$myh = substr($thisdate, 11, 2);
	$myn = substr($thisdate, 14, 2);
	$mys = substr($thisdate, 17, 2);

	if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
		// Need to strip out any TIME references so...
		$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
		while (list(,$val) = each ($timerefs))
			{
			$dateformat = ereg_replace($val, "", $dateformat);
			}
		// strip out any characters used for time
		$dateformat = ereg_replace('[:\.]', " ", $dateformat);
	}

	// Adjust for the timezone 
	if ( $userdata['session_logged_in'] ) {
		$board_config['board_timezone'] = $userdata['user_timezone'];
	}

	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}
//	$returnstamp = mktime ($myh,$myn,$mys,$mym,$myd,$myr);
//	return ( !empty($translate) ) ? strtr(@date($dateformat, $returnstamp), $translate) : @date($dateformat, $returnstamp);

	$gmt_time = gmmktime ($myh,$myn,$mys,$mym,$myd,$myr);
	return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone'])), $translate) : @gmdate($dateformat, $gmt_time + (3600 * $board_config['board_timezone']));
}
und meine bisherige, am ende nur unzureichend funktionierende Änderung wäre

Code: Alles auswählen

function mydateformat ($thisdate, $dateformat='d.m.Y, H:i', $span=0)
{
	global $cal_config, $lang, $board_config, $userdata;

	if (!empty($cal_config['cal_dateformat'])) {
		$dateformat = $cal_config['cal_dateformat'];
	} elseif (empty($dateformat)) {
		$dateformat = 'd.m.Y, H:i';	// MOD set to default as it's most likely this.
	}

	if ( !empty($userdata['user_lang'])) {
		$board_config['default_lang'] = $userdata['user_lang'];
	}

	// date comes in as the following: 
	$myr = substr($thisdate, 0, 4);
	$mym = substr($thisdate, 5, 2);
	$myd = substr($thisdate, 8, 2);
	$myh = substr($thisdate, 11, 2);
	$myn = substr($thisdate, 14, 2);
	$mys = substr($thisdate, 17, 2);

	if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
		// Need to strip out any TIME references so...
		$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
		while (list(,$val) = each ($timerefs))
			{
			$dateformat = ereg_replace($val, "", $dateformat);
			}
		// strip out any characters used for time
		$dateformat = ereg_replace('[:\.]', " ", $dateformat);
	}

	// Adjust for the timezone 
	if ( $userdata['session_logged_in'] ) {
		$board_config['board_timezone'] = $userdata['user_timezone'];
	}

	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}
//	$returnstamp = mktime ($myh,$myn,$mys,$mym,$myd,$myr);
//	return ( !empty($translate) ) ? strtr(@date($dateformat, $returnstamp), $translate) : @date($dateformat, $returnstamp);

	$gmt_time = gmmktime ($myh,$myn,$mys,$mym,$myd,$myr);
	return ( !empty($translate) ) ? strtr(@gmdate($dateformat, $gmt_time ), $translate) : @gmdate($dateformat, $gmt_time );
}
wobei ich d M Y G:i schon in meinen Standard d.m.Y, H:i übertragen habe (was allerdings nichts mit diesem Problem direkt zu tun hat)

Um hier nun eine korrekte Endzeit im Format dd.mm.yyyy, hh:mm zu erhalten, habe ich mir erlaubt in der cal_lite.php

Code: Alles auswählen

$start_date = mydateformat($row['stamp'], $userdata['user_dateformat']);
$end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 1);
in (weiß der Teufel, wie ich drauf gekommen bin, LOL)

Code: Alles auswählen

$start_date = mydateformat($row['stamp'], $userdata['user_dateformat']);
$end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 0);
zu ändern...einzig (und da hilft auch leider kein angehangenes , 0 oder , 1 eine Terminangabe OHNE Zeitangabe macht mir noch Ärger, da dann das Startdatum im Format dd mm yyyy, erscheint anstatt dd.mm.yyyy, hh:mm ...aber immerhin, LOL bleibt die Endzeit in diesem Falle bei z.B. 05.04.2000, 00:00 (wobei ich mich an die Ersetzung einer Stunde in 00:00 bei Terminen über einen Tag hinaus bzw. im Falle KEINER Zeitangabe erstmal gewöhnen mußte...) Da fällt mir gerade ein....ich schau mal nach dieser 00:00-funktion, das wäre in so einem Fall eigentlich doch auch für $start_date möglich, oder?

Ich wäre sehr froh, wenn sich hier eine zündende Idee auftun könnte :-) Bisher bin ich ja nur durch abgucken und ohne php-Kentnisse auch schon recht weit gekommen.

PS: Habe die Languagedatei und viele kleine §lang-Angaben geändert und das Layout auch mit OXPUS Birthday-AddOn mal aufgeräumt, also wenn die obigen Lösungen da sind und alles richtig läuft geb ich die Dateien gerne weiter :-)

EDIT (12:40): Ok, also die richtige Anzeige des Startdatums für einen Termin ohne Zeitangabe krieg ich nicht hin...aber stattdessen wäre meine Idee, in der cal_lite.php die Prüf-Funktion, ob ein Datum eingegeben wurde, auf eine Zeitangabe zu erweitern...die Stelle wäre diese:

Code: Alles auswählen

	// Check that date info has been set.
	if ($cl_m != '' && $cl_d != '' && $cl_y != '' && $cl_em != '' && $cl_ed != '' && $cl_ey != '') {
		$submitdate = mktime (23,59,59,$cl_m,$cl_d,$cl_y);
		$submitenddate = mktime (23,59,59,$cl_em,$cl_ed,$cl_ey);
	}
	else {
		message_die(GENERAL_ERROR, $lang['No date']);
...was da wie zu ändern wäre und welche $cl_ 's noch an anderer Stelle hinzugefügt werden müßten ist mir allerdings zu kompliziert/heikel bei meinem Sachverstand...seufz


So, letzte Bitte: Im Calendar Lite wird ja wie erwähnt bei Tag-Übergreifenden Terminen die Endzeit 00:00 angehängt. finde ich persönlich nicht so gelungen...kann man die Zeit nicht irgendwie aus dem Datum entfernen wenn schon keine endzeit eingegeben werden kann, so dass nur noch z.B. 04.05.2000 da steht? ...EDIT (13:00): Ok, habs gefunden...allerdings setze ich damit dann d.m.Y für jeden Benutzer in der Ansicht (nicht schlimm, da ich d.m.Y H:i eh auch als Standardvorgabe habe...). In der cal_lite.php ersetze ich $end_date = mydateformat($row['eventspan'], $userdata['user_dateformat'], 0); durch $end_date = mydateformat($row['eventspan'], $dateformat='d.m.Y', 0); und umgehe damit zwar das individuelle Benutzerformat (hier bei uns aber in der Regel eh d.m.Y) erhalte aber zumindest nur die Tagesanzeige (gilt allerdings auch für alle anderen Termine, aber die allgemeine Aufrechnung von einer Std. bei einem termin mit Zeitangabe find ich eh murks......
Zuletzt geändert von schmidtedv am Di 05.Jul, 2005 13:17, insgesamt 3-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öhm, das Problem mit der Zeitzone ist immer serverabhängig, also in welcher Zeitzone der läuft und was Standard auf dem Board ist.
Das kann man nie pauschalieren und muss ggf. manuell alles anpassen.
Ich habe das selber oft genug bei anderen Boards erlebt, die eben hier -/+ eine Stunde rechnen müssen und das pauschal, um die Differenz der realen Zeit zur Serverzeit auszugleichen.
Eine Univerallösung gibt es dafür also nicht.
Als Faustregel kann man nur sagen: Stimmt die Zeitzone des Servers mit der des Boards überein oder ist der Server auf GMT 0, hat man die wenigsten Probleme. Sobald der Admin oder User in grob abweichenden Zeitzonen operieren oder das Board mehr als -/+ 2 Stunden von GMT 0 abweicht, fangen die Probleme an.
Lösungen, diese Probleme zu beheben habe ich zuletzt bei meinem Meeting Mod genannt bekommen: Der betreffende User muss pauschal +2 rechnen, damit die Angaben stimmen. Auf anderen Boards in GMT 0 bis GMT 2 (Bei Sommerzeit) gibts dabei hingegen keine Probleme!

Dein Ansatz ist hier daher auch erstmal korrekt, wenn Du eine pauschale "Korrektur" vornimmst.
Der Calendar Lite hat eben schon immer das Problem mit dem Datumwechsel gehabt und das liegt einfach an der Natur der Sache, wie die Zeit mit dem Kalender verwaltet wird (nämlich per default-Funktion!)
In der Pro-Version ist das Problem dagegen kein Thema, da diese die Zeit komplett anders berechnet und aufbereitet. Nur ist beides nicht kompatibel zueinander, also ein einfacher Austausch nicht möglich und auch vom Autor ebensowenig erlaubt!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Nunja, ich würde mir ja den PRO zulegen, allerdings wenn ich den in meinem Komplettpaket verbauen würde, wäre das lizenzrechtlich nicht sehr fördernd :-) Mojave's MyCalendar war bisher immer recht nett, aber der Ansatz OHNE "Kalender-Forum" vom Callite ist da netter, finde ich und der Topic Calendar ist irgendwie mit meinem Style etc. "a pain in the a.."

Aber mal abgesehen von der Zeitzone, was hälst Du von meinen anderen Ideen, Vorschlägen, Problemen? :-)
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Kann ich weniger zu sagen, da ich mich mit der Lite-Version weniger bis garnicht beschäftige (ausser dem Update meiner Add-Ons).
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Schade, ich dachte zumindest wegen deiner AddOns sei Dir der MOD geläufiger als den 1000 Unwissenden, die sich im Forum von Martin mit dem MOD beschäftigen...
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich hatte den Kalender ja auch zunächst installiert, damals, und mich intensiv damit beschäftigt, aber die neueren Versionen kenne ich nicht mehr so gut.
Das Zeitproblem sollte auch besser Martin lösen. Er hat schliesslich auch die komplexe Zeitberechnung gemacht...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Ja, ich hab' Martin diese dinge auch geschildert, aber wenn ich so den anderen Posts folge scheint sein Interesse an seinem Lite-MOD doch eher dürftig zu sein, bzw. es gibt so gut wie nichts an hilfreichen Beiträgen seinerseits bis zu diesem Punkt...nun ist halt gerade die 1.46 raus mit ein paar kleinen Änderungen...allerdings was die richtigen Probleme angeht ist alles beim alten und man muß sich immernoch, wie ich nun, selber helfen...ich hatte mir eigentlich mehr erhofft als ich von der 1.46 hörte....auch steht z.B. nirgendwo, das und warum keine Endzeitfunktion drin ist bzw. wie das Problem mit der nicht stattfindenden Mail an den Admin bei "wartenden" Terminen zu beheben ist....komischer Coder der eine neue Version rausbringt aber eigentlich nichts verändert...steht nur überall in Jahrealten Beiträgen "that's on my Todo-List" LOL :-)

BTW: Letztendlich für diesen Kalender hatte ich mich eigentlich wegen deiner AddOns entschieden, da ich dachte, wenns hier Probleme gibt, Du weißt Bescheid, hrrhrrhrr :-)
Zuletzt geändert von schmidtedv am Di 05.Jul, 2005 19:35, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Tja, ich habs wie Martin: Der Calendar Pro ist im kommen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Nunja, also ich hab ihn nun einigermaßen gut am laufen...einzig die Meldung, das eine zeit eingegeben werden muß (zusätzlich zu Datum, damit auch da das Layout stimmt) krieg ich nicht hin...

Ich hoffe das geht ok, wenn ich mal 2 bilder als anlage anhänge, da ich doch ein bisserl Stolz auf mein Ergebnis bin :-)

Am Besten gefällt mir meine Ausarbeitung der Linien mittels neuer .row's :-)
Zuletzt geändert von schmidtedv am Mi 06.Jul, 2005 14:19, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Schaut doch perfekt aus!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

und schwups...nach all der arbeit hab ich's wieder gelöscht...irgendwie ist der Calendar Lite einfach nicht sauber gecodet....nehm ich lieber deinen Meeting MOD :-)
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Der Kalender ist sogar SEHR sauber gecodet, man sollte nur keine Beta-Version als fehlerfrei betrachten ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

ok, hab' mich falsch ausgedrückt....die zeitverwaltung bzw die generierung der anzeige ist mir zu frickelig geworden wenn ich zudem noch deine eventliste verbaue...im endeffekt müßte ich es bei der Anzeige "2005 08 07 12:20" belassen und das gefällt mir nicht, seufz
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann verwende den Topic Calendar. Der soll auch sehr gut sein...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

:-) ja, der ist gut, aber leider bin ich da damals an einer gescheiten Style-Umsetzung gescheitert...ist auch wieder im Papierkorb gelandet...an sich ist ein Kalender eh nur für Termine oder Geburtstage interessant...da ist dein Meeting MOD schon nah dran perfekt zu sein für meine Vorstellungen einer Terminverwaltung...
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Antworten