Commit Graph

60 Commits

Author SHA1 Message Date
dillard 31290517ba Add a lightweight schema migration runner, fix missing PHPMailer in prod image
docker-entrypoint-initdb.d only applies db/init.sql, and only on a brand new
volume - existing installs never got db/migrations/*.sql applied unless
someone ran them by hand. This bit twice this session (qr-oss's own init.sql
was missing a migration, and qr-vip's live DB was two migrations behind after
a code deploy). scripts/migrate.php now runs automatically on every container
start via a new entrypoint wrapper, applying any not-yet-recorded migration -
safe to run repeatedly since every migration file already checks
information_schema before altering.

Also caught in the process: Dockerfile.fpm (the production image) never
installed phpmailer/phpmailer, unlike the dev Dockerfile - meaning
self-registration's password email has been silently fatal-erroring in
production since the nginx+php-fpm switch.
2026-07-15 01:19:47 +02:00
dillard d169b85f54 Fold email columns into init.sql, drop the admin/admin demo mention
Fresh installs (docker compose up -d --build, exactly what the README
tells a new self-hoster to run) never got the email/must_set_email/
self_registered_at columns added in migration 006 - only init.sql runs
automatically, migrations always need a manual step, and this one
never got folded into the base schema. A genuine first-time clone
would have broken immediately on login. Verified with a real fresh
volume: seed superadmin now correctly walks through forced password
change -> forced email set -> dashboard, no manual migration needed.

Also: qr.ensembia.com's README/About text still pointed at the
shared admin/admin demo login - replaced with a link to register.php
now that self-registration is live (the shared account has been
removed from the live instance).
2026-07-14 15:58:47 +02:00
dillard 96e2e5f475 Correct README wording for role-based access and VIP edition
The 'user' role description implied OSS users can get per-account
create rights - that's a VIP-only feature. Also replaced the VIP
edition blurb with clearer wording about what the subscription
actually unlocks.
2026-07-12 09:36:40 +02:00
dillard 164872de4d Fix owner-scope query bug returning the wrong qr code by id
qr_apply_owner_scope() used where('id_owner', X) + orWhere('id_owner', NULL,
'IS'). Any caller that had already added its own where('id', $id) before
calling it (qrcode_image.php, bulk_action.php's download path) ended up
with "WHERE id = ? AND id_owner = ? OR id_owner IS NULL" - AND binds
tighter than OR in SQL, so this was actually "(id = ? AND id_owner = ?) OR
(id_owner IS NULL)", which silently detaches the id filter and returns an
arbitrary null-owner row instead (or nothing, if that row's file is
missing) whenever the intended row didn't have a null owner. This is what
broke qr code thumbnails/downloads on qr.ensembia.com for scoped (non-super)
accounts, old and newly-created codes alike - reproduced and confirmed
fixed with a local before/after query dump, then with a live HTTP request
scenario (two accounts, two codes, one null-owner).

Fixed by building the scope as a single parenthesized raw condition
instead of two separate where() calls, so it can't be split apart by
whatever the caller already added to the query.

Also this session, per user feedback on the OSS rebrand review:
- Format moved back next to Filename in both qr-creation forms (was
  separated from it when Filename got grouped with Owner last session).
- README/About now mention the temporary admin/admin demo account instead
  of the not-yet-built self-registration flow.
2026-07-11 09:39:18 +02:00
dillard 23e8d9b765 Rebrand to QRForge (local only - do not push before domain confirmed)
Applies the approved QRForge brand kit throughout the app:
- New logo/icon SVGs, favicon set (ico/svg/png), apple-touch-icon, all
  copied from the approved brand kit into src/dist/img/brand/. Old
  Symbol_WhiteBlue.png/DynamicQRCode_Original.png removed (unused after
  the swap).
- Sidebar brand image/text, login and change-password page logos, all
  <title> tags, manifest.json name/theme-color, and the PWA icons
  (dist/img/icon-192.png/icon-512.png, same filenames so no other
  reference needed to change) updated to QRForge branding and the
  #2563EB brand blue.
- New about.php page (+ sidebar link): credits the original upstream
  fork (Giandonato Inverso) and chillerlan/php-qrcode, links to the free
  qr.ensembia.com try-out, the commercial www.qrforge.eu product page,
  and this GitHub repo for self-hosters.
- Footer now reads "QRForge" + "About / credits" + "Version 3.0"
  (replaces the inherited "PHP Qrcode Generator by Giandonato Inverso" /
  "Version 2.3.0" line - full credit moved to the About page instead).
- README.md rewritten: current feature set (all 16 static qr types,
  presets, scanner, PWA, location search, roles), qr.ensembia.com as the
  free try-out, www.qrforge.eu as the commercial product page, corrected
  Docker Compose setup steps (.env is required now, the old README still
  described the single-file demo setup from the original upstream fork).

IMPORTANT: not pushed to origin/gitea. Per user instruction, no push
until qrforge.eu domain registration is confirmed.
2026-07-11 02:48:05 +02:00
Giandonato Inverso f89b39bde3 Remove donation button from README 2025-09-02 21:52:03 +02:00
giandonato.inverso@edempg.it 3ee79bfab7 edit demo url 2025-03-22 15:51:02 +01:00
giandonato.inverso@edempg.it a2fdf79491 config rollback 2025-03-20 23:38:55 +01:00
giandonato.inverso@edempg.it 737ceca97b updated readme and docs 2025-01-21 22:41:14 +01:00
giandonato.inverso@edempg.it b4b42ddb29 updated readme 2025-01-12 23:50:15 +01:00
Giandonato Inverso a426d45be1 available plugins 2024-10-20 16:32:58 +02:00
Giandonato Inverso 3f7ac0bce1 Update README.md 2024-10-20 11:07:12 +02:00
giandonato.inverso@edempg.it 2715f2106c edit readme 2024-04-21 12:38:35 +02:00
giandonato.inverso@edempg.it 005c67d721 readme 2024-04-18 20:35:04 +02:00
Giandonato Inverso 915ea383b7 Update README.md
updated php version requirement
2024-01-03 00:43:50 +01:00
Giandonato Inverso 93980efdb7 Update README.md 2023-10-30 17:02:13 +01:00
Giandonato Inverso 15c84c0863 bug fix and documentation 2023-10-16 22:57:16 +02:00
Giandonato Inverso 90a7b2890b updated documentation 2023-10-16 22:24:15 +02:00
Giandonato Inverso 03da2d0432 updated documentation 2023-10-16 20:56:06 +02:00
Giandonato Inverso 68a2b9f7f3 Refactoring docker image building, NEW: added docker compose support
Signed-off-by: giandonato.inverso@edempg.it <giandonato.inverso@studenti.unimi.it>
2023-10-16 19:49:29 +02:00
Giandonato Inverso 5335b6fb7e readme updated
Signed-off-by: giandonato.inverso@edempg.it <giandonato.inverso@studenti.unimi.it>
2023-10-16 13:15:53 +02:00
giandonato.inverso@edempg.it fadde16882 readme updated
Signed-off-by: giandonato.inverso@edempg.it <giandonato.inverso@studenti.unimi.it>
2023-10-16 13:15:07 +02:00
Giandonato Inverso cdab7df35d readme updated
Signed-off-by: giandonato.inverso@edempg.it <giandonato.inverso@studenti.unimi.it>
2023-10-16 01:43:56 +02:00
Giandonato Inverso ef6410253c paypal donations 2023-09-05 23:31:38 +02:00
Giandonato Inverso f9ad48f65a Update README.md 2023-09-05 23:29:51 +02:00
Giandonato Inverso 5f1534f0be Update README.md 2022-06-17 11:49:06 +02:00
Giandonato Inverso c76c1164fc Update README.md 2022-06-17 11:48:44 +02:00
Giandonato Inverso b39c88fc12 Update README.md 2020-09-08 17:31:01 +02:00
Giandonato Inverso 9118d4f33c Update README.md 2020-09-08 17:29:26 +02:00
Giandonato Inverso f8bc49c164 Update README.md 2020-09-08 17:26:41 +02:00
Giandonato Inverso 9db2388d51 Update README.md 2020-09-08 17:25:38 +02:00
Giandonato Inverso 03c9c2d720 Update README.md 2020-09-08 17:24:07 +02:00
Giandonato Inverso 3bb2545521 Update README.md 2020-09-08 17:23:38 +02:00
Giandonato Inverso 283df4b81c Update README.md 2020-09-08 17:23:17 +02:00
Giandonato Inverso e64ca74003 Update README.md 2020-09-08 17:23:02 +02:00
Giandonato Inverso 0c2988791f Update README.md 2020-09-08 17:22:41 +02:00
Giandonato Inverso e123385dac Update README.md 2020-09-08 17:22:25 +02:00
Giandonato Inverso 1c819e6626 Update README.md 2020-09-08 17:21:33 +02:00
Giandonato Inverso 8af83452ba Update README.md 2020-09-08 17:21:07 +02:00
Giandonato Inverso 527eb7b3ba Update README.md 2020-09-08 17:20:39 +02:00
Giandonato Inverso fe4c63e3a6 Update README.md 2020-09-08 17:20:20 +02:00
Giandonato Inverso 601be05d5c Update README.md 2020-09-08 17:20:05 +02:00
Giandonato Inverso f4f061d857 Update README.md 2020-09-08 17:18:41 +02:00
Giandonato Inverso f1eb8545b4 Update README.md 2020-09-08 17:17:36 +02:00
Giandonato Inverso 7e3cef7544 Update README.md 2020-09-08 17:14:57 +02:00
Giandonato Inverso 5530f62195 Update README.md 2020-09-08 17:13:33 +02:00
Giandonato Inverso df3211d583 Update README.md 2020-09-08 17:13:06 +02:00
Giandonato Inverso 117b2b21a2 Update README.md 2020-09-08 17:12:50 +02:00
Giandonato Inverso 5430504fa0 Update README.md 2020-09-08 17:12:34 +02:00
Giandonato Inverso 65c279b65d Update README.md 2020-09-08 17:12:01 +02:00