swissbib / vufind

A library resource discovery portal designed and developed for libraries by libraries
GNU General Public License v2.0
12 stars 7 forks source link

falscher Sprachcode En in table user #398

Closed guenterh closed 5 years ago

guenterh commented 8 years ago

In der Tabelle user colums language haben sich Sprachcodes eingeschlichen, die nicht erlaubt sind. So wie wir das in der produktiven Datenbank von BB gesehen haben, handelt es sich dabei ausschliesslich um Englisch. Deutsch, Französisch und Italienisch scheinen in Ordnung zu sein.

Der falsche Sprachcode: En richtig wäre: en

Dies führt zu folgenden Fehlern:

Unter anderem sind folgende Fragen zu beantworten

@witzigs fyi - bitte nachführen, wenn ich etwas vergessen habe

screenshot - 04 12a

guenterh commented 8 years ago

@witzigs Hallo Silvia,

habe als Morgengymnastik zu Beginn ein wenig mit MySQL herumgespielt (lokal bei mir). Warum ich nicht kontextsensitiv suchen kann, ist mir immer noch nicht klar. Ich habe die verschiedensten collation ausprobiert. Aber: internationalization ist ein Thema für sich...

Was ich jedoch machen konnte: Mit einem Update statement, scheint MySQL in der Lage zu sein, context sensitiv die richtigen rows 'herauszufischen'. Als Beipiele:

mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.06 sec) Rows matched: 1370 Changed: 65 Warnings: 0

mysql> update user set language = 'fr' where language = 'fr'; Query OK, 0 rows affected (0.05 sec) Rows matched: 189 Changed: 0 Warnings: 0

mysql> update user set language = 'it' where language = 'it'; Query OK, 0 rows affected (0.05 sec) Rows matched: 64 Changed: 0 Warnings: 0

mysql> update user set language = 'de' where language = 'de'; Query OK, 0 rows affected (0.05 sec) Rows matched: 11228 Changed: 0 Warnings: 0

Es gibt 65 'falsche Engländer' diese werden gefunden und aktualisiert. Die anderen Sprachen sind ok. Ich denke man kann den Update auf der produktiven Datenbank machen. Dann würden die Fehler nicht mehr auftreten und Du hättest erstmal weniger Telefone ... Was hälst Du davon?

Günter

witzigs commented 8 years ago

Hallo Günter

Am daily vergssen - das ist von mir aus in Ordnung.

Liebe Grüsse Silvia

UNIVERSITÄT BASEL Universitätsbibliothek Silvia Witzig IT / Verbundkoordination Schönbeinstrasse 18-20 4056 Basel, Schweiz Tel. +41 (0)61 267 29 44 Tel. +41 (0)61 267 30 95 E-Mail silvia.witzig@unibas.ch URL http://www.ub.unibas.ch/bibliotheksnetz


Von: Guenter Hipler [notifications@github.com] Gesendet: Donnerstag, 10. Dezember 2015 08:35 An: swissbib/vufind Cc: Silvia Witzig Betreff: Re: [vufind] falscher Sprachcode En in table user (#398)

@witzigshttps://github.com/witzigs Hallo Silvia,

habe als Morgengymnastik zu Beginn ein wenig mit MySQL herumgespielt (lokal bei mir). Warum ich nicht kontextsensitiv suchen kann, ist mir immer noch nicht klar. Ich habe die verschiedensten collation ausprobiert. Aber: internationalization ist ein Thema für sich...

Was ich jedoch machen konnte: Mit einem Update statement, scheint MySQL in der Lage zu sein, context sensitiv die richtigen rows 'herauszufischen'. Als Beipiele:

mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.06 sec) Rows matched: 1370 Changed: 65 Warnings: 0

mysql> update user set language = 'fr' where language = 'fr'; Query OK, 0 rows affected (0.05 sec) Rows matched: 189 Changed: 0 Warnings: 0

mysql> update user set language = 'it' where language = 'it'; Query OK, 0 rows affected (0.05 sec) Rows matched: 64 Changed: 0 Warnings: 0

mysql> update user set language = 'de' where language = 'de'; Query OK, 0 rows affected (0.05 sec) Rows matched: 11228 Changed: 0 Warnings: 0

Es gibt 65 'falsche Engländer' diese werden gefunden und aktualisiert. Die anderen Sprachen sind ok. Ich denke man kann den Update auf der produktiven Datenbank machen. Dann würden die Fehler nicht mehr auftreten und Du hättest erstmal weniger Telefone ... Was hälst Du davon?

Günter

— Reply to this email directly or view it on GitHubhttps://github.com/swissbib/vufind/issues/398#issuecomment-163523852.

guenterh commented 8 years ago

auf produktiver DB gemacht mysql> update user set language = 'en' where language = 'en'; Query OK, 65 rows affected (0.10 sec) Rows matched: 1370 Changed: 65 Warnings: 0

wenn der Fehler wieder auftritt, hat sich ein neues Em eingeschlichen.

Punkt 1 schaue ich mir noch an.

witzigs commented 8 years ago

@guenterh Kannst du dir das nochmals anschauen oder zumindest wieder die "En"-Einträge bereinigen? Ich erhalte wieder Meldungen von NutzerInnen die sich darauf zurückführen lassen. Danke!

guenterh commented 8 years ago

@witzigs mache ich morgen.

guenterh commented 8 years ago

@witzigs ich bin mir ziemlich sicher, dass ich die Beschreibung des Vorgehens, was ich gemacht habe, in einem Mail geschickt oder auf das Wiki gestellt habe Hast Du das noch oder weisst Du den Ort, wo ich das hingestellt habe? Sorry und Danke! Günter

guenterh commented 8 years ago

@witzigs sorry, bin ziemlich blöde, ein paar Kästchen darüber steht es ja... Günter

guenterh commented 8 years ago

@witzigs Habe es gerade in der Pause gemacht Database changed mysql> update user set language = 'en' where language = 'en'; Query OK, 30 rows affected (0.13 sec) Rows matched: 1650 Changed: 30 Warnings: 0 (Basel / Bern)

mysql> update user set language = 'en' where language = 'en'; Query OK, 694 rows affected (0.08 sec) Rows matched: 4134 Changed: 694 Warnings: 0 (green)

Database changed mysql> update user set language = 'en' where language = 'en'; Query OK, 0 rows affected (0.00 sec) Rows matched: 6 Changed: 0 Warnings: 0 (Jus)

Was mir durch den Kopf geht

Günter

swissbib-unibas commented 7 years ago

falscher Sprachcode En in table user #398 (12/2015-bug)

sonjakupfi commented 7 years ago

Die temporären Sessions werden neu per Script jede Nacht gelöscht. Dies sollte dazu führen, dass die obenstehende Fehlermeldung nicht mehr auftritt. Issue wird auf Grund von Günters Anpassung im Script geschlossen.

guenterh commented 5 years ago

@edelm hallo matthias, können wir im nächsten scrum bitte diesen issue nochmals gemeinsam ansehen? Bei mir dauert es im Moment immer etwas länger, bis ich mir wieder eine komplette laufähige Umgebung aufgebaut habe.

Konkret bin ich jetzt wieder durch einen issue gestossen, den wir über den feedback - channel erhalten haben (s. swissbib-ub mail) subject Fehlermeldung.

Ich schicke Dir die Einträge der Person in unserer Datenbank per Mail. Die Person hat erstellt sich mit switchEduId einen neuen account (Browsersprache Englisch). Dadurch wird bei ihr als Sprache "En" eingetragen was falsch ist. (Richtig en).

Den Fehler erhielt sie dan bei der Anmeldung, weil ein Sprachtemplate nicht gefunden wurde. In Ihrem Fall habe ich das auf die Schnelle "gelöst", indem ich einen Pfad kopiert habe.

vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$ find . -name 'en' 
./sbvfrdsingle/templates/HelpPage/en
./sbvfrdsingle/templates/search/homeElements/en
./root/templates/HelpTranslations/en
./sbvfrdjus/templates/HelpPage/en
./sbvfrdjus/templates/search/homeElements/en
./sbvfrdmulti/images/HelpPage/en
./sbvfrdmulti/templates/HelpPage/en
./sbvfrdmulti/templates/search/homeElements/en
vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$ find . -name 'En' 
./sbvfrdsingle/templates/search/homeElements/En
vfsb@sb-uvf1:/usr/local/vufind/httpd/themes$

Silvia sagt mir, dass der Fehler nicht nur hier sondern auch zum Beispiel bei der Exemplaranzeige auftritt. Hintergrund dort wohl: Bei der Übersetzung wird der Sprachcode En nicht gefunden.

Was wir tun sollten (gerne gemeinsam)

In unserem log finden wir für das konkrete Problem der Person, mit der ich telefoniert habe, folgenden Fehler: 2019-02-15T09:57:30+01:00 CRIT (2): Zend\View\Exception\RuntimeException : Zend\View\Renderer\PhpRenderer::render: Unable to render template "search/homeElements/En/swissbib_content_1"; resolver could not resolve to a file

@liowalter z.I.

guenterh commented 5 years ago

@liowalter @edelm @witzigs Hallo zusammen, ich habe mich des Problems heute erneut angenommen, nachdem ich es geschafft hatte, ein VuFind fast fehlerfrei lokal zum Laufen zu bekommen. Um die login Vorgänge besser nachvollziehen zu können, habe ich von der produktiven green-prod Datenbank den dump des Datenbankschemas erstellt und bei mir lokal geladen. Dadurch kann ich meinen (Aleph)-Testuser sehr einfach immer wieder neu vom Bibliothekssystem abrufen und kann einfacher nachvollziehen, welche Werte in welchen Schritten in die Datenbank geschrieben werden.

Wen das Szenario interessiert: Das Schema ist eingecheckt. db schema @liowalter @edelm : ich würde die alten Sachen (vor allem VF4) an Eurer Stelle wegwerfen.

Zur Sache: Ich konnte bisher nicht nachvollziehen, an welcher Stelle der language code falsch in die datenbank geschrieben wird. Was ich bisher gesehen habe: Bei der Neuanlage eine Benutzers ist das Feld language lange Zeit leer. Erst bei einem Sprachwechsel (Sprachauswahl an oberen Rand) wird der englische code "richtig" in die Datenbank geschrieben (en und nicht En)

Mit Silvia habe ich ein wenig über Ursachen/Möglichkeiten diskutiert:

Die Lösungen können den Nachteil haben, dass man evtl. VuFind Code nur für diesen Zweck überschreiben muss.

Weitere Ideen?

liowalter commented 5 years ago

MySQL case sensitive searches can be done when cast to BINARY :

SELECT * FROM `user` WHERE BINARY `language` = BINARY "EN"

or

SELECT language, count(*)
FROM user
GROUP BY CAST(language as BINARY); 

As a result, we get for udb1 (at 16h33 on April 24) :

language count(*)
  47279
Du 7
Ge 3
da 6
de 5704
en 9492
fr 1277
ge 228
it 379

on udb2 :

language count(*)
  70363
Ge 1
de 32510
en 3711
fr 553
it 149
{l 1
liowalter commented 5 years ago

On orange, the Ge and {| are old entries. I have fixed them. I have the feeling the problem only happens on green.

All "Du" (which doesn't exist as a locale) and "da" (danish) entries are after a login with the unisg IdP.

The "Ge" entries are old entries.

"ge" (georgian, but probably rather a typo for german) is the worst problem. It seems to affect all IdP.

liowalter commented 5 years ago

I have the feeling that Swissbib Bootstrapper could be the reason of the error : https://github.com/swissbib/vufind/blob/master/module/Swissbib/src/Swissbib/Bootstrapper.php#L176

guenterh commented 5 years ago

Thanks for you work Lionel, that looks very likely!

liowalter commented 5 years ago

I could reproduce the error :

liowalter commented 5 years ago

On top of that, I removed all the wrong language codes from green and orange db. On jus, everything was fine. After deployment, we can remove the cronjobs on udb1 and udb2.