Moritz Bunkus [Mon, 27 Aug 2012 13:00:48 +0000 (15:00 +0200)]
Login-Maske: Zu Menu redirecten falls bereits eingeloggt
Wenn man bereits eingeloggt ist und irgendwo im Programm zu login.pl
redirectet wird (z.B. beim Speichern der Benutzereinstellungen), so
wurde durch die Umstellung des Loginmechanismusses neulich leider die
Loginmaske erneut angezeigt, obwohl eine anständig authentifizierte
Session vorliegt.
Moritz Bunkus [Fri, 24 Aug 2012 10:03:48 +0000 (12:03 +0200)]
Via SMTP Zeilen normalisiert verschicken
Der SMTP-Standard (RFC 821) verlangt, dass Zeilen nicht länger als
1000 Zeichen sind und mit <CRLF> abgeschlossen werden.
Anhänge kommen in der "sub print" aber als ein großer Blob an, der
zwar schon nach Zeilen aufgespalten ist, aber trotzdem zu groß ist,
sodass der annehmende Server teilweise komische Dinge mit der Eingabe
tut.
Also wirklich nur Zeile für Zeile schicken sowie dafür sorgen, dass
alle Zeilen auch wirklich mit <CRLF> aka \r\n abgeschlossen werden.
Moritz Bunkus [Fri, 24 Aug 2012 09:15:30 +0000 (11:15 +0200)]
Beim Anlegen der Auth-DB/-Tabellen Admin-Passwort mitschleifen
Solange die Auth-Strukturen nicht existieren, muss das Admin-Passwort
als Zeichen des gültigen Logins als Hiddens mitgeschliffen werden. Das
war auch vorher schon so, nur steht das vom Benutzer eingegebene
Passwort seit 670f76a für die Controller nicht mehr als Formvariable
zur Verfügung.
Moritz Bunkus [Fri, 24 Aug 2012 08:05:21 +0000 (10:05 +0200)]
Ermöglichen, dass Templates in SL/Dispatcher.pm übersetzt werden
In Dispatcher.pm erledigt die Sub "show_error" das Rendern. Ihr wird
der Name des Templates übergeben. Das erkennt aber
"scripts/locales.pl" nicht als Render-Anweisung und übersetzt die
Templates deshalb nicht automatisch. Also muss Dispatcher.pm etwas
nachhelfen und explizit erwähnen, dass diese Templates übersetzt
werden sollen.
Moritz Bunkus [Wed, 22 Aug 2012 16:24:12 +0000 (18:24 +0200)]
E-Mails auch per SMTP verschicken können
Default ist nun, via SMTP über localhost zu verschicken. Mögliche
Optionen sind: TLS oder SSL-Verschlüsselung, Authentifizierung,
Verwendung von Sendmail anstelle von SMTP (wie bisher).
Moritz Bunkus [Fri, 17 Aug 2012 11:16:45 +0000 (13:16 +0200)]
Formularfelder und Session-Keys für Logins umbenannt
Ziel: Ermöglichen, dass Login & Passwort auch wieder per
Formularfelder mit jedem Request übertragen werden, aber nicht mehr so
offensichtlich im "Formularfeldernamensraum" rumgeistern -- sondern
leicht aussortierbar sind. Die Formularfelder, die mit "{AUTH}"
starten, werden vom Dispatcher nach erfolgter Loginüberprüfung
automatisch entfernt, bevor die Kontrolle an die Controller/Actions
übergeben wird (unabhängig vom Routingtyp).
Vorher waren Formularfelder sowie die Session-Keys für User-Logins
"login" und "password", für Admin-Login "rpw".
Jetzt:
- Formularfelder: für User-Logins "{AUTH}login" und "{AUTH}password",
für Admin-Login "{AUTH}admin_password".
- Session-Keys: jeweils ohne "{AUTH}", sprich für User-Logins
weiterhin "login" und "password", für Admin-Login neu
"admin_password".
Moritz Bunkus [Fri, 17 Aug 2012 10:24:58 +0000 (12:24 +0200)]
Dispatcher: Auch Controller ermöglichen, die Admin-Login benötigen
Default ist für Controller, dass all ihre Funktionen User-Logins
benötigen. Kann ein Controller ändern, indem er die Sub
"get_auth_level" überschreibt (siehe Doku in
SL::Contrller::Base). Dies schafft die Basis dafür, auch Admin-Dinge
in der neuen Controller-Architektur zu implementieren.
Für die Zukunft kann man leicht ein weiteres Level neben 'user' und
'admin' einbauen, z.B. 'none' für Actions, die definitiv kein Login
benötigen.
Funktionierendes Beispiel für einen solchen Controller (Aufruf dann
über URL ".../controller.pl?action=AdminTest/proof_of_concept"):
package SL::Controller::AdminTest;
use strict;
use parent qw(SL::Controller::Base);
use Rose::Object::MakeMethods::Generic
(
scalar => [ qw(business) ],
);
#
# actions
#
sub action_proof_of_concept {
my ($self) = @_;
$::form->header;
print $self->render(<<EOHTML, { inline => 1 });
<body>
<p>I've been called with an ADMIN login only!</p>
</body>
</html>
EOHTML
}
Wenn in der Artikelbeschreibung oder Warengruppe von Bestandteilen
des Erzeugnis Sonderzeichen verwendet werden, kam es bisher zu
Problemen, vor allem wenn man den Button "Aktualisieren" benutzt.
Dieser Fehler ist nun behoben, sowohl für die Artikelbeschreibung,
als auch für die Warengruppe, auch wenn Sonderzeichen in der
Warengruppe bisher kaum funktionieren.
Verkaufsbericht Einheiten und Preisfaktoren berücksichtigen
Im Verkaufsbericht werden jetzt auch Einheiten und Preisfaktoren
berücksichtigt. Vorher kam es zu Fehlern, wenn man Rechnungen
mit von den Basisangaben abweichenden Einheiten oder Preisfaktoren
erstellt hat. Weiterhin werden in dem Bericht nur noch absolute Mengen
in Verbindung mit der Basiseinheit angezeigt (nicht mehr die Einheit
aus dem Beleg; zur Berechnung von Durchschnitten).
Sven Schöling [Wed, 8 Aug 2012 14:48:47 +0000 (16:48 +0200)]
Parsing von multipart/formdata beschleuningt.
Die entsprechende Routine hatte einen bösen Fall von Shlemiel the Painter's
algorithm [1]. Dadurch wurden Fileuploads mit mehr als 20k Zeilen extrem
langsam. Binärdaten wie pdfs oder Bilder hat das nicht gestört, aber bei CSV
Imports hat eine 80k Zeilen Datei dann auch mal 2-5min gebraucht, nur um den
Request zu parsen.
Jetzt werden nur die Indizes geparst und hinterher direkt aus dem Request der
substr gezogen. Ausserdem endlich einen Testfall dafür eingebaut.
Nach dem erstellen einer Einkaufsrechnung wird der Einkaufspreis aktualisiert. Dabei entstand bisher ein Fehler, wenn man andere Einheiten als die Standardeinheit der Waren/Dienstleistungen benutzt. Das ist nun behoben.
Sven Schöling [Thu, 2 Aug 2012 14:34:42 +0000 (16:34 +0200)]
Preview Mode bei Imports
Bei großen Imports interessieren einen meist nur die Fehler, oder die ersten
paar zeilen um zu sehen ob der Import so gut aussieht. Diese Modi sind jetzt
verfügbar.
G. Richardson [Wed, 1 Aug 2012 09:59:28 +0000 (11:59 +0200)]
Bug 1960 - Datenverlust beim CSV-Warenimport bei Preisen
wenn sellprice, listprice oder lastcost in der Importdatei nicht
explizit mit eigener Spalte gesetzt wurden, wurden die ursprünglichen
Preise beim Preisupdate mit 0 überschrieben.
Sven Schöling [Tue, 31 Jul 2012 12:43:30 +0000 (14:43 +0200)]
Warenimport bei grossen Datenbanken.
Der Warenimport hat bisher alle Waren ausgelesen und dann im Hash umsortiert.
Bei einer Datenbank mit 84k Waren hat das 22s gedauert, und 700MB
Arbeitsspeicher gefressen, das ist nicht zumutbar. Nun wird jeder Wert einzeln
aus der Datenbank gesucht.