Seite 1 von 2

Geburtstage werden bei Konvert. nicht korrekt übernommen

Verfasst: 25.07.2008 17:41
von Helmut
Hallo,

bei meinen Versuchen für die Konvertierung von 2.0.3 nach 3.0.2 ist mir eine kleine Ungereimtheit aufgefallen und zwar werden die Geburtstage nicht im richtigen Format übernommen.

Bei der Konvertierung wird das Datum des Geburtstages wie folgt in die Tabelle phpbb_users Spalte user_birthday eingetragen:

Wenn kein Geburtstag angegeben war

Code: Alles auswählen

0- 0-   0
Wenn ein Geburtstag eingetragen war

Code: Alles auswählen

25-07-1974
Dies führt dann dazu, dass die Geburtstage dann nicht im neuen Forum 3.0.2 angezeigt werden. Wenn ich aber nun den oben genannten Geburtstag im Profil bearbeite und wieder abspeichere, dann wird er wie folgt eingetragen:

Code: Alles auswählen

25- 7-1974
Es wird also das Datum dann ohne führende Null in der Spalte user_birthday abgespeichert und somit wird auch der Geburtstag angezeigt. Das scheint mir ein Fehler in der Konvertierung zu sein in der Datei functions_phpbb20.php. :(

Was kann ich nun machen, damit die Geburtstage trotzdem angezeigt werden bzw. wie muss ich die Datei ändern, damit das richtige Format bei der Konvertierung eingetragen wird?



[EDIT]
Ich habe gerade noch einmal die Suche bemüht, bin aber nicht auf eine Lösung gekommen. Dafür wurde hier unter Punkt 6. auch schon von diesem Verhalten berichtet.

Gruß Helmut

Verfasst: 27.07.2008 18:36
von Helmut
Hallo,

mal hochschieb ..... :wink:

Bis jetzt habe ich noch keine Lösung gefunden um das Problem mit der Konvertierung der Geburtstage zu beseitigen. :(

Gruß Helmut

Verfasst: 30.07.2008 22:19
von Helmut
Hallo,

und nochmal hochschieb ... :oops:

Gruß Helmut :wink:

Verfasst: 31.07.2008 01:20
von bantu
Benutz mal die Suche. Ich habe dazu schon einige Beiträge verfasst, kannst also nach meinem Nick suchen.

Es gibt da einen Bug in PHP selbst, bzw. es liegt daran wie der Birthday Mod (der übrigens auf .com noch nicht mal validiert wurde) die Daten speichert.

Der Bug wurde, soweit möglich, umgangen. Auf einer höheren PHP-Version hast du unter Umständen erfolgt.

Edit: Vielleicht wird der Geburstagsmod, den du verwendest, auch einfach nicht unterstützt. Das ist wahrscheinlicher.

Verfasst: 03.08.2008 21:38
von Helmut
Hallo bantu,

der Geburtstagmod den ich im 2.0.3 verwende, ist der von nils und du hattest mir ja hier schon mal geholfen. Das Datum selber wird ja dank deiner Hilfe richtig übernommen, nur die Formatierung passt nicht genau. Ich bin inzwischen etwas weiter gekommen, in der functions_phpbb20.php habe ich das hier

Code: Alles auswählen

return gmdate('d-m-Y', $birthday * 86400 + 1);
durch diesen Code ersetzt.

Code: Alles auswählen

return gmdate('j-n-Y', $birthday * 86400 + 1);
Damit wird das Datum ohne führende Null übernommen, nur nicht so wie es soll. Jetzt wird z.B. "1-8-1995" eingetragen, es soll aber " 1- 8-1995" eingetragen werden. Wie muss ich nun den Code ändern, dass immer für den Tag und den Monat zwei Stellen verwendet werden, auch wenn die Zahl selber nur einstellig ist?

Gruß Helmut

Verfasst: 05.08.2008 21:18
von Helmut
Hallo,

und nochmal hochschieb ...

Ich habe noch nicht rausgefunden, wie ich einen Platzhalter bzw. das Leerzeichen für Tage und Monate von 1 bis 9 einfüge, damit es mit der Auswertung klappt.

Gruß Helmut :wink:

Verfasst: 15.08.2008 17:22
von Helmut
Hallo,

und nochmal hochschieb ...

Ich bin leider noch nicht weitergekommen, deshalb benötige ich etwas Hilfe bei meinem Problem. :(

Gruß Helmut

Verfasst: 15.08.2008 17:29
von Dr.Death
Hm,

schau mal in die Datei:

includes/ucp/ucp_profile.php

Da wird mittels "explode" das Datum auseinander gepflückt:

Code: Alles auswählen

					$data['bday_day'] = $data['bday_month'] = $data['bday_year'] = 0;

					if ($user->data['user_birthday'])
					{
						list($data['bday_day'], $data['bday_month'], $data['bday_year']) = explode('-', $user->data['user_birthday']);
					}
Das zusammenkleben erfolgt hier:

Code: Alles auswählen

					if ($config['allow_birthdays'])
					{
						$validate_array = array_merge($validate_array, array(
							'bday_day'		=> array('num', true, 1, 31),
							'bday_month'	=> array('num', true, 1, 12),
							'bday_year'		=> array('num', true, 1901, gmdate('Y', time()) + 50),
							'user_birthday' => array('date', true),
						));
					}
...

Code: Alles auswählen

						if ($config['allow_birthdays'])
						{
							$sql_ary['user_birthday'] = $data['user_birthday'];
						}

						$sql = 'UPDATE ' . USERS_TABLE . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE user_id = ' . $user->data['user_id'];
						$db->sql_query($sql);

Verfasst: 16.08.2008 16:50
von Helmut
Hallo Dr.Death,

danke dir für den Tipp mit dem "explode", darauf bin ich garnicht gekommen. Damit hat es geklappt, jetzt werden die Geburtstage vom Birthdaymod Version 1.4.6 (Niels Chr. Denmark < ncr@db9.dk > (Niels Chr. Rød) HTTP://mods.db9.dk) von meinem 2.0.3 korrekt übernommen. Der Codeabschnitt in der functions_phpbb20.php sieht jetzt so aus:

Code: Alles auswählen

/**
* Convert Birthday from Birthday MOD to phpBB Format
*/
function phpbb_get_birthday($birthday = '')
{
	if (defined('MOD_BIRTHDAY_TERRA'))
	{
		$birthday = (string) $birthday;

		// stored as month, day, year
		if (!$birthday)
		{
			return ' 0- 0-   0';
		}

		// We use the original mod code to retrieve the birthday (not ideal)
		preg_match('/(..)(..)(....)/', sprintf('%08d', $birthday), $birthday_parts);

		$month = $birthday_parts[1];
		$day = $birthday_parts[2];
		$year =  $birthday_parts[3];

		return sprintf('%2d-%2d-%4d', $day, $month, $year);
	}
	else
	{
		$birthday = (int) $birthday;

		if (!$birthday || $birthday == 999999)
		{
			return ' 0- 0-   0';
		}
		else
		{
			$birthday2 = gmdate('j-n-Y', $birthday * 86400 + 1);
			
			$data['bday_day'] = $data['bday_month'] = $data['bday_year'] = 0;

			list($data['bday_day'], $data['bday_month'], $data['bday_year']) = explode('-', $birthday2);						
		}

		return sprintf('%2d-%2d-%4d', $data['bday_day'], $data['bday_month'], $data['bday_year']);		
	}
}
Der zweite Teil vom Code ab "else" ist für den Mod von Nils notwendig. Du kannst es je selber noch testen und vielleicht als Verbesserungsvorschlag für die nächste Version vom phpbb melden.

Gruß Helmut :wink:

Re: Geburtstage werden bei Konvert. nicht korrekt übernommen

Verfasst: 06.02.2009 15:07
von Dotwin
Hallo,

so wie ich das jetzt verstanden habe muss man vor der konvertierung etwas an der functions_phpbb20.php ändern.
Nun ist mir aber eben erst aufgefallen, dass die Geburtstage falsche übernommen worden sind (Monat und Tag sind vertauscht).
Das Board läuft also schon etwas und deswegen kann ich die Konvertierung nciht nochmal starten da sonst ja die neuen Beiträge weg sind.
Gibt es eine Möglichkeit das Geburtstagsdatum noch naträglich zu ändern?
Im phpbb 2.0.23 hatte ich den Birthday-Mod 1.5.7 von Niels verbaut.

Vielen Dank für die Hilfe

Gruß
Dotwin