* added handling of LCSC barcode decoding and part loading on Label Scanner
* when a part is scanned and not found, the scanner did not redraw so scanning subsequent parts was not possible without reloading the browser page. fixed the barcode scanner initialization and shutdown so it redraws properly after part not found
* added redirection to part page on successful scan of lcsc, digikey, and mouser barcodes. added create part button if part does not exist in database
* added augmented mode to label scanner to use vendor labels for part lookup to see part storage location quickly
* shrink camera height on mobile so augmented information can been viewed onscreen
* handle momentarily bad reads from qrcode library
* removed augmented checkbox and combined functionality into info mode checkbox. changed barcode scanner to use XHR callback for barcode decoding to avoid problems with form submission and camera caused by page reloaded when part not found.
* fix scanning of part-db barcodes to redirect to storage location or part lots. made scan result messages conditional for parts or other non-part barcodes
* fix static analysis errors
* added unit tests for meeting code coverage report
* fix @MayNiklas reported bug: when manually submitting the form (from a barcode scan or manual input) redirect to Create New part screen for the decoded information instead of showing 'Format Unknown' popup error message
* fix @d-buchmann bug: clear 'scan-augmented-result' field upon rescan of new barcode
* fix @d-buchmann bug: after scanning in Info mode, if Info mode is turned off when scanning a part that did not exist, it now redirects user to create part page
* fix @d-buchmann bug: make barcode decode table 100% width of page
* fix bug with manual form submission where a part does not exist but decodes properly which causes the camera to not redraw on page reload due to unclean shutdown. this is an existing bug in the scanner interface.
steps to produce the issue:
- have camera active
- put in code in Input
- info mode ticked
- click submit button
on page reload the camera does not reactivate
* fixed translation messages
* Use symfony native functions to generate the routes for part creation
* Use native request functions for request param parsing
* Refactored LCSCBarcocdeScanResult to be an value object like the other Barcode results
* Added test for LCSCBarcodeScanResult
* Fixed exception when submitting form for info mode
* Made BarcodeSourceType a backed enum, so that it can be used in Request::getEnum()
* Moved database queries from BarcodeRedirector to PartRepository
* Fixed modeEnum parsing
* Fixed test errors
* Refactored BarcodeRedirector logic to be more universal
* Fixed BarcodeScanResultHandler test
* Refactored BarcodeScanResultHandler to be able to resolve arbitary entities from scans
* Moved barcode to info provider logic from Controller to BarcodeScanResultHandler service
* Improved augmentented info styling and allow to use it with normal form submit too
* Correctly handle nullable infoURL in ScanController
* Replaced the custom controller for fragment replacements with symfony streams
This does not require a complete new endpoint
* Removed data-lookup-url attribute from scan read box
* Removed unused translations
* Added basic info block when an storage location was found for an barcode
* Fixed phpstan issues
* Fixed tests
* Fixed part image for mobile view
* Added more tests for BarcodeScanResultHandler service
* Fixed tests
---------
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
Changes based on maintainer feedback from PR #1217:
1. Add yarn install/build steps to update process
- Added yarn availability check in validateUpdatePreconditions
- Added yarn install and yarn build steps after composer install
- Added yarn rebuild to rollback process
- Updated total steps count from 12 to 14
2. Add environment variables to disable web features
- DISABLE_WEB_UPDATES: Completely disable web-based updates
- DISABLE_BACKUP_RESTORE: Disable backup restore from web UI
- Added checks in controller and template
3. Extract BackupManager service
- New service handles backup creation, listing, details, and restoration
- UpdateExecutor now delegates backup operations to BackupManager
- Cleaner separation of concerns for future reuse
4. Merge upstream/master and resolve translation conflicts
- Added Conrad info provider and generic web provider translations
- Kept Update Manager translations
The previous implementation used inline onsubmit handlers with return
confirmVersionChange(...), which could fail silently if any JavaScript
error occurred on the page, causing the form to submit without confirmation.
Fixes:
- Use event.preventDefault() FIRST to ensure form never submits by default
- Use DOMContentLoaded event listeners instead of inline handlers
- Properly escape translation strings using json_encode filter
- Wrap in IIFE with 'use strict' for better error handling
- Use data-attributes to identify forms and pass isDowngrade state
Fix DOMContentLoaded race condition in update form handlers
The event listener was not attaching if DOMContentLoaded had already
fired by the time the script executed. Now checks document.readyState
and attaches handlers immediately if DOM is already ready.
Added console.log statements to help debug form handler attachment.
Use Stimulus controller for update confirmation dialogs
The inline script was blocked by Content Security Policy (CSP).
Stimulus controllers are bundled with webpack and properly allowed by CSP.
- Create update_confirm_controller.js Stimulus controller
- Remove inline script from template
- Pass translation strings via data-* attributes
When downgrading to versions before v2.6.0, show a warning that the
Update Manager will not be available in older versions and that future
updates will need to be done manually via command line.
This feature adds a comprehensive Update Manager similar to Mainsail's
update system, allowing administrators to update Part-DB directly from
the web interface.
Features:
- Web UI at /admin/update-manager showing current and available versions
- Support for Git-based installations with automatic update execution
- Maintenance mode during updates to prevent user access
- Automatic database backup before updates
- Git rollback points for recovery (tags created before each update)
- Progress tracking with real-time status updates
- Update history and log viewing
- Downgrade support with appropriate UI messaging
- CLI command `php bin/console partdb:update` for server-side updates
New files:
- UpdateManagerController: Handles all web UI routes
- UpdateCommand: CLI command for running updates
- UpdateExecutor: Core update execution logic with safety mechanisms
- UpdateChecker: GitHub API integration for version checking
- InstallationTypeDetector: Detects installation type (Git/Docker/ZIP)
- MaintenanceModeSubscriber: Blocks user access during maintenance
- UpdateExtension: Twig functions for update notifications
UI improvements:
- Update notification in navbar for admins when update available
- Confirmation dialogs for update/downgrade actions
- Downgrade-specific text throughout the interface
- Progress page with auto-refresh
* Implementiere bevorzugte Sprachauswahl und Datenquellen-Synonyme
Die Spracheinstellungen/System-Settings wurden um die Möglichkeit ergänzt, bevorzugte Sprachen für die Dropdown-Menüs festzulegen. Zudem wurde ein Datenquellen-Synonymsystem implementiert, um benutzerfreundlichere Bezeichnungen anzuzeigen und zu personalisieren.
* Anpassung aus Analyse
* Entferne alten JSON-basierten Datenquellen-Synonym-Handler
Die Verwaltung der Datenquellen-Synonyme wurde überarbeitet, um ein flexibleres und strukturiertes Konzept zu ermöglichen. Der bestehende JSON-basierte Ansatz wurde durch eine neue Service-basierte Architektur ersetzt, die eine bessere Handhabung und Erweiterbarkeit erlaubt.
* Ermögliche Rückgabe aller möglichen Sprachoptionen in Verbindung mit den vom Nutzer freigeschalteten.
* Removed unnecessary service definition
The tag is applied via autoconfiguration
* Use default translations for the NotBlank constraint
* Started refactoring ElementTypeNameGenerator
* Made ElementTypeNameGenerator class readonly
* Modified form to work properly with new datastructure
* Made the form more beautiful and space saving
* Made synonym form even more space saving
* Allow to define overrides for any element label there is
* Use defined synonyms in ElementTypeNameGenerator
* Use ElementTypeNameGenerator where possible
* Register synonyms for element types as global translation parameters
* Revert changes done to permission layout
* Use new synonym system for admin page titles
* Removed now unnecessary services
* Reworked settings name and translation
* Renamed all files to Synonyms
* Removed unnecessary translations
* Removed unnecessary translations
* Fixed duplicate check
* Renamed synoynms translations
* Use our synonyms for permission translations
* Fixed phpstan issue
* Added tests
---------
Co-authored-by: Marcel Diegelmann <marcel.diegelmann@gmail.com>
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
* Erweiterungstätigkeiten zur IPN-Vorschlagsliste anhand von Präfixen aus den Kategorien
* Umstellung Migrationen bzgl. Multi-Plattform-Support.
Zunächst MySQL, SQLite Statements integrieren.
* Postgre Statements integrieren
* SQL-Formatierung in Migration verbessern
* Erweitere IPN-Suggest um Bauteilbeschreibung.
Die Implementierung berücksichtigt nun zusätzlich die Bauteilbeschreibung zu maximal 150 Zeichen Länge für die Generierung von IPN-Vorschlägen und Inkrementen.
* Anpassungen aus Analyse vornehmen
* IPN-Validierung für Parts überarbeiten
* IPN-Vorschlagslogik um Konfiguration erweitert
* Anpassungen aus phpstan Analyse
* IPN-Vorschlagslogik erweitert und Bauteil-IPN vereindeutigt
Die IPN-Logik wurde um eine Konfiguration zur automatischen Suffix-Anfügung und die Berücksichtigung von doppelten Beschreibungen bei Bedarf ergänzt. Zudem wurde das Datenmodell angepasst, um eine eindeutige Speicherung der IPN zu gewährleisten.
* Regex-Konfigurationsmöglichkeit für IPN-Vorschläge einführen
Die Einstellungen für die IPN-Vorschlagslogik wurden um eine Regex-Validierung und eine Hilfetext-Konfiguration erweitert. Tests und Änderungen an den Formularoptionen wurden implementiert.
* Match range assert and form limits in suggestPartDigits
* Keep existing behavior with autoAppend suffix by default
* Show the regex hint in the browser validation notice.
* Improved translations
* Removed unnecessary service definition
* Removed german comments
---------
Co-authored-by: Marcel Diegelmann <marcel.diegelmann@gmail.com>
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>