Seite 1 von 4

[3.3] [DEV] Sudoku

Verfasst: 13.03.2024 10:44
von Mike-on-Tour
Extension Name: Sudoku

Kompatibel mitphpBB3.3.x

Autor: Mike-on-Tour
Beschreibung: Da die Nachfrage nach einer Erweiterung bestand, die Sudoku für phpBB bereitstellt, habe ich eine solche programmiert. Der funktionelle Umfang (Klassische, Samurai und Ninja-Rätsel sowie Rangliste und Ruhmeshalle) und das Layout orientieren sich an der ehemaligen Sudoku Mod.

Was hat sich geändert oder ist neu?
  • Die Erweiterung ist von Grund auf neu programmiert.
  • Im Frontend finden sich bis zu fünf Tabs, nämlich je ein Tab für die drei Rätsel-Typen und je einer für Rangliste und Ruhmeshalle
  • Rangliste und Ruhmeshalle können durch den Admin unabhängig voneinander aktiviert oder deaktiviert werden, voreingestellter Standard ist "aktiviert"
  • Über die Rechtevergabe von phpBB kann der Admin steuern, wer Sudoku sieht, bei Installation ist dieses Recht standardmäßig vergeben an alle Standard-Benutzerrollen von phpBB
  • Im ACP lassen sich alle Programm- und Spieleinstellungen (z.B. Punktevergabe) setzen
  • Über einen zweiten ACP-Tab werden die installierten Spielepakete angezeigt, ebenso ist dort das Importieren und Löschen von Spielepaketen möglich
  • Die Spieleingaben werden in einer DB-Tabelle gespeichert, dadurch ist ein jederzeitiges Verlassen eines Rätsels möglich, bei erneutem Start der Erweiterung kann das Rätsel an diesem Stand fortgesetzt werden
  • In jedem Rätsel ist zu Beginn die Wahl eines leichteren Levels möglich, der Spieler erhält dadurch zusätzliche vorgegebene Ziffern
  • In jedem Rätsel ist der Kauf weiterer Ziffern (Punkteabzug), das Zurücksetzen auf den Anfangszustand sowie das Einblenden eines Helfers (wenn durch Admin aktiviert) möglich
  • Spielepakete mit insgesamt mehreren tausend Rätseln stehen zum Download bereit
  • Und natürlich ist Sudoku mit lukewcs/togglectrl kompatibel
Voraussetzungen: phpBB 3.3.x PHP >= 7.4, <8.4
Download: https://www.mike-on-tour.com/viewtopic.php?p=366#p366
Sprachen: de (formell und informell), en
Styles: prosilver, css-Datei für Dark Vision von Kirk
Github repository: folgt
Bildschirm-Fotos:
Classic-Sudoku-Tab: [ externes Bild ]
Samurai-Sudoku-Tab: [ externes Bild ]
Ninja-Sudoku-Tab: [ externes Bild ]
ACP Einstellungen: [ externes Bild ]
ACP Spielepakete: [ externes Bild ]

Re: [3.3] [DEV] Sudoku

Verfasst: 13.03.2024 16:18
von Scanialady
Vielen Dank dafür, Mike

Re: [3.3] [DEV] Sudoku

Verfasst: 14.03.2024 10:29
von Dr.Death
Hi,

super !


Hab ich gerade mal in meinem Testboard mit Postgres Datenbank aktiviert.

Im ACP --> Erweiterungen --> Sudoku --> Klicke auf "Einstellungen" :

Code: Alles auswählen

Allgemeiner Fehler
SQL ERROR [ postgres ]

ERROR: column "u.user_id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT u.user_id, u.username, ug.group_id FROM phpbb_users u... ^ []

SQL

SELECT u.user_id, u.username, ug.group_id FROM phpbb_users u CROSS JOIN phpbb_user_group ug CROSS JOIN phpbb_groups g WHERE u.user_id = ug.user_id AND g.group_id = ug.group_id AND (UPPER(g.group_name) LIKE 'ADMINISTRATORS' OR UPPER(g.group_name) LIKE '%MODERATOR%') GROUP BY username

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/phpbb/db/driver/driver.php
LINE: 1031
CALL: trigger_error()

FILE: [ROOT]/phpbb/db/driver/postgres.php
LINE: 193
CALL: phpbb\db\driver\driver->sql_error()

FILE: [ROOT]/phpbb/db/driver/factory.php
LINE: 353
CALL: phpbb\db\driver\postgres->sql_query()

FILE: [ROOT]/ext/mot/sudoku/controller/mot_sudoku_acp.php
LINE: 190
CALL: phpbb\db\driver\factory->sql_query()

FILE: [ROOT]/ext/mot/sudoku/acp/mot_sudoku_acp_module.php
LINE: 43
CALL: mot\sudoku\controller\mot_sudoku_acp->settings()

FILE: [ROOT]/includes/functions_module.php
LINE: 676
CALL: mot\sudoku\acp\mot_sudoku_acp_module->main()

FILE: [ROOT]/adm/index.php
LINE: 81
CALL: p_master->load_active()
Ich glaube, Postgres mag im "GROUP BY" alle angegebenen Selects:
https://stackoverflow.com/questions/607 ... unction-in

