diff --git a/VERSION b/VERSION index 46b81d81..10c2c0c3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.11.0 +2.10.0 diff --git a/assets/controllers/elements/datatables/datatables_controller.js b/assets/controllers/elements/datatables/datatables_controller.js index d945004b..98b9cf29 100644 --- a/assets/controllers/elements/datatables/datatables_controller.js +++ b/assets/controllers/elements/datatables/datatables_controller.js @@ -83,6 +83,8 @@ export default class extends Controller { if (data) { //Do not save the start value (current page), as we want to always start at the first page on a page reload delete data.start; + //Reset the data length to the default value by deleting the length property + delete data.length; } return data; diff --git a/config/packages/datatables.yaml b/config/packages/datatables.yaml index fe238a1e..f1ea4715 100644 --- a/config/packages/datatables.yaml +++ b/config/packages/datatables.yaml @@ -8,7 +8,7 @@ datatables: # Set options, as documented at https://datatables.net/reference/option/ options: - lengthMenu : [[10, 25, 50, 100, 250, 500], [10, 25, 50, 100, 250, 500]] # We add the "All" option, when part tables are generated + lengthMenu : [[10, 25, 50, 100], [10, 25, 50, 100]] # We add the "All" option, when part tables are generated #pageLength: '%partdb.table.default_page_size%' # Set to -1 to disable pagination (i.e. show all rows) by default pageLength: 50 #TODO dom: " <'row' <'col mb-2 input-group flex-nowrap' B l > <'col-auto mb-2' < p >>> diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php index b7c25229..c737e291 100644 --- a/src/Controller/AdminPages/BaseAdminController.php +++ b/src/Controller/AdminPages/BaseAdminController.php @@ -34,7 +34,6 @@ use App\Entity\Base\PartsContainingRepositoryInterface; use App\Entity\LabelSystem\LabelProcessMode; use App\Entity\LabelSystem\LabelProfile; use App\Entity\Parameters\AbstractParameter; -use App\Entity\UserSystem\User; use App\Exceptions\AttachmentDownloadException; use App\Exceptions\TwigModeException; use App\Form\AdminPages\ImportType; @@ -197,9 +196,7 @@ abstract class BaseAdminController extends AbstractController $this->commentHelper->setMessage($form['log_comment']->getData()); //In principle, the form should be disabled, if the edit permission is not granted, but for good measure, we also check it here, before saving changes. - if (!$entity instanceof User) { //Users entities does not have a simple edit permission, so we skip the check for them - $this->denyAccessUnlessGranted('edit', $entity); - } + $this->denyAccessUnlessGranted('edit', $entity); $em->persist($entity); $em->flush(); $this->addFlash('success', 'entity.edit_flash'); diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index bcf64056..b34eef9d 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -60,7 +60,7 @@ use Symfony\Contracts\Translation\TranslatorInterface; final class PartsDataTable implements DataTableTypeInterface { - public const LENGTH_MENU = [[10, 25, 50, 100, 250, 500, -1], [10, 25, 50, 100, 250, 500, "All"]]; + const LENGTH_MENU = [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]]; public function __construct( private readonly EntityURLGenerator $urlGenerator, diff --git a/src/Entity/Parts/Category.php b/src/Entity/Parts/Category.php index 22f8a3e4..7fca81bc 100644 --- a/src/Entity/Parts/Category.php +++ b/src/Entity/Parts/Category.php @@ -208,15 +208,6 @@ class Category extends AbstractPartsContainingDBElement $this->eda_info = new EDACategoryInfo(); } - public function __clone() - { - if ($this->id) { - //Clone EDA info to prevent changes to the original EDA info when changing the cloned category - $this->eda_info = clone $this->eda_info; - } - parent::__clone(); - } - public function getPartnameHint(): string { return $this->partname_hint; diff --git a/src/Entity/Parts/Footprint.php b/src/Entity/Parts/Footprint.php index 3d8be686..6b043562 100644 --- a/src/Entity/Parts/Footprint.php +++ b/src/Entity/Parts/Footprint.php @@ -152,15 +152,6 @@ class Footprint extends AbstractPartsContainingDBElement $this->eda_info = new EDAFootprintInfo(); } - public function __clone() - { - if ($this->id) { - //Clone EDA info to prevent changes to the original EDA info when changing the cloned category - $this->eda_info = clone $this->eda_info; - } - parent::__clone(); - } - /**************************************** * Getters ****************************************/ diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index e5020c06..7e070ff2 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -1,6 +1,6 @@ - + attachment_type.caption @@ -2779,7 +2779,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr Name - + part.table.si_value SI-Wert @@ -7217,13 +7217,13 @@ Element 1 -> Element 1.2 Unterprojekte - + project.info.total_build_price Gesamterstellpreis - + project.info.per_unit_price pro Einheit @@ -7253,7 +7253,7 @@ Element 1 -> Element 1.2 Preis - + project.bom.ext_price Gesamtpreis @@ -10052,85 +10052,85 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Wenn aktiviert, verlinkt das Datenblatt-Feld in KiCad auf die tatsächliche PDF-Datei (sofern gefunden). Wenn deaktiviert, führt es stattdessen zur Part-DB-Seite. Der Link zur Part-DB-Seite ist immer als separates "Part-DB URL"-Feld verfügbar. - + settings.misc.kicad_eda.editor.title KiCad Autovervollständigungslisten - + settings.misc.kicad_eda.editor.link Autovervollständigungseinstellungen - + settings.misc.kicad_eda.editor.description Konfigurieren Sie, ob KiCad Autovervollständigung die automatisch generierten Standardlisten oder Ihre benutzerdefinierten Überschreibungsdateien verwendet. Die benutzerdefinierten Dateien sind hier bearbeitbar, während die Standarddateien nur lesbar zur Referenz angezeigt werden. - + settings.misc.kicad_eda.editor.footprints Footprint-Liste - + settings.misc.kicad_eda.editor.footprints.help Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Footprintfelder verwendet. - + settings.misc.kicad_eda.editor.symbols Symbolliste - + settings.misc.kicad_eda.editor.symbols.help Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Symbolfelder verwendet. - + settings.misc.kicad_eda.use_custom_list Benutzerdefinierte Autovervollständigungslisten verwenden - + settings.misc.kicad_eda.use_custom_list.help Wenn aktiviert, verwendet die KiCad Autovervollständigung public/kicad/footprints_custom.txt und public/kicad/symbols_custom.txt anstelle der automatisch generierten Standarddateien. - + settings.misc.kicad_eda.editor.custom_footprints Benutzerdefinierte Footprint-Liste - + settings.misc.kicad_eda.editor.custom_symbols Benutzerdefinierte Symbolliste - + settings.misc.kicad_eda.editor.default_footprints Standard Footprint-Liste - + settings.misc.kicad_eda.editor.default_symbols Standardsymboliste - + settings.misc.kicad_eda.editor.default_files_help Automatisch generierte Datei wird nur zur Referenz angezeigt. Änderungen müssen in der benutzerdefinierten Liste vorgenommen werden. @@ -11210,96 +11210,6 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Bauteil aktualisieren - - - info_providers.bulk_import.back_to_jobs - Zurück zu Jobs - - - - - info_providers.bulk_import.back_to_parts - Zurück zu Bauteilen - - - - - info_providers.bulk_import.job_completed - Auftrag abgeschlossen! - - - - - info_providers.bulk_import.job_completed.description - Alle Bauteile wurden verarbeitet. Sie können die Ergebnisse unten überprüfen oder zur Bauteileliste zurückkehren. - - - - - info_providers.bulk_import.recommended - Top - - - - - info_providers.bulk_import.exact_match - Exakte Namensübereinstimmung - - - - - info_providers.bulk_import.mpn_match - MPN-Übereinstimmungen - - - - - info_providers.bulk_import.active_jobs - Aktive Jobs - - - - - info_providers.bulk_import.finished_jobs - Verlauf - - - - - info_providers.bulk_import.spn_match - SPN-Übereinstimmungen - - - - - info_providers.bulk_import.match - Übereinstimmung - - - - - info_providers.bulk_import.quick_apply - Schnellanwendung - - - - - info_providers.bulk_import.quick_apply.tooltip - Dieses Anbietergebnis auf das Bauteil anwenden, ohne das Bearbeitungsformular zu öffnen - - - - - info_providers.bulk_import.quick_apply_all - Alle anwenden (Top Ergebnisse) - - - - - info_providers.bulk_import.quick_apply_all.tooltip - Das bestplatzierte Suchergebnis auf alle ausstehenden Teile ohne einzelne Überprüfung anwenden - - info_providers.bulk_import.prefetch_details @@ -13143,312 +13053,6 @@ Buerklin-API-Authentication-Server: Backup-Download erlaubt - - - update_manager.docker.setup_title - Aktivieren Sie Docker-Updates mit einem Klick über Watchtower - - - - - update_manager.docker.setup_description - Part-DB kann Ihre Docker-Container automatisch mit Watchtower aktualisieren, einem Open-Source-Container-Updater. Fügen Sie Watchtower als Begleitcontainer hinzu und konfigurieren Sie die Verbindung unten. - - - - - update_manager.docker.setup_step1 - 1. Fügen Sie Watchtower zu Ihrer docker-compose.yml hinzu: - - - - - update_manager.docker.setup_step2 - 2. Fügen Sie diese Umgebungsvariablen zu Ihrem Part-DB Container hinzu: - - - - - update_manager.docker.setup_network_hint - Stellen Sie sicher, dass Part-DB und Watchtower im selben Docker-Netzwerk sind. Wenn Sie label-basierte Filterung in Watchtower verwenden (WATCHTOWER_LABEL_ENABLE=true), fügen Sie dem Part-DB Container das Label "com.centurylinklabs.watchtower.enable=true" hinzu. - - - - - update_manager.docker.watchtower_unreachable_title - Watchtower nicht erreichbar - - - - - update_manager.docker.watchtower_unreachable_description - Watchtower ist konfiguriert, kann aber nicht erreicht werden. Bitte prüfen Sie, ob der Watchtower-Container läuft und ob URL und Token korrekt sind. - - - - - update_manager.docker.confirm_update - Sind Sie sicher, dass Sie Part-DB über Watchtower aktualisieren möchten? Der Container wird mit dem neuen Image neu gestartet. Im Gegensatz zu Git-Updates können Docker-Updates nicht automatisch zurückgesetzt werden. - - - - - update_manager.docker.update_via_watchtower - Update über Watchtower zu - - - - - update_manager.docker.no_rollback_warning - Docker-Updates können nicht automatisch zurückgesetzt werden. Vor dem Update wird eine Datenbanksicherung erstellt, damit Sie Ihre Daten bei Bedarf wiederherstellen können. - - - - - update_manager.docker.progress_title - Docker-Update läuft - - - - - update_manager.docker.waiting_for_watchtower - Warte darauf, dass Watchtower das neue Image zieht... - - - - - update_manager.docker.elapsed - Verstrichen - - - - - update_manager.docker.waiting_title - Update gestartet - - - - - update_manager.docker.waiting_description - Watchtower wurde benachrichtigt. Es wird das neueste Docker-Image ziehen und den Part-DB-Container neu starten. - - - - - update_manager.docker.watchtower_working - Watchtower verarbeitet das Update... - - - - - update_manager.docker.watchtower_working_hint - Je nach Internetgeschwindigkeit und Imagegröße kann dies einige Minuten dauern. - - - - - update_manager.docker.restarting_title - Container wird neu gestartet - - - - - update_manager.docker.restarting_description - Watchtower hat das neue Image gezogen und startet den Part-DB-Container neu. - - - - - update_manager.docker.restarting_hint - Die Seite erkennt automatisch, wenn der Server wieder online ist. Dies dauert normalerweise 10-30 Sekunden. - - - - - update_manager.docker.success_title - Update abgeschlossen! - - - - - update_manager.docker.success_message - Part-DB wurde erfolgreich über Watchtower aktualisiert. - - - - - update_manager.docker.previous_version - Vorherige Version - - - - - update_manager.docker.new_version - Neue Version - - - - - update_manager.docker.back_to_update_manager - Zurück zum Update-Manager - - - - - update_manager.docker.go_to_homepage - Zur Startseite - - - - - update_manager.docker.timeout_title - Update dauert länger als erwartet - - - - - update_manager.docker.timeout_message - Das Update dauert länger als erwartet. Prüfen Sie die Watchtower-Container-Logs für Details. Das Update kann noch laufen. - - - - - update_manager.docker.retry - Erneut versuchen - - - - - update_manager.docker.warning - Warnung - - - - - update_manager.docker.do_not_close - Schließen Sie diese Seite nicht. Sie erkennt automatisch, wenn das Update abgeschlossen ist. - - - - - update_manager.docker.updating_via_watchtower - Update über Watchtower wird durchgeführt - - - - - update_manager.docker.step_waiting - Image wird gezogen - - - - - update_manager.docker.steps - Update-Schritte - - - - - update_manager.docker.step_trigger - Update auslösen - - - - - update_manager.docker.step_trigger_desc - Watchtower wurde benachrichtigt, nach Updates zu suchen - - - - - update_manager.docker.step_pull - Neues Image ziehen - - - - - update_manager.docker.step_pull_desc - Lade das neueste Docker-Image aus dem Register - - - - - update_manager.docker.step_restart - Container neu starten - - - - - update_manager.docker.step_restart_desc - Alten Container stoppen und neuen starten - - - - - update_manager.docker.step_verify - Verifizieren - - - - - update_manager.docker.step_verify_desc - Bestätige, dass Part-DB mit der neuen Version läuft - - - - - update_manager.docker.watchtower_status - Watchtower - - - - - update_manager.docker.watchtower_connected - Verbunden - - - - - update_manager.docker.watchtower_unreachable_short - Nicht erreichbar - - - - - update_manager.docker.watchtower_not_configured - Nicht konfiguriert - - - - - update_manager.docker.step_stop - Container stoppen - - - - - update_manager.docker.step_stop_desc - Aktuellen Container vor der Neuerstellung ordentlich stoppen - - - - - update_manager.docker.step_health - Health Check - - - - - update_manager.docker.step_health_desc - Warte darauf, dass der neue Container den Health Check besteht - - - - - update_manager.docker.updating - Part-DB wird über Docker aktualisiert... - - part.create_from_info_provider.lot_filled_from_barcode @@ -13461,149 +13065,5 @@ Buerklin-API-Authentication-Server: Zuordnungsfehler: Bitte prüfen Sie, ob Sie das richtige Trennzeichen ausgewählt haben! - - - settings.ai - KI - - - - - settings.ai.openrouter - OpenRouter - - - - - settings.ai.lmstudio - LMStudio - - - - - settings.ips.ai_extractor.model - KI-Modell - - - - - settings.ips.ai_extractor.ai_platform - KI-Plattform - - - - - settings.ips.ai_extractor.model.help - Das KI-Modell, das für die Extraktion verwendet werden soll. Muss strukturierte Ausgaben unterstützen. - - - - - settings.ips.ai_extractor.max_content_length - Maximale Webseitentextlänge - - - - - settings.ips.ai_extractor.max_content_length.description - Die maximale Anzahl an Zeichen der Webseite, die an den KI-Dienst gesendet werden. - - - - - settings.ips.ai_extractor.output_language - Ausgabesprache - - - - - settings.ips.ai_extractor.output_language.description - Standardmäßig liefern die Anbieter Informationen in der gleichen Sprache wie die Webseite. Mit dieser Option können Sie die KI bitten, für Sie zu übersetzen. Funktioniert möglicherweise nur mit bestimmten Modellen. - - - - - settings.ips.ai_extractor.additional_instructions - Zusätzliche Anweisungen - - - - - settings.ips.ai_extractor.additional_instructions.description - Die zusätzlichen Anweisungen werden an den System-Prompt angehängt. - - - - - info_providers.search.advanced_options - Erweiterte Optionen - - - - - info_providers.no_cache_search - Suchergebnisse nicht zwischenspeichern / Neue Suche erzwingen - - - - - info_providers.no_cache_details - Ergebnisdetails nicht zwischenspeichern / Neue Detailabfrage erzwingen - - - - - info_providers.from_url.method.generic_web - Klassischer Web-Scraper - - - - - info_providers.from_url.method.ai_web - KI Web-Scraper - - - - - info_providers.from_url.method - Methode - - - - - info_providers.from_url.no_cache - Cache ignorieren / Neue Infoabfrage erzwingen - - - - - info_providers.from_url.skip_delegation - Nicht an spezialisierte Infoanbieter delegieren - - - - - settings.ips.ai_extractor - KI Web Extraktor - - - - - settings.ips.ai_extractor.description - Dieser Infoanbieter verwendet ein großes Sprachmodell (LLM), um detaillierte Teileinformationen von beliebigen Shop-URLs zu extrahieren. - - - - - settings.ai.openrouter.help - Zugriff auf viele KI-Modelle über openrouter.ai - - - - - settings.ai.lmstudio.hosturl - Host-URL - -