diff --git a/docs/changelog/5.x.x.txt b/docs/changelog/5.x.x.txt index a884c105f..9f8838be8 100644 --- a/docs/changelog/5.x.x.txt +++ b/docs/changelog/5.x.x.txt @@ -3,6 +3,8 @@ - Made the username field in the database unique. - Added sorting options to USS. - Added external database group privileges. (Thanks to Andy Grundman.) + - Added a switch to the miscellaneous settings that allows the admin to set + how URLs are generated to fix a problem with sites behind load balancers. - Added support for encryptLogin user setting. (Thanks to Hal Roberts.) - Added anonymous response option to Survey. (Thanks to Andy Grundman.) - Added the alphabetic? option to the SiteMap wobject. (Thanks to Hal Roberts.) 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 54f4bc16c..db0482ca3 100644 --- a/docs/upgrades/upgrade_5.4.4-5.5.0.sql +++ b/docs/upgrades/upgrade_5.4.4-5.5.0.sql @@ -4247,4 +4247,12 @@ delete from international where languageId=2 and namespace='WebGUI' and internat insert into international (internationalId,languageId,namespace,message,lastUpdated) values (840,2,'WebGUI','Diese Makros werden verwendet um programmierähnliche Funktionalität einzubauen. Sie sind mächtig, wenn Sie sachgemäss benutzt werden und schädlich/gefährlich, wenn sie unachtsam verwendet werden. Seien Sie also vorsichtig, beim Verwenden dieser Makros. \r\n
Beachte: Diese Makros sind in WebGUI enthalten, um die vielseitige Funktionalität zu demonstrieren. Damit können einfache Web-Applikationen erstellt werden. Standardmässig sind diese Makros deaktiviert, um die Sicherheit Ihrer Seite und des Servers zu gewährleisten. Sie können nur vom Administrator aktiviert werden.
\r\n\r\n\r\n^D; oder ^D(); - Datum\r\n
Das aktuelle Datum und die Uhrzeit. \r\n\r\nSie können dies mit den Formatierungssymbolen konfigurieren. Wenn Sie z. B. ein Makro wie ^D("%c %D, %y"); erstellen, wird Ihnen folgendes angezeigt September 26, 2001. Nachfolgend die verfügbaren Formatierungssymbole: \r\n\r\n\r\n\r\n
%%\r\n\r\n%\r\n\r\n
%y\r\n\r\n4-stelliges Jahr\r\n\r\n
%Y\r\n\r\n2-stelliges Jahr\r\n\r\n
%m\r\n\r\n2-stelliger Monat\r\n\r\n
%M\r\n\r\nvariable Monat\r\n\r\n
%c\r\n\r\nMonatsname\r\n\r\n
%d\r\n\r\n2-stelliger Tag\r\n\r\n
%D\r\n\r\nVariable Tag des Monats\r\n\r\n
%w\r\n\r\nName des Wochentags\r\n\r\n
%h\r\n\r\n2-stellige Uhrzeit (12-Stunden Format)\r\n\r\n
%H\r\n\r\nVariable Uhrzeit (12-Stunden Format)\r\n\r\n
%j\r\n\r\n2-stellige Uhrzeit (24-Stunden Format)\r\n\r\n
%J\r\n\r\nvariable Uhrzeit (24-Stunden Format)
\r\n\r\n%p\r\n\r\nkleingeschrieben am/pm\r\n\r\n
%P\r\n\r\ngrossgeschrieben AM/PM\r\n\r\n
%z\r\n\r\nBenutzerdefiniertes Datums-Format\r\n\r\n
%Z\r\n\r\nBenutzerdefiniertes Zeit-Format\r\n\r\n
^Env();\r\n
Kann benutzt werden, um eine WebServer Umgebungsvariable auf der Seite anzeigen zu lassen. Diese Umgebungsvariablen sind von WebServer zu WebServer unterschiedlich, aber Sie können Sie die verfügbaren Variablen anzeigen lassen, wenn Sie http://www.ihreWebGUISeite.de/env.pl aufrufen. \r\n\r\nDas Makro wird z. B. wie folgt verwendet ^Env("REMOTE_ADDR"); \r\n\r\n
^Execute();\r\n
Gibt dem Contentmanager oder Administrator die Möglichkeit, ein externes Programm auszuführen. Beispiel: ^Execute("/verzeichnis/datei.sh");. \r\n\r\n
^FormParam();\r\n
Dieses Makro wird hauptsächlich benutzt, um dynamische Abfragen in SQL Reports zu erzeugen. Das Benutzen dieses Makros kann z. B. den Wert eines Formularfeldes zurückgeben, in dem Sie einfach den Namen des Formularfeldes einsetzen, wie z. b. ^FormParam("Telefon Nummer"); \r\n\r\n
^If();\r\n
Eine simple Bedingungsabfrage (IF/THEN/ELSE) um Layout und Nachrichten zu steuern.\r\n\r\n
Beispiele:\r\n
Zeigt Happy New Year am 1. Januar an: ^If(\'^D("%m%d");\' eq \'0101\' , Happy New Year); \r\n\r\n
Zeigt eine Nachricht an Leute in Ihrem Subnet an (192.168.1.*):\r\n^If(\'^Env("REMOTE_ADDR");\' =~ /^192.168.1/,"Hi co-worker","Hi Stranger"); \r\n\r\n
\r\nZeigt eine Nachricht an Windows-Benutzer:\r\n^If(\'^Env("HTTP_USER_AGENT");\' =~ /windows/i,"Hey... Linux is free !"); \r\n\r\n
\r\nZeigt eine Nachricht an Benutzer hinter einem Proxy-Server an:\r\n^If(\'^Env("HTTP_VIA");\' ne "", You\'re behind a proxy !, Proxy-free is the best...); \r\n\r\n
\r\nZeigt Guten Morgen/Guten Tag/Guten Abend an:\r\n^If(^D("%J");<=12,Guten Morgen,^If(^D("%J");<=18,Guten Tag, Guten Abend);); \r\n\r\n
\r\n^Include();\r\n
Gibt dem Contentmanager oder Administrator die Möglichkeit, eine Datei des lokalen Dateisystems einzubinden \r\n\r\nBeispiel: ^Include("/verzeichnis/seite.html"); \r\n\r\n
^International();\r\n
Gibt den übersetzten Text vom \'Internationalisierungs-System\' (Übersetzungen) zurück. \r\n\r\nBeispiel: ^International(45,"Article"); Beachte: Es muss die englische Bezeichnung (Article) verwendet werden.\r\n
\r\n\r\n^Quote();\r\n
Benutzen Sie dies, um einen String abzuschliessen bevor Sie in einer Datenbank-Abfrage benutzen, z.B. ^Quote(suche dieses oder jenes); \r\n\r\n
^Page();\r\n
Dieses Makro kann verwendet werden, um Informationen der aktuellen Seite zurückzugeben. Zum Beispiel kann es benutzt werden, um die Seiten-URL anzuzeigen: ^Page("urlizedTitle"); oder um einen Menutitel zu erhalten: ^Page("menuTitle");. \r\n\r\n
^SQL();\r\n
Ein einzeiliger SQL Report. Manchmal ist es erforderlich, schnell einen Datenbankinhalt zurückzugeben. Dieses Makro ist aber auch gut einsetzbar, um einen SQL-Report zu erweitern. Es werden numerische Makros (^0; ^1; ^2; etc) benutzt, um Daten zu positionieren. Sie können auch das ^rownum; Makro wie beim SQL Report Wobject benutzen.\r\n
\r\n\r\nBeispiele: \r\n\r\n
\r\n^SQL("select count(*) from users","Es sind ^0; Benutzer registriert."); \r\n\r\n
\r\n^SQL("select userId,username from users order by username","<a \r\nhref=\'^/;?op=viewProfile&uid=^0;\'>^1;</a><br>");
\r\n^URLEncode();\r\n
Dieses Makro wird auch hauptsächlich in SQL Reports verwendet, aber es kann auch genauso gut wo anders eingesetzt werden. Es überprüft den Inhalt einer Eingabe (z. B. im Formular) und wandelt ihn in eine URL um, sodass die Eingabe nachher als Link angezeigt wird.
Die Syntax ist wie folgt: ^URLEncode("Ist dies meine Eingabe?"); \r\n\r\n
^User();\r\n
Mit diesem Makro können Sie einige Infos aus dem Benutzer-Konto oder Benutzerprofil anzeigen lassen. Wenn Sie z. B. die Emailadresse des Benutzers anzeigen möchten, müssen Sie das Makro wie folgt verwenden: ^User("email");\r\n\r\n
^*; oder ^*(); - Zufallszahl\r\n
Eine Zufallszahl. Wird oft in Banner-Ads oder ähnlichembenötigt, um z. B. sicherzustellen, das nicht gecachet wird. Sie können dieses Makro u. a. einsetzen, um eine Zufallszahl zwischen 1 und 100 zu erzeugen: ^*(100); . \r\n\r\n
^-; ^0; ^1; ^2; ^3; etc.\r\n
Diese Makros sind für System/Wobject spezifische Funktionen reserviert, wie im SQL Report oder im Body des Style Managers.
Dateiname
Wählen Sie hier eine Datei von Ihrem lokalen Laufwerk, \r\ndie Sie uploaden möchten. \r\n
Alternative #1
Eine alternative Version dieser Datei. Wenn z. B. \r\ndie Datei im JPEG-Format ist, könnten Sie bei der alternativen Version z. B. \r\nTIFF oder BMP auswählen. \r\n
Alternative #2
Analog zur Alternative #1. \r\n
Kurze Beschreibung
Eine kurze Beschreibung dieser Datei. Beachten \r\nSie, dass Sie Schlüsselwörter benutzen, damit die Benutzer besser nach dieser \r\nDatei suchen können. \r\n
Gruppe, die Download benutzen kann
Wählen Sie die Gruppe aus, die \r\ndiese Datei downloaden kann. \r\n
Als nächstes?
Möchten Sie sofort einen neuen Download hinzufügen? \r\nOder möchten Sie zuerst zurück zur Seite gehen?.
\r\n\r\nUse shared trash?
\r\nEnables a single, system-wide trash shared by all users. Default is user separated trash.\r\n
\r\n\r\nIf proxied, use real client IP address?
\r\nIf enabled and if the environment variable HTTP_X_FORWARDED_FOR is present, it\'s value will be used in place of REMOTE_ADDRESS as the client browser\'s IP address. This is required for IP based groups to function properly in reverse-proxied, load-balanced system architectures. In these environments, all requests would otherwise appear to come from the same host, namely the proxy server. If you are uncertain if you need this setting enabled, you should probably leave it turned off.\r\n
\r\n\r\nPrevent Proxy Caching
\r\nSome companies have proxy servers that cause problems with WebGUI. If you\'re experiencing problems with WebGUI, and you have a proxy server, you may want to set this setting to Yes. Beware that WebGUI\'s URLs will not be as user-friendly after this feature is turned on.\r\n
\r\n\r\nShow debugging?
\r\nShow debugging information in WebGUI\'s output. This is primarily useful for WebGUI developers, but can also be interesting for Administrators trying to troubleshoot a problem.\r\n
\r\n\r\nTrack page statistics?
\r\nWebGUI can track some statistical information for your site. However, this will add a little extra strain on your processor and will make your database grow much more quickly. Enable this only if you do not have an external web statistics program.\r\n
\r\n', 1066641387,NULL); + + diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm index e95827962..87f90cd4c 100644 --- a/lib/WebGUI/Operation/Settings.pm +++ b/lib/WebGUI/Operation/Settings.pm @@ -120,6 +120,15 @@ sub www_editMiscSettings { $f->yesNo("preventProxyCache",WebGUI::International::get(400),$session{setting}{preventProxyCache}); $f->yesNo("showDebug",WebGUI::International::get(707),$session{setting}{showDebug}); $f->yesNo("trackPageStatistics",WebGUI::International::get(749),$session{setting}{trackPageStatistics}); + $f->selectList( + -name=>"hostToUse", + -value=>[$session{setting}{hostToUse}], + -options=>{ + sitename=>WebGUI::International::get(1070), + HTTP_HOST=>WebGUI::International::get(1071) + }, + -label=>WebGUI::International::get(1069) + ); $f->submit; $output .= $f->print; return _submenu($output); diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index 5d0c74117..5626d4e03 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -24,7 +24,6 @@ use strict; use Tie::CPHash; use WebGUI::ErrorHandler; use WebGUI::SQL; -use WebGUI::URL; use WebGUI::Utility; our @ISA = qw(Exporter); diff --git a/lib/WebGUI/URL.pm b/lib/WebGUI/URL.pm index fa4935290..3d59d954a 100644 --- a/lib/WebGUI/URL.pm +++ b/lib/WebGUI/URL.pm @@ -50,9 +50,14 @@ These subroutines are available from this package: #------------------------------------------------------------------- sub _getSiteURL { - my $site = $WebGUI::Session::session{env}{HTTP_HOST} || $WebGUI::Session::session{config}{sitename}; + my $site; + if ($session{setting}{hostToUse} eq "sitename") { + $site = $session{config}{sitename} || $session{env}{HTTP_HOST}; + } else { + $site = $session{env}{HTTP_HOST} || $session{config}{sitename}; + } my $proto = "http://"; - if ($WebGUI::Session::session{env}{SERVER_PORT} == 443) { + if ($session{env}{SERVER_PORT} == 443) { $proto = "https://"; } return $proto.$site; @@ -137,11 +142,11 @@ Name value pairs to add to the URL in the form of: =cut sub gateway { - my $url = _getSiteURL().$WebGUI::Session::session{config}{scripturl}.'/'.$_[0]; + my $url = _getSiteURL().$session{config}{scripturl}.'/'.$_[0]; if ($_[1]) { $url = append($url,$_[1]); } - if ($WebGUI::Session::session{setting}{preventProxyCache} == 1) { + if ($session{setting}{preventProxyCache} == 1) { $url = append($url,"noCache=".randint(0,1000).';'.time()); } return $url; @@ -195,11 +200,11 @@ Name value pairs to add to the URL in the form of: =cut sub page { - my $url = _getSiteURL().$WebGUI::Session::session{page}{url}; + my $url = _getSiteURL().$session{page}{url}; if ($_[0]) { $url = append($url,$_[0]); } - if ($WebGUI::Session::session{setting}{preventProxyCache} == 1) { + if ($session{setting}{preventProxyCache} == 1) { $url = append($url,"noCache=".randint(0,1000).';'.time()); } return $url;