Code: Alles auswählen

		//Build a list of users within admin and mod groups
		$sql_ary = [
			'SELECT'    => 'u.user_id, u.username, ug.group_id',
			'FROM'      => [USERS_TABLE  => 'u', USER_GROUP_TABLE  => 'ug', GROUPS_TABLE  => 'g',],
			'WHERE'     => "u.user_id = ug.user_id
					AND g.group_id = ug.group_id
					AND (UPPER(g.group_name) LIKE 'ADMINISTRATORS' OR UPPER(g.group_name) LIKE '%MODERATOR%')",
			'GROUP_BY'  => 'u.username, u.user_id, ug.group_id',
		];

Das sind noch mehrere Probleme, wenn man eine Postgres DB benutzt.... ggf. darauf hinweisen.

Re: [3.3] [DEV] Sudoku

Verfasst: 14.03.2024 16:47
von Mike-on-Tour
Da dachte ich, wenn ich die dbal-Funktionen von phpBB nutze, ist alles in Ordnung, und dann das.

Danke für den Hinweis, das muss ich mir mal in Ruhe ansehen und dann prüfen, wo das ggf. noch von Bedeutung sein kann.

Re: [3.3] [DEV] Sudoku

Verfasst: 14.03.2024 17:09
von LukeWCS
Mike-on-Tour hat geschrieben: 14.03.2024 16:47 Da dachte ich, wenn ich die dbal-Funktionen von phpBB nutze, ist alles in Ordnung
Genau davon bin ich bisher auch ausgegangen, das Ding heisst ja nicht umsonst "Database Abstraction Layer". In dem Fall hätte ich erwartet, dass die DBAL bei PostgreSQL GROUP BY automatisch auf SELECT erweitert. Wozu haben wir die DBAL, wenn man sich dann trotzdem mit den ganzen speziellen Wenns und Abers der einzelnen DB Engines herumschlagen muss? :evil:

Vor allem da PostgreSQL ja wohl eher nicht so oft bei phpBB Installationen anzutreffen sein dürfte. Meine Aussage basiert auf einem Beitrag von Nils, der ist allerdings von 2011 und somit nicht mehr wirklich taufrisch. ^^

https://www.phpbb.com/community/viewtop ... #p13006031

Mike, bei TC eingetragen.

Re: [3.3] [DEV] Sudoku

Verfasst: 14.03.2024 17:36
von Mike-on-Tour
LukeWCS hat geschrieben: 14.03.2024 17:09 In dem Fall hätte ich erwartet, dass die DBAL bei PostgreSQL GROUP BY automatisch auf SELECT erweitert. Wozu haben wir die DBAL, wenn man sich dann trotzdem mit den ganzen speziellen Wenns und Abers der einzelnen DB Engines herumschlagen muss?
Das war auch mein erster Gedanke. Und nachdem ich die "Verbesserung" von Doc ausprobiert habe, musste ich feststellen, dass damit das Ergebnis unter MySQL nicht mehr passt, da tauchen Nutzer dann wegen u.user_id mehrfach auf, wenn sie in mehreren der abgefragten Gruppen Mitglied sind. Da scheint IMHO etwas mit der Postgres-Umsetzung in den dbal-Funktionen nicht zu stimmen.
LukeWCS hat geschrieben: 14.03.2024 17:09 Mike, bei TC eingetragen.
Danke :grin:

Re: [3.3] [DEV] Sudoku

Verfasst: 14.03.2024 18:39
von Dr.Death
Ja, die Postgres Syntax unterscheidet sich leicht von unserer gewohnten My/MariaSQL Syntax.
Das kann das unterliegende DBAL nicht ausgleichen.

https://github.com/DrDeath/phpbb-ext-f1 ... 040514826e
https://github.com/DrDeath/phpbb-ext-f1 ... 1affdeed2c
https://github.com/DrDeath/phpbb-ext-f1 ... 119af2c982
https://github.com/DrDeath/phpbb-ext-f1 ... 0646b4d836


Aber es in der Regel nutzt kaum jemand eine Postgres DB im Foren Sektor… nur jemand der gerade von Oracle auf Postgres migriert und daher viele Test Postgres DB zur Verfügung hat 😎😇

Re: [3.3] [DEV] Sudoku

Verfasst: 15.03.2024 10:14
von Mike-on-Tour
Habe gerade ver 0.7.1 online gestellt, darin sollte das Problem behoben sein, weil ich erstens unterscheide, welcher DB-Layer benutzt wird und die Abfrage bei PostgreSQL entsprechend angepasst wurde und zweitens dieser Teil des Codes nur noch abgearbeitet wird, wenn tatsächlich "Ultimate Points" installiert ist.

Re: [3.3] [DEV] Sudoku

Verfasst: 15.03.2024 10:41
von Dref
Danke für das Spiel.
Im Berechtigungssystem habe ich das Kästchen „Kann Sudoku spielen“ für die eingeladene Gruppe aktiviert, nur dass man Mitglied des Forums sein muss, um das Spiel spielen zu können.
Ist das gewollt?

Re: [3.3] [DEV] Sudoku

Verfasst: 15.03.2024 12:20
von Mike-on-Tour
Du könntest das natürlich für Gäste freischalten, aber das kann eigentlich nur im Chaos enden, weil z.B. die Spielstände nutzerbezogen, also über die user_id gespeichert werden. Da alle Gäste die user_id = 1 haben, könnten z.B. zwei Gäste zeitgleich dasselbe Rätsel bearbeiten, und dann würden sich die Einträge des einen mit denen des anderen überschneiden, damit würden beide Spiele crashen.
Also wird das in der Praxis nicht funktionieren.

Also ja, das ist so gewollt.