diff --git a/docs/changelog/5.x.x.txt b/docs/changelog/5.x.x.txt index 4bd176ca4..524d8ec3e 100644 --- a/docs/changelog/5.x.x.txt +++ b/docs/changelog/5.x.x.txt @@ -1,5 +1,7 @@ 5.5.0 - Rewrote the discussion system and added many new features in the process. + - Made the username field in the database unique; + - Fixed a display bug in the Data Form. (Thanks to Christian Kocourek.) - Added external database group privileges. (Thanks to Andy Grundman.) - Added support for encryptLogin user setting. (Thanks to Hal Roberts.) - Added anonymous response option to Survey. (Thanks to Andy Grundman.) @@ -15,6 +17,8 @@ - Enhanced HTMLArea editor to include table editing. (Thanks to Irving Carrion.) - Fixed a bug where reinvoking www_createAccountSave could produce duplicate usernames in the database. (Thanks to Martin Kamerbeek.) + - Fixed a bug in the 5.4.3-5.4.4 upgrade script that some users experienced + with null values in their DataForm. 5.4.4 - Updated Finnish translation. (Thanks to Markus Hynna.) diff --git a/docs/credits.txt b/docs/credits.txt index 5e8c6dcc6..dbc74cf91 100644 --- a/docs/credits.txt +++ b/docs/credits.txt @@ -25,6 +25,7 @@ Contributing Developers..............Peter Beardsley / Appropriate Solutions Chris Jackson Koen de Jonge / ProcoliX Martin Kamerbeek / ProcoliX + Christian Kocourek John W. Krahn Len Kranendonk Christophe Marcant diff --git a/docs/upgrades/upgrade_5.4.3-5.4.4.sql b/docs/upgrades/upgrade_5.4.3-5.4.4.sql index 0deab1efe..11d6acf79 100644 --- a/docs/upgrades/upgrade_5.4.3-5.4.4.sql +++ b/docs/upgrades/upgrade_5.4.3-5.4.4.sql @@ -1790,7 +1790,7 @@ insert into international (internationalId,languageId,namespace,message,lastUpda delete from international where languageId=2 and namespace='WebGUI' and internationalId=622; insert into international (internationalId,languageId,namespace,message,lastUpdated) values (622,2,'WebGUI','Schauen Sie auch unter "Verwalten Gruppen", um eine Beschreibung der \r\nGruppen Funktionalitäten zu erhalten und die Beschreibung der Standardgruppen \r\nzu sehen.

Gruppenname
Ein Name für die Gruppe. Am besten wählen \r\nSie hier einen Namen, der auch die Funktion der Gruppe beschreibt, damit Sie \r\nspäter nicht den Überblick verlieren. \r\n

Beschreibung
Eine längere Beschreibung für diese Gruppe, so dass \r\nAdministratoren und Content Manager sehen können, was der Sinn und Zweck dieser \r\nGruppe ist.

Verfällt nach
Die Zeit, die ein Benutzer zu dieser Gruppe \r\ngehört, bis er/sie entfernt wird bzw. die Mitgliedschaft verfällt. Dies ist \r\nhilfreich für Seiten, in denen Benutzer zeitlich beschränkte Angebote erhalten \r\nsollen. Beachten Sie, dass diese Einstellungen auch wieder für jeden einzelnen \r\nBenutzer gesondert vorgenommen werden können.

Benutzer über abgelaufene \r\nZeit informieren?
Wählen Sie hier "Ja", wenn Sie den Benutzer \r\ndarüber informieren möchten, dass er automatisch von dieser Gruppe entfernt \r\nwerden soll.

Zeitabstand zur Ablaufankündigung
Der Abstand in Tagen \r\ndes Ablaufs seit der Ankündigung. Sie müssen hier einen korrekten IntegerWert \r\nsetzen. Wenn Sie z. B. "0" auswählen, wenn die Benachrichtigung an \r\nden Benutzer am selben Tag erfolgen soll, an dem er von der Gruppe entfernt \r\nwird. Wenn Sie "-7" auswählen, ergeht die Benachrichtigung 7 Tage \r\nvorher an den Benutzer. (Bei der Auswahl von "7" ergeht die Benachrichtigung \r\nentsprechend 7 Tage danach).

Benachrichtigungstext zum Ablaufdatum
Geben \r\nSie hier den Text ein, der den Benutzer über den Zeitablauf informieren soll.

Löschen \r\nZeitspanne
DieAnzahl in Tagen, nachdem der Benutzer nach Ablauf der \r\nZeitspanne aus der Gruppe entfernt werden soll. Wenn Sie z. B. "0" \r\nangeben, wird der Benutzer noch am Tage des Zeitablaufs von der Gruppe entfernt. \r\n(weitere Beispiele siehe \'Zeitabstand zur Ablaufankündigung")

IP Adresse
Geben \r\nSie eine IP Adresse oder eine IP Maske an. Wenn der Benutzer diese IP-Adresse \r\nhat oder sich in der IP-Maske befindet, wird er automatisch in diese Gruppe \r\naufgenommen. Eine IP-Maske ist einfach nur die IP-Adresse abzüglich eines Octets \r\n(Acht) oder 2. Sie können auch mehrere IP-Masken getrennt durch ein Semikolon \r\nangeben.

Beispiel für IP Masken: 10.;192.168.;101.42.200.142 \r\n

Karma Grenzwert
Sie \r\nkönnen den Wert hier angeben, wenn sie Karma aktiviert haben. Dieser Grenzwert \r\nist der Anteil an Karma, die ein Benutzer haben muss, um Mitglied dieser Gruppe \r\nzu werden.

Benutzer können sich selbst hinzufügen?
Möchten Sie, \r\ndass sich Benutzer selbst zu dieser Gruppe hinzufügen können? Für weitere Informationen \r\nschauen Sie sich die Beschreibung des GroupAdd Makros an.

Benutzer können \r\nsich selbst entfernen?
Möchten Sie, dass sich Benutzer selbst von dieser \r\nGruppe entfernen können? Für weitere Informationen schauen Sie sich die Beschreibung \r\ndes GroupDelete Makros an.

', 1058171271); create table DataForm_entryData_temp (DataForm_entryId int not null, DataForm_fieldId int not null, wobjectId int not null, value text, primary key (DataForm_entryId, DataForm_fieldId)); -insert into DataForm_entryData_temp select a.DataForm_entryId, b.DataForm_fieldId, a.wobjectId, a.value from DataForm_entryData a left join DataForm_field b on a.name=b.name and a.wobjectId=b.wobjectId; +insert into DataForm_entryData_temp select a.DataForm_entryId, b.DataForm_fieldId, a.wobjectId, a.value from DataForm_entryData a left join DataForm_field b on a.name=b.name and a.wobjectId=b.wobjectId where b.DataForm_fieldId is not NULL; drop table DataForm_entryData; alter table DataForm_entryData_temp rename DataForm_entryData; delete from template where namespace='DataForm' and templateId=3; diff --git a/docs/upgrades/upgrade_5.4.4-5.5.0.pl b/docs/upgrades/upgrade_5.4.4-5.5.0.pl index 11fca359c..de28c66e8 100644 --- a/docs/upgrades/upgrade_5.4.4-5.5.0.pl +++ b/docs/upgrades/upgrade_5.4.4-5.5.0.pl @@ -229,6 +229,24 @@ WebGUI::SQL->write("alter table wobject drop column filterPost"); WebGUI::SQL->write("alter table wobject drop column addEditStampToPosts"); +#-------------------------------------------- +print "\tForcing unique usernames.\n" unless ($quiet); +my $a = WebGUI::SQL->read("select userId,username from users order by userId"); +my $test; +while (my ($userId,$username) = $a->array) { + while (($test) = WebGUI::SQL->quickArray("select username from users where username=".quote($username)." and userId<>$userId")) { + if ($username =~ /(.*)(\d+$)/) { + $username = $1.($2+1); + } elsif ($test ne "") { + $username .= "2"; + } + } + WebGUI::SQL->write("update users set username=".quote($username)." where userId=$userId"); +} +$a->finish; +WebGUI::SQL->write("alter table users add unique username_unique (username)"); + + WebGUI::Session::close(); diff --git a/docs/upgrades/upgrade_5.4.4-5.5.0.sql b/docs/upgrades/upgrade_5.4.4-5.5.0.sql index 7c80b3791..1be0a28b0 100644 --- a/docs/upgrades/upgrade_5.4.4-5.5.0.sql +++ b/docs/upgrades/upgrade_5.4.4-5.5.0.sql @@ -264,4 +264,3 @@ delete from international where languageId=1 and namespace='WebGUI' and internat insert into international (internationalId,languageId,namespace,message,lastUpdated,context) values (529,1,'WebGUI','results per page', 1066492301,'A label indicating the number of items per page to return in a list.'); - diff --git a/lib/WebGUI/Wobject/DataForm.pm b/lib/WebGUI/Wobject/DataForm.pm index 13b8f0282..09caeec37 100644 --- a/lib/WebGUI/Wobject/DataForm.pm +++ b/lib/WebGUI/Wobject/DataForm.pm @@ -215,7 +215,7 @@ sub getRecordTemplateVars { "field.label" => $data{label}, "field.isMailField" => $data{isMailField}, "field.isHidden" => $hidden, - "field.isDisplayed" => ($data{status} eq "displayed" && !$hidden), + "field.isDisplayed" => ($data{status} eq "visible" && !$hidden), "field.isEditable" => ($data{status} eq "editable" && !$hidden), "field.isRequired" => ($data{status} eq "required" && !$hidden), "field.subtext" => $data{subtext}, @@ -603,7 +603,7 @@ sub www_process { my ($var, %row, @errors, $updating, $hadErrors); $var->{entryId} = $entryId; tie %row, "Tie::CPHash"; - my $sth = WebGUI::SQL->read("select DataForm_fieldId,name,status,type,defaultValue,isMailField from DataForm_field + my $sth = WebGUI::SQL->read("select DataForm_fieldId,label,name,status,type,defaultValue,isMailField from DataForm_field where wobjectId=".$_[0]->get("wobjectId")." order by sequenceNumber"); while (%row = $sth->hash) { my $value = WebGUI::FormProcessor::process($row{name},$row{type},$row{defaultValue}); @@ -611,10 +611,8 @@ sub www_process { $value = WebGUI::Macro::filter($value); } if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "" || not defined $value)) { - #if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "")) { - #if ($row{status} eq "required" && $value eq "") { push (@errors,{ - "error.message"=>$row{name}." ".WebGUI::International::get(29,$_[0]->get("namespace")).".", + "error.message"=>$row{label}." ".WebGUI::International::get(29,$_[0]->get("namespace")).".", }); $hadErrors = 1; delete $var->{entryId